JavaScript的数据类型分为:基本数据类型和引用数据类型。
JavaScript的基本数据类型有undefined、null、string、Boolean、number,ES6新增的Symbol。
JavaScript引用数据类型:object、function、Array和Date等等。
undefined表示一个值不存在,一般在以下这几种情况才返回undefined。
null表示一个空指针对象,如果使用typeof运算符来检测null时,会返回object。
在以下几种情况会返回null:
undefined和null在非严格相等的情况下是相等的,并且在转为Boolean类型值时,都是false。
在JavaScript中,null是关键字,但是undefined是JavaScript的一个全局变量;

如上图所示,在使用Object.prototype.toString.call()来检测两者类型时,返回的结果也是有所区别的。
在转化为string类型的时候,undefined转为’undefined’,null转为’null’;
在转为number类型的时候,null转为0,可以进行运算;undefined会转为NaN;
建议:在任何情况,没有必要将一个变量设置为undefined,如果声明一个变量是为了在后面用来保存某个值,那么这个变量应该初始化为null。
Boolean类型,之后两种情况:要么是true,要么是false。
将其他数据类型转换为Number类型,通常用到三个函数:Number()、parseInt()、parseFloat()。
- 字符串只含有数字,直接转为十进制数;
- 如果数字前面含有0,则是直接忽略0;
- 字符串是有效的浮点型数,直接转为对应的浮点数,前面的0会被清空,只保留一个
- 字符串是有效的十六进制数,会转换为对应的十进制数;
- 如果是有效的八进制数,直接按照十进制进行转换,前面的0被忽略点;
- 字符串为空,或者是连续多个空格,直接转为0;
- 字符串含有其他格式的内容,直接返回NaN;
parseInt()函数是用来解析一个字符串,并且返回对应基数的整数值。例如:parseInt(‘123’,8),结果为83。
其中的第二个参数是表示进制转换的基数,范围是2到36,默认值是10。
如果该字符串不能转换为Number类型,那么会返回NaN。
非字符串转换为整数:
如果参数本身是Number类型,就会按照科学计数法计算后转换为字符串,最后按照对应的基数转换得到最终结果。
如果参数是字符串并且含有e字符,那么会判断字符e是否是处在设置的进制范围内,如果是,则直接转换为对应进制数,否则是忽略掉。例如:
parseInt(6e3,16),6e3等于6000,转为’6000’,再执行parseInt(‘6000’,16)结果为24576。
parseInt(‘6e3’, 10),结果为1763。
['1','23','46','43'].map(parseInt)
按照这个逻辑流程理解,我们会认为结果[1,23,46,43]。但是执行结果为[1,NaN,NaN,NaN]。
因为这段代码是等价于:
['1','23','46','43'].map((item,index)=>parseInt(item,index))
所以要达到预期效果,代码需要改为:
['1','23','46','43'].map((item,index)=>parseInt(item,10))
parseFloat函数用来解析一个字符串,返回一个浮点型数,如果不能转为number,直接返回NaN。
· isNaN()函数在判断是否为NaN时,需要先进行数据类型转换,只有在无法转换为数字时才会返回“true”;
· Number.isNaN()函数在判断是否为NaN时,只需要判断传入的值是否为NaN,并不会进行数据类型转换。
在将某个数据转换为字符串时,有一个简单的方法是直接使用加号(+)拼接一个空字符串(“”)。
String()函数将任何类型的值,转为字符串类型