18
a = 1;
b = "1";
if (a == b && a = 1) {
    console.log("a==b");
}

上記の Javascript コードはif、Google Chrome 26.0.1410.43のステートメントでエラーになります。

Uncaught ReferenceError: 代入の左辺が無効です

aこれは、ステートメントの 2 番目の部分の&&変数a=1が代入できないためだと思います。しかし、以下のコードを試すと、完全に混乱します!

a = 1;
b = "1";
if (a = 1 && a == b) {
    console.log("a==b");
}

1 つのステートメントが正しいのに、もう 1 つのステートメントが間違っているのはなぜですか?

4

4 に答える 4

21

2 番目のバージョンは次のように解析されa = (1 && a == b)ます。つまり、式の結果1 && a == bが に代入されaます。

割り当ての左側が期待どおりに解析されないため、最初のバージョンは機能しません。右辺のすべてに値を代入しようとしているかのように、式を解析します-- (a == b && a) = 1

これはすべて、さまざまな演算子の優先順位に基づいています。ここでの問題=は、他の演算子よりも優先順位が低いことに起因します。

于 2013-05-18T07:17:23.170 に答える