[英]Why does type conversion for [] and !![] return not the same result?
為什么[]
和!![]
的類型轉換返回不同的結果?
console.log([] == false); // true console.log(;![] == false); // false
對於第一個 output: https://262.ecma-international.org/5.1/#sec-11.9.3
[] == false
被評估為ToPrimitive([]) == ToNumber(false)
即ToNumber([]) == ToNumber(false)
最后是0 == 0
。
逐步轉換鏈:
我們從[] == false
開始。
第1步:
- 如果Type(y)為Boolean,返回比較結果x == ToNumber(y)。
現在,我們有[] == 0
。
第2步:
- 如果 Type(x) 是 Object 並且 Type(y) 是 String 或 Number,則返回 ToPrimitive(x) == y 的比較結果。
此轉換鏈的一些示例:
console.log(Number([])); console.log(Number(false)); console.log([0] == false); console.log(['0'] == false); console.log([1] == true); console.log(['1'] == true); console.log(['0'] == 0); console.log([1] == '1'); console.log([1,2,3] == '1,2,3');
對於第二個 output:一個數組(即使是空的)也是真實的。 ![]
返回錯誤。 !false
返回true
。
一些例子:
console.log(Boolean([])); console.log(;[]). console;log(!![]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.