我看到了一個令人興奮和令人困惑的問題。基於「JavaScript,好的部分」:爲什麼在Javascript中''=='0'是錯誤的,但是0 ==''是真的?
'' == '0' // false
0 == '' // true
那麼,爲什麼?
我看到了一個令人興奮和令人困惑的問題。基於「JavaScript,好的部分」:爲什麼在Javascript中''=='0'是錯誤的,但是0 ==''是真的?
'' == '0' // false
0 == '' // true
那麼,爲什麼?
在第一種情況下,兩者都是String
類型的,因此不等同的,因爲它們通過它們的值進行比較。
在第二種情況下,左手側是Number
,所以有發生的轉換,這使得''
到0
和類型轉換因此true
==
結果,然後比較,如果需要的話。 ===
不會typecast,所以
0 === '' // false
簡單的答案:因爲它是。
高級答案:
'' == '0'
的項目比較字符串,因爲他們是兩個字符串。無需更改類型,只需比較即可。他們明顯不同,所以false
。
0 == ''
比較項目,如數字。 ''
轉換爲0
,因此它們是相同的。
但真的,誰在乎?
tl; dr型強制。 http://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript或http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator- vs-i-use-in-javascript-comparisons for more。 – 2015-02-09 16:47:53
https://www.destroyallsoftware.com/talks/wat – error 2015-02-09 16:48:03
@Dom有趣的是,PHP認爲'「0」'是一個falsy串,大概是因爲數據庫傳遞所有值作爲字符串等等「假」值從數據庫需要被視爲虛假。真的,真的很冒險和有時很煩人XD – 2015-02-09 16:49:18