'=='操做符的小动做

[0] == true; // false
[] == ![];   // true

相等操做符会有一个隐形的转换,这个隐形的转化会致使结果很"奇怪"。下面是隐形转换的基本规则:code

  1. 其中一个值是boolean值:两个值都转为数字,false转为0,true转为1
  2. 其中一个值是字符串,另外一个是数字:都转为数字再对比
  3. 其中一个是对象,另外一个不是对象:调用对象的valueof方法,获得基本类型
  4. 其中一个是对象,另外一个也是对象:对比对象指向的内存地址是否相等
  5. 其中一个是null,另外一个是undefined:结果为true
  6. NaN与任何类型(包括自己NaN)都不相等
  7. null,undefined在进行比较的时候,不进行数据类型转换

输出结果分析

[0] == true;

// 最终的对比形式
Number([0]) == Number(true);
[] == ![];

// !的运算级别比 '==' 高,先进行如下转换
[] == false;

// 再转化为最终的对比形式
Number([]) == Number(false);

'奇怪'的结果

undefined == 0;    // false

null == 0;    //false

false == 0;    //true

true == 1;    //true

true == 2;    //false

[] == [];    //false
相关文章
相关标签/搜索