JavaScriptの短絡評価を使用する論理演算子について
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
が真値の場合のみ expr2
を expr1
に代入
let x = 1;
x &&= 0; // x は 0 になる
let y = 0;
y &&= 1; // y は 0 のまま
短絡評価:
expr1
が偽値の場合、expr2
は評価されない!!
論理和代入 (||=) - Logical OR Assignment
読み方: "or assignment" (オア・アサインメント)
構文:
expr1 ||= expr2;
説明:
expr1
が偽値の場合のみ expr2
を expr1
に代入
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;
説明:
expr1
が null
または undefined
の場合にのみ expr2
を expr1
に代入
let a = null;
a ??= 5; // a は 5 になる
let b = "";
b ??= "default"; // b は "" のまま
短絡評価:
expr1
が null
でも undefined
でもない場合、expr2
は評価されない
Discussion