JavaScriptの短絡評価(ショートサーキット) and / orについて

2021年1月25日JavaScript

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なときだけ関数を実行させるような使い方ができます。