私はこの非常に単純化されたifステートメントを理解しようとしている私の頭を傷つけています。答えを探しているとき、三項演算子に関連する答えが見つかりました。Javascript簡略化ifステートメント
とにかく。後者がReferenceError
を投げているのに対し、下の最初のケースがうまくいくのはなぜですか?物事の仕組みを理解しようとするだけです。
true && alert("test")
var x;
true && x = 10;
私はこの非常に単純化されたifステートメントを理解しようとしている私の頭を傷つけています。答えを探しているとき、三項演算子に関連する答えが見つかりました。Javascript簡略化ifステートメント
とにかく。後者がReferenceError
を投げているのに対し、下の最初のケースがうまくいくのはなぜですか?物事の仕組みを理解しようとするだけです。
true && alert("test")
var x;
true && x = 10;
JavaScriptは、代入演算子よりも&&
に優先順位が高いようです。
true && (x = 10); // Sets x to 10 and the whole expression evaluates to 10.
そして、ちょうどあなたが必要な場合:あなたが割り当て周りの括弧を追加した場合、私はあなたが期待していた動作を確認すると思います
(true && x) = 10;
:あなたが与えた二行目は次のように解析されますポインタがなぜ&&
をif文として使用できるかについては、「短絡評価」というフレーズが役に立ちます。
これはoperator precedenceに関係しています。
var x;
true && (x = 10);
:括弧をこのように追加し、仕事への2番目のケースでは(true && x) = 10;
:&&
操作は=
前に計算されるので、あなたの第二の例は意味を作っていないに終わるだろうIt'a Operator precedence。
あなたは&&
だからtrue && x = 10;
は明らかに間違っている、実際に(true && x) = 10;
ある=
よりも高い優先度を持っている見ることができるように。変数にのみ値を代入できます。(true && x)
は、false
またはx
のいずれかです。
alert()の結果は未定義です。 2番目の例では、演算子の優先順位についてです
var x; // x is now 'undefined'
true && x; // true and undefined is undefined
:だから最初の例では、と再入力することができます。実行時の式を(true & & x)= 10と評価します。
var x;
true && (x = 10); // result will be 10
'='あなたが割り当てていない比較 – Weedoze
私はそれがこの '真&&(X = 10)のようなものであることが必要だと思いやっている;'エラーを防ぐためにそれ以外の場合は、 '(true && x)= 10'と解釈されます – Titus
多分何らかの順序で解釈されます。 このようになるかもしれません(わかりませんが、考えてみてください): true && x = 10; (true && x)= 10; false = 10 - >間違っています – Adrian