![](/img/trans.png)
[英]Why does lodash `_.all([true, true, true], true);` return `false`?
[英]why does “[] == 0” return true while “[]” is true and “0” is false?
如果我在瀏覽器控制台中執行以下行
!![] //--- returns true
!!0 //--- returns false
我得到那個[]
和0
有不同的布爾值。
我不明白為什么
[] == 0 //--- returns true
返回true
。
我錯過了什么?
請記住,數組是對象,0是數字。
而正如“user2864740”告訴..
1)當你做的時候
!![] //--- returns true
!!0 //--- returns false
您正在執行所謂的“ToBoolean”轉換
數
如果參數為+ 0,-0或NaN,則結果為false; 否則結果是真的。
對象(我們的[])
總是如此
2)但是當你使用==你執行所謂的“平等比較”時
https://es5.github.io/#x11.9.3
這里有點復雜,但要了解發生了什么,你必須記住==做一個類型強制(所以你可以比較橙子和蘋果:))
首先,編譯器將[]轉換為某種原始類型。
如果Type(x)是String或Number而Type(y)是Object,則返回比較結果x == ToPrimitive(y)。
To ToPrimitive的工作原理是文章:),但很容易記住,closet基本類型到數組是字符串。 數組將轉換為空字符串。
[] .toString()===“”
所以現在我們需要比較空字符串和數字0
"" == 0 // true
嗯。 這是真的。 但那是為什么呢? 請記住,當您與“Equality Comparison”數字和字符串進行比較時
- 如果Type(x)為Number且Type(y)為String,則返回比較結果x == ToNumber(y)。
所以讓我們嘗試將空字符串轉換為數字
Number("") === 0
最后
0 === 0
我希望這能解釋一下:)
JavaScript可能會將數組轉換為數字:
!!Number([]) // false
Number([]) == 0 // true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.