'=='操做符的小動做

[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
相關文章
相關標籤/搜索