一、数据类型:

  原始数据类型: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};