🚄

JavaScriptの短絡評価を使用する論理演算子について

2024/05/22に公開

JavaScriptのShort-Circuiting(短絡評価)を使用する論理演算子と論理代入演算子について。
いつも自信がなくなってmdnのサイトを見るので勉強がてらまとめる。
Short-Circuitingとは、論理演算において最小限の評価で結果が確定する場合、それ以降の評価を省略すること、途中で切り上げる感じ

論理積 (&&) - Logical AND

読み方: "and" (アンド)

構文:

expr1 && expr2;

説明:
論理積演算子は左から右に評価され、最初に出てくる偽値を返す。すべてのオペランドが真値の場合は最後のオペランドを返す!

let result = "" && "foo"; // 空文字列 "" を返す
result = 2 && 0;         // 0 を返す
result = "foo" && 4;     // 4 を返す

短絡評価:
最初の偽値が見つかった時点で評価を停止します。

function A() {
  console.log("called A");
  return false;
}
function B() {
  console.log("called B");
  return true;
}

console.log(A() && B()); // "called A" と出力され、false を返す

論理和 (||) - Logical OR

読み方: "or" (オア)

構文:

expr1 || expr2;

説明:
論理和演算子は左から右に評価され、最初に出てくる真値を返す。すべてのオペランドが偽値の場合は最後のオペランドを返す。

let result = false || "foo"; // "foo" を返す
result = "" || 4;           // 4 を返す
result = 0 || false;        // false を返す

短絡評価:
最初の真値が見つかった時点で評価を停止

function A() {
  console.log("called A");
  return false;
}
function B() {
  console.log("called B");
  return true;
}

console.log(B() || A()); // "called B" と出力され、true を返す

Null 合体演算子 (??) - Nullish Coalescing Operator

読み方: "nullish coalescing" (ヌーリッシュ・コアレシング)

構文:

leftExpr ?? rightExpr;

説明:
左辺が null または undefined の場合に右辺の値を返し、それ以外の場合は左辺の値を返す。

let result = null ?? "default";  // "default" を返す
result = "" ?? "default";        // "" を返す
result = 0 ?? 42;                // 0 を返す

短絡評価:
左辺が null でも undefined でもない場合、右辺の評価を行わない!

論理積代入 (&&=) - Logical AND Assignment

読み方: "and assignment" (アンド・アサインメント)

構文:

expr1 &&= expr2;

説明:
expr1 が真値の場合のみ expr2expr1 に代入

let x = 1;
x &&= 0; // x は 0 になる

let y = 0;
y &&= 1; // y は 0 のまま

短絡評価:
expr1 が偽値の場合、expr2 は評価されない!!

論理和代入 (||=) - Logical OR Assignment

読み方: "or assignment" (オア・アサインメント)

構文:

expr1 ||= expr2;

説明:
expr1 が偽値の場合のみ expr2expr1 に代入

let x = 0;
x ||= 5; // x は 5 になる

let y = 1;
y ||= 10; // y は 1 のまま

短絡評価:
expr1 が真値の場合、expr2 は評価されない

Null 合体代入 (??=) - Nullish Coalescing Assignment

読み方: "nullish coalescing assignment" (ヌーリッシュ・コアレシング・アサインメント)

構文:

expr1 ??= expr2;

説明:
expr1null または undefined の場合にのみ expr2expr1 に代入

let a = null;
a ??= 5; // a は 5 になる

let b = "";
b ??= "default"; // b は "" のまま

短絡評価:
expr1null でも undefined でもない場合、expr2 は評価されない

Discussion