
================
类型
未定义 undefine
一般来说,永远不用显式地给某个变量设置 undefined 值,只是区分未定义和空指针null。
用于判断时,是一个假值false
特殊:
let message; // 这个变量被声明了,只是值为 undefined// 确保没有声明过这个变量// let ageconsole.log(typeof message); // "undefined"console.log(typeof age); // "undefined"
let message; // 这个变量被声明了,只是值为 undefined// age 没有声明if (message) {// 这个块不会执行};if (!message) {// 这个块会执行};if (age) {// 这里会报错,要确定自己是要检测是否存在,还是是否假值};
空 null
1、在定义将来要保存对象值的变量时,建议使用 null 来初始化,不要使用其他值。
这样,只要检查这个变量的值是不是 null 就可以知道这个变量是否在后来被重新赋予了一个对象的引用
2、用于判断时,是一个假值false
数值 Number
整数int,浮点数float
var a = 1;var b = 1.2;var c = 3e2; //3乘以10的2次方var d16 = 0x111 //16进制var d8 = 0o111 //8进制var d2 = 0b111 //2进制
基本方法:https://www.w3cschool.cn/jsref/jsref-obj-number.html
额外方法:https://www.yuque.com/yejielin/mypn47/mkkfc6#646b02d0
1、进制

打印出来的是十进制数
2、浮点
1、因为存储浮点值使用的内存空间是存储整数值的两倍,所以 ECMAScript 总是想方设法把值转换为整数。
2、不要用浮点进行计算,不精确。
let floatNum1 = 1.; // 小数点后面没有数字,当成整数 1 处理let floatNum2 = 10.0; // 小数点后面是零,当成整数 10 处理let sum = 0.1 + 0.2 ;//0.30000004
3、科学计数
let floatNum1 = 3.125e7; // 等于 31250000let floatNum2 =3e-17; //如 0.000 000 000 000 000 03,最高17位小数//默认情况下,ECMAScript 会将小数点后至少包含 6 个零的浮点值转换为科学记数法
4、范围
(1)
可以表示的最小数值保存在 Number.MIN_VALUE 中,这个值在多数浏览器中是 5e324;
可以表示的最大数值保存在Number.MAX_VALUE 中,这个值在多数浏览器中是 1.797 693 134 862 315 7e+308。
(2)
如果某个计算得到的数值结果超出了 JavaScript 可以表示的范围,那么这个数值会被自动转换为一个特殊的 Infinity(无穷)值。
任何无法表示的负数以-Infinity(负无穷大,Number.POSITIVE_INFINITY)表示,
任何无法表示的正数以 Infinity(正无穷大Number.NEGATIVE_INFINITY)表示。
要确定一个值是不是有限大(即介于 JavaScript 能表示的
最小值和最大值之间),可以使用 isFinite()函数
let result = Number.MAX_VALUE + Number.MAX_VALUE;console.log(isFinite(result)); // false
5、NaN
not a num
console.log(0/0); // NaNconsole.log(-0/+0); // NaNconsole.log(5/0); // Infinityconsole.log(5/-0); // -Infinityconsole.log(NaN/10); // NaNconsole.log(NaN == NaN); // falseconsole.log(isNaN(NaN)); // trueconsole.log(isNaN(10)); // false,10 是数值console.log(isNaN("10")); // false,可以转换为数值 10console.log(isNaN("blue")); // true,不可以转换为数值console.log(isNaN(true)); // false,可以转换为数值 1//此时,首先会调用对象的 valueOf()方法,//然后再确定返回的值是否可以转换为数值。//如果不能,再调用 toString()方法,并测试其返回值。
6、ES12 大数值逗号
一般数字会通过100,000这样,每个3位给一个逗号隔开,方便直观看到多大的数值
但是JS不支持,ES12提供了另一种方式,如下,用_下划线隔开

字符串 String
尽量用双引号,因为很多语言只支持双引号(如java)
var c = "张三" ;var d = '李四' ;var e = "你好,我是'呵呵'";var f = "你好,我是\"呵呵\" " ; //转义字符
字符串相当于是一个字符数组,可以用c[1]的形式返回字符串中的值,例子就是’三’,c.length 为2。
不要用new String创建 String 对象。它会拖慢执行速度,并可能产生其他副作用:
字符串的一些方法:https://www.w3cschool.cn/javascript/js-strings.html
常用方法
分割/提取
a.split(“分隔符”),返回分割后的数组

ES8 填充
padStart是从头开始填充,padEnd是从最后开始填充
第一个参数是填充到多少位
不加第二个参数默认是填充空格

ES10 去除空格


ES6 模板字符串(重要)

3、拼接
原本的拼接
优化后的拼接
(里面还可以放表达式)
(里面还可以放函数)

标签模板函数

可以通过 函数名模板字符串 的方式调用函数
第一个参数是,字符串被空格、${}分割后,的字符,然后组成数组。
第二个参数是,第1个${}里面的结果
第三个参数是,第2个${}里面的结果
如此类推
我们这样用的情况比较少,但是一些第三方库如react的库,会用到
(div是这个库的一个函数)
(div是这个库的一个函数)
布尔 Boolean
var aa = true; //内部储存是1var ab = false; //内部储存是0

对象 Object
由大括号组成,里面的构造是 键 : 值 组成
var Obj = {};var Obj1 = {name:"yjl",age:30};
https://www.yuque.com/yejielin/mypn47/mkkfc6
符号 Symbol (ES6)
创建
1、普通创建
let s1 = Symbol();let s2 = Symbol();console.log(s1 == s2); // false// ES10,可以传入一个描述let s3 = Symbol('foo');let s4 = Symbol('foo');console.log(s3 == s4); // false// 查看描述s3.description; // foo
2、使用全局符号创建
相同的描述,可以有相同的值
true
2个创建方式的区别
区别就是会根据for后面的内容创建,如果内容一样,指向就是一样的。
let localSymbol = Symbol('foo');let globalSymbol = Symbol.for('foo');console.log(localSymbol === globalSymbol); // false
使用场景
安全高效给对象添加属性和方法,避免覆盖掉原理对象的属性和方法
给obj添加属性
调用属性
调用
let c = Symbol();let num = reactive({a:1,b:2,[c]:function(){console.log('ccccc');}});function add() {num.a += 1;console.log(num);num[c](); //调用};
获取

获取Symbol.for() 创建的描述
ES11 大整型 BigInt
使用场景
最大安全整数
传统的最大安全整数,不能再增加了

=================
变量储存
基本数据类型:Number、String、Boolean、Null、Undefine,储存在栈空间
引用数据类型:Object ,储存在堆空间(包括数组)

=================
查看类型 typeof

JavaScript 中有五种可包含值的数据类型:
字符串(string)
数字(number)
布尔(boolean)
对象(object)
函数(function)
有三种对象类型:
对象(Object)
日期(Date)
数组(Array)
同时有两种不能包含值的数据类型:
null
undefined
特殊:
console.log(typeof null); //Objectconsole.log(typeof undefined); //undefinedconsole.log(null == undefined); // true
=================
类型转换
其他转数字
任何转数值 Number( )
字符串转数值 parseInt( )(优先) / parseFloat( )

因为不传底数参数相当于让 parseInt()自己决定如何解析,所以为避免解析出错,建议始终传给它第二个参数

其他转字符串

默认情况下,toString()返回数值的十进制字符串表示。而通过传入参数,可以得到数值的二进制、八进制、十六进制,或者其他任何有效基数的字符串表示



其他转布尔
typeof xx,可以查看xx的数据类型.constructor 可以返回构造函数+ 可以把变量转换成数字,如x = + y;//数值 转 字符串var a = 5;console.log(typeof a.toString());console.log(typeof String(a));console.log(typeof (a+""));//其他转数值var b = "4";console.log(typeof Number(b));console.log(typeof Number(a)); //输出为NaN,not a numberconsole.log(typeof Number(undefined)); //输出为NaN,not a numberconsole.log(typeof Number(null));//输出为0var c = "4a"console.log(typeof parseInt(b),parseInt(c,10),parseInt(null)); //输出为4 4 NaN//其他转布尔console.log(typeof Boolean("0")); //true,只要有内容就是true,除了数值0console.log(typeof Boolean("")); //falseconsole.log(typeof Boolean(0)); //falseconsole.log(typeof Boolean(null)); //falseconsole.log(typeof Boolean(undefined)); //false
请注意:
NaN 的数据类型是 number
数组(Array)的数据类型是 object
日期(Date)的数据类型为 object
null 的数据类型是 object
如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 Object。


并不是整数
