[0] == true; // false
[] == ![]; // true
相稱操作符會有一個隱形的轉換,這個隱形的轉化會致使效果很”新鮮”。下面是隱形轉換的基礎劃定規矩:
- 个中一個值是boolean值:兩個值都轉為数字,false轉為0,true轉為1
- 个中一個值是字符串,另一個是数字:都轉為数字再對照
- 个中一個是對象,另一個不是對象:挪用對象的valueof要領,獲得基礎範例
- 个中一個是對象,另一個也是對象:對照對象指向的內存地址是不是相稱
- 个中一個是null,另一個是undefined:效果為true
- NaN與任何範例(包含自身NaN)都不相稱
- 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