簡體   English   中英

為什么“[] == 0”返回true而“[]”為真且“0”為假?

[英]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”轉換

https://es5.github.io/#x9.2

如果參數為+ 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”數字和字符串進行比較時

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

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