2016-08-25 12 views
1

私はこの非常に単純化されたifステートメントを理解しようとしている私の頭を傷つけています。答えを探しているとき、三項演算子に関連する答えが見つかりました。Javascript簡略化ifステートメント

とにかく。後者がReferenceErrorを投げているのに対し、下の最初のケースがうまくいくのはなぜですか?物事の仕組みを理解しようとするだけです。

true && alert("test")

var x; 
 
true && x = 10;

+4

'='あなたが割り当てていない比較 – Weedoze

+5

私はそれがこの '真&&(X = 10)のようなものであることが必要だと思いやっている;'エラーを防ぐためにそれ以外の場合は、 '(true && x)= 10'と解釈されます – Titus

+1

多分何らかの順序で解釈されます。 このようになるかもしれません(わかりませんが、考えてみてください): true && x = 10; (true && x)= 10; false = 10 - >間違っています – Adrian

答えて

4

JavaScriptは、代入演算子よりも&&に優先順位が高いようです。

true && (x = 10); // Sets x to 10 and the whole expression evaluates to 10. 

そして、ちょうどあなたが必要な場合:あなたが割り当て周りの括弧を追加した場合、私はあなたが期待していた動作を確認すると思います

(true && x) = 10; 

:あなたが与えた二行目は次のように解析されますポインタがなぜ&&をif文として使用できるかについては、「短絡評価」というフレーズが役に立ちます。

+2

"&&"に優先順位をつけているように見えるだけではなく、その演算子の優先順位を高くします:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/オペレータ/ Operator_Precedence – JLRishe

+0

@Rabbits:このフレーズをありがとう。今私はそれを何と呼ぶべきか知っています。 :) – stafffan

3

:括弧をこのように追加し、仕事への2番目のケースでは(true && x) = 10;

&&操作は=前に計算されるので、あなたの第二の例は意味を作っていないに終わるだろうIt'a Operator precedence

あなたは&&だからtrue && x = 10;は明らかに間違っている、実際に(true && x) = 10;ある=

よりも高い優先度を持っている見ることができるように。変数にのみ値を代入できます。(true && x)は、falseまたはxのいずれかです。

1

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

関連する問題