關於javascript中==的判斷
黄舟
黄舟 2017-05-19 10:29:55
0
6
642

0 == "" // true

上面這段程式碼是隱式轉換導致的還是因為0等於false,""也等於false所以它們才相等,但我覺得隱式轉換的可能性大,因為使用=== 號就不會出現這種問題。

我的疑問是這樣的它是

0 == 0

還是

false == false

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(6)
黄舟

我跟你講清楚吧,隱式轉換這裡沒人比我更熟悉了。

首先看ECMAScript規範對==轉換的規則:

左邊typeof 0是number型

右邊typeof ""是string型

依照對應法則,滿足低4條規則,此時會進行conparison x==ToNumber(y)此時0==ToNumber("")

再來看看ECMAScript對ToNumber()的對應規則:

接著往下面找:

看到沒,最後ToNumber("")會轉成+0

最後就成了0==+0,你說等不等?記住隱式轉換最後都會變成兩個數字的比較。

具體對應規則這張圖可以描述:

當然這都是最簡單的,樓主可以試試這幾個:

[]==![]
++[[]][+[]]+[+[]]==10
console.log(([][[]]+[])[+!![]]+([]+{})[!+[]+!![]])

好了,上面弄不懂的話,可以看看我寫的兩篇文章,要花時間研究才能看得懂。

從 []==![] 為 true 剖析 JavaScript 各種蛋痛的型別轉換

從++[[]][+[]]+[+[]]==10?深入淺出弱型別JS的隱式轉換

弄清楚上面,這些可以拿去練習:

1.{}+{}

2.{}+[]

3.[]+{}

4.{}+1

5.({}+1)

6.1+{}

7.[]+1

8.1+[]

9.1-[]

10.1-{}

11.1-!{}

12.1+!{}

13.1+"2"+"2"

14.1+ +"2"+"2"

15.1++"2"+"2"

16.[]==![]

17.[]===![]
刘奇

0等于false也是隐式类型转换的一種。

大家讲道理

轉換都是false。

!!0
!!""

當然,具體的比較要看規則

刘奇

0會隱式轉換為false,嚴格模式下會報錯,建議用===比較

给我你的怀抱

js關於「==」的比較是有規則的,符合你這裡的情況具體來說就是:如果一個值是數字,另一個是字串,先將字串轉換成數字,然後使用轉換後的值進行比較。
所以等號右邊的空字串「」會轉換成數字0,左右就相當了。在js權威指南上有關於==比較轉換規則的詳細介紹

刘奇

0 == "" // true

這語句相當於 0 == Number("")

對於數字、字串、布林類型這3種類型之間的比較都是先轉換成數字再比較。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板