JavaScriptの短絡評価(ショートサーキット) and / orについて
JavaScriptで使う&&と||の深いところをまとめました。
&&と||は実はtrue/falseだけを返すものではありません。
どんなデータ型でも使うことができますし、どんなデータ型でも返すことができます。
そして、短絡評価があります。
短絡評価に関しては&&と||で挙動が違うのであとで確認するとして、まずは、
どんなデータ型でも使うことができますし、どんなデータ型でも返すことができる例をみてみましょう。
&&と||はどんなデータ型でも使える/返せる
{
console.log(5 ||'yamada'); //5が返される
console.log(0 || '' || false || undefined || null || 5 ||'yamada'); //5が返される
}
このように、&&と||はどんなデータ型でも使うことができますし、どんなデータ型でも返すことができます。
では、なぜ上の文で5が返されるのでしょうか?
それは、JavaScriptには、JavaScriptのショートサーキットがあるからです。
||(or)の短絡評価(ショートサーキット)
||(or)の短絡評価(ショートサーキット, Short Circuiting, Short ciircuit evaluation)は、truthyな値が見つかった時点で、後のものを評価することなく値を返すことです。
すべてfalsyな値なら、最後の値を返します。
JavaScriptは上では5という数値はtruthyな値のため、それが見つかった時点で後の’yamada’を評価することなく値をコンソールに表示します。
この現象は、論理的に考えても正しい判断です。なぜなら、orというのはどちらか一方でもtrueならtrueを返します。そのため、truthyな値が見つかった時点で値を返すのは論理的に正しいといえます。
&&(and)の短絡評価(ショートサーキット)
つぎの&&(and)の短絡評価の挙動をみてみましょう。
&&(and)の短絡評価は、falsyな値が見つかった時点で、後のものを評価することなく値を返します。
falsyな値が最後までない場合、最後の値を返します。
{
console.log(5 &&'yamada'); //yamadaが返される
console.log(0 && '' && false && undefined && null && 5 &&'yamada'); //0が返される
}
andというのはすべての条件が正しければtrueを返します。一つでもfalseであればその時点でfalseになります。そのため、falsyな値が見つかった時点で値を返すのは論理的に正しいといえます。
変数 && 関数という形にして、変数がfalsyなら関数は実行されず、変数がtruthyなときだけ関数を実行させるような使い方ができます。