一、数据类型:
原始数据类型:Boolean/ Null / Undefined / Number / String / Symbol(ES6中新增数据类型)
对象:Object
二、类型转换
1)显示类型转换:
a. Number函数
b. String函数
c.Boolean函数
2) 显示类型转换 Number函数
当原始类型转换时,分别对应以下情况:
数值:转换后还是原来的值。
字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN,空字符串转换为0
布尔值:true转成1, false转成0
undefined: 转成NaN
null: 转成0
当为对象类型转换时,遵循以下方式:
a.先调用对象自身的valueOf方法,如果改方法返回原始类型的值(数值/字符串/boolean等),则直接对该值使用 Number方法,不在进行后续步骤。
b.如果valueOf方法返回复合类型的值,在调用对象自身的toString方法,如果toString方法返回原始类型的值,则对该值使用Number方法,不在进行后续步骤。
c.如果toString方法返回的时复合类型的值,则报错.
如例: var a = {b: 1}; Number(a); // 输出NaN,按照如上步骤规则,则
首先a.valueOf() 输出{b: 1}, 返回不是原始数据类型,则调用toString方法,返回“[object Object]”, 返回字符串类型,Number('[object, object]') 则输出NaN。
3)显示类型转换 String函数
当转换为原始类型数据时,按照如下规则:
数值:转换为相应的字符串
字符串: 转换后还是原来的值
布尔值: true转换为‘true’, false转换为‘false’
undefined: 转换为“undefined”
null: 转换为‘null’
当转换类型为对象类型时,按照如下规则转换:
a.先调用toString方法,如果toString返回的时原始数据类型,则对该值使用toString方法,不在进行以下步骤。
b.如果toString方法返回对是复合类型的值,在调用valueOf方法,如果valueOf方法返回的是原始数据类型的值,则对该值使用String方法,不在进行以下步骤。
c.如果valueOf方法返回的是复合类型的值,则报错。
4)显示类型转换 Boolean函数
当转换数据为原始数据类型是,按照如下规则转换
当为null、undifined、NaN、0、‘’,转换为false,其他转换都为true
5)隐式类型转换,如四则运算/判断语句/Native调用,转换与以上转换规则相同.
输出以下结果:
[] + [];
[] + {};
{} + [];
{} + {};
true + true;
1 + {a: 1};