Javascript は、論理演算子andに対して短絡評価を使用します。ただし、または値ではなく、実行を停止した最後の値の結果を返すという点で、他の言語とは異なります。||
&&
true
false
次の値は、JavaScript では偽と見なされます。
演算子の優先順位規則を無視し、物事を単純に保つと、次の例は、どの値が評価を停止し、結果として返されるかを示しています。
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
最初の 5 つの値までNaN
は偽であるため、最初の真の値に一致するまですべて左から右に評価されます"Hello"
。これにより、式全体が真になり、それ以上の値は評価されず"Hello"
、式の結果として返されます。 . 同様に、この場合:
1 && [] && {} && true && "World" && null && 2010 // null
null
最初の 5 つの値はすべて真であり、式を false にする最初の偽値 ( ) を満たすまで評価されるため、それ2010
以上評価されずnull
、式の結果として返されます。
あなたが与えた例は、JavaScript のこのプロパティを利用して割り当てを実行しています。一連の値の中で最初の真または偽の値を取得する必要がある場所ならどこでも使用できます。以下のコードは、if-else チェックを行う代わりに、デフォルト値の割り当てを容易にするため、に値を割り当てます"Hello"
。b
var a = false;
var b = a || "Hello";
以下の例はこの機能の悪用と言えますが、コードが読みにくくなっていると思います。
var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);
アラート内で、 が偽物かどうかを確認し、messages
偽物である場合は評価して を返しnoNewMessagesText
、そうでない場合は評価して を返しnewMessagesText
ます。この例では誤りなので、 noNewMessagesText と alert で停止し"Sorry, you have no new messages."
ます。