4

私は以下に出くわし、その理由を把握できませんでした.誰か説明してもらえますか?

var foo = [0];
console.log(foo == !foo); // true 
console.log(foo == foo);  // true
4

2 に答える 2

6

2 番目の比較は簡単に説明fooできます。それ自体に等しいです。

ただし、最初のものは少し注意が必要fooです。これはオブジェクトである配列であり、 booleantrue強制すると に評価されます。そう!fooですfalse。しかしfoo、比較の左側はブール値に変換されていません。両方のオペランドは、等値比較中に実際に数値に変換されます。評価するとこんな感じ。

[0] == false
[0] == 0
"0" == 0
0 == 0
true

MDNによると、等値演算子との比較では==:

2 つのオペランドが同じ型でない場合、JavaScript はオペランドを変換してから、厳密な比較を適用します。オペランドのいずれかが数値またはブール値の場合、可能であればオペランドは数値に変換されます

この説明が表面的に聞こえることは承知しています。実際にはそれよりもはるかに複雑ですが、基本的な手順は上に挙げたものです。ECMA-262 仕様、特にセクション911.9の詳細を確認できます。

于 2012-10-05T20:35:17.920 に答える
-1

「==」と「!=」の代わりに「===」と「!==」を 使用する必要があります

http://net.tutsplus.com/tutorials/javascript-ajax/the-10-javascript-mistakes-youre-making/

于 2012-10-05T20:41:02.430 に答える