2015-02-09 44 views
0

我看到了一個令人興奮和令人困惑的問題。基於「JavaScript,好的部分」:爲什麼在Javascript中''=='0'是錯誤的,但是0 ==''是真的?

'' == '0'   // false 
0 == ''    // true 

那麼,爲什麼?

+2

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

+1

https://www.destroyallsoftware.com/talks/wat – error 2015-02-09 16:48:03

+0

@Dom有趣的是,PHP認爲'「0」'是一個falsy串,大概是因爲數據庫傳遞所有值作爲字符串等等「假」值從數據庫需要被視爲虛假。真的,真的很冒險和有時很煩人XD – 2015-02-09 16:49:18

回答

1

在第一種情況下,兩者都是String類型的,因此不等同的,因爲它們通過它們的值進行比較。

在第二種情況下,左手側是Number,所以有發生的轉換,這使得''0 和類型轉換因此true

==結果,然後比較,如果需要的話。 ===不會typecast,所以

0 === '' // false 
2

簡單的答案:因爲它是。

高級答案:

  • '' == '0'的項目比較字符串,因爲他們是兩個字符串。無需更改類型,只需比較即可。他們明顯不同,所以false

  • 0 == ''比較項目,如數字。 ''轉換爲0,因此它們是相同的。

但真的,誰在乎?