簡體   English   中英

為什么 [] 和?![] 的類型轉換返回不同的結果?

[英]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步:

  1. 如果Type(y)為Boolean,返回比較結果x == ToNumber(y)。

現在,我們有[] == 0

第2步:

  1. 如果 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM