我碰到以下無法理解的原因,有誰能解釋一下嗎?javascript比較危機
var foo = [0];
console.log(foo == !foo); // true
console.log(foo == foo); // true
我碰到以下無法理解的原因,有誰能解釋一下嗎?javascript比較危機
var foo = [0];
console.log(foo == !foo); // true
console.log(foo == foo); // true
第二個比較很容易解釋:foo
等於自己。
第一個,但是,是一個有點棘手:foo
是一個數組,它是一個對象,該對象的計算結果爲true
時coerced to boolean。所以!foo
是false
。但比較左側的foo
未被轉換爲布爾值。兩個操作數在平等比較期間實際上轉換爲數字。這是如何計算:
[0] == false
[0] == 0
"0" == 0
0 == 0
true
據MDN,與相等運算符==
比較:
如果兩個操作數是不一樣的類型,JavaScript的轉換操作數則實行嚴格的比較。如果任一操作數是數字或布爾值,則操作數將盡可能地轉換爲數字
我知道這個解釋聽起來很膚淺。它實際上比這更復雜,但基本步驟是我上面列出的那些。您可以在ECMA-262規範中看到詳細信息,特別是在章節9和11.9上。
是啊,那就是我得到的 – saml
您應該使用 「===」 和而不是 「==」 和 更多的解釋有 「==!」 「=!」: Which equals operator (== vs ===) should be used in JavaScript comparisons?
http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/
的https:// WWW。 destroyallsoftware.com/talks/wat :-) – Alex
作爲一個附註 - 在JavaScript中,當使用==作爲比較時,您通常會得到意想不到的結果。您應該始終使用===,因爲它不使用類型轉換。 – PhillipKregg
類型強制:http://webreflection.blogspot.com/2010/10/javascript-coercion-demystified.html – Mathletics