JavaScript での短絡
すべてのプログラミング言語は、算術演算子、代入演算子、比較演算子、論理演算子などのさまざまな演算子をサポートしています。 JavaScript でも違いはありません。 ほとんどのプログラミング言語がサポートするすべての演算子をサポートします。
このガイドでは、論理演算子とその短絡機能に焦点を当てています。
JavaScript 論理 AND
演算子
論理 AND
および OR
演算子は、最終的に true または false に評価される 2つの一般的な論理演算子です。 論理 AND
演算子は、両方のオペランドが真の場合にのみ真と評価されます。 それ以外の場合は、常に false を返します。
さらに、AND
演算子は、いずれかのオペランドが false の場合に false を返します。
console.log(false && true);
console.log(false && false);
console.log(true && false);
console.log(true && true);
出力:
JavaScript 論理 OR
演算子
論理 AND
演算子とは対照的に、論理 OR
演算子は、いずれかのオペランドが true の場合に true を返します。 両方のオペランドが false の場合、この演算子は常に false の結果を返します。
console.log(false || true);
console.log(true || false);
console.log(true || true);
console.log(false || false);
出力:
JavaScript での短絡
JavaScript は、上記の 2つの演算子を式内で左から右に評価します。 最悪のシナリオでは、最初 (左端) から開始し、すべてのオペランドが評価されるまで右端まで評価されます。
短絡している場合はこの限りではありません。 JavaScript ショートサーキット メカニズムを使用すると、残りのオペランドの結果が既に評価された結果の値に影響を与えなくなるまで、式は左から右に評価されます。
論理AND
演算子の短絡
最初のオペランドが false の場合、論理 AND
演算子は短絡されます。 後続のオペランドが true か false かに関係なく、式は false として評価されます。
したがって、JavaScript ランタイムは式の残りのオペランドを評価しません。
上記の動作を示す次の例を見てみましょう。
console.log(true && 'it should come here and print me.');
出力:
最初のオペランドが true
であるため、この式は短絡しません。 したがって、次のオペランドも評価します。 予想どおり、2 番目のオペランドの値がコンソールに出力されました。これは、JavaScript が両方のオペランドを評価したことを意味します。
次に、最初のオペランドとして false
を使用します。
console.log(false && 'short-circuits and will not print me');
出力:
予想どおり、出力は false
で、JavaScript は 2 番目のオペランドをそれ以上評価しませんでした。 式が短絡したことを意味します。
論理OR
演算子の短絡
論理 AND
演算子とは対照的に、論理 OR
演算子は、以下に示すように、最初のオペランドが真の場合に短絡します。
console.log(true || 'i will not be printed');
出力:
ご覧のとおり、出力は true
なので、2 番目のオペランドは評価されません。
ショートサーキットは、コードの不要な部分を無視して効率的な処理を支援する JavaScript の便利な機能です。
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.