私は以下に出くわし、その理由を把握できませんでした.誰か説明してもらえますか?
var foo = [0];
console.log(foo == !foo); // true
console.log(foo == foo); // true
私は以下に出くわし、その理由を把握できませんでした.誰か説明してもらえますか?
var foo = [0];
console.log(foo == !foo); // true
console.log(foo == foo); // true
2 番目の比較は簡単に説明foo
できます。それ自体に等しいです。
ただし、最初のものは少し注意が必要foo
です。これはオブジェクトである配列であり、 booleantrue
に強制すると に評価されます。そう!foo
ですfalse
。しかしfoo
、比較の左側はブール値に変換されていません。両方のオペランドは、等値比較中に実際に数値に変換されます。評価するとこんな感じ。
[0] == false
[0] == 0
"0" == 0
0 == 0
true
MDNによると、等値演算子との比較では==
:
2 つのオペランドが同じ型でない場合、JavaScript はオペランドを変換してから、厳密な比較を適用します。オペランドのいずれかが数値またはブール値の場合、可能であればオペランドは数値に変換されます
この説明が表面的に聞こえることは承知しています。実際にはそれよりもはるかに複雑ですが、基本的な手順は上に挙げたものです。ECMA-262 仕様、特にセクション9と11.9の詳細を確認できます。
「==」と「!=」の代わりに「===」と「!==」を 使用する必要があります
http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/