JavaScript での短絡

Migel Hewage Nimesha 2024年2月15日
  1. JavaScript 論理 AND 演算子
  2. JavaScript 論理 OR 演算子
  3. JavaScript での短絡
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);

出力:

論理 AND 演算子

JavaScript 論理 OR 演算子

論理 AND 演算子とは対照的に、論理 OR 演算子は、いずれかのオペランドが true の場合に true を返します。 両方のオペランドが false の場合、この演算子は常に false の結果を返します。

console.log(false || true);
console.log(true || false);
console.log(true || true);
console.log(false || false);

出力:

論理 OR 演算子

JavaScript での短絡

JavaScript は、上記の 2つの演算子を式内で左から右に評価します。 最悪のシナリオでは、最初 (左端) から開始し、すべてのオペランドが評価されるまで右端まで評価されます。

短絡している場合はこの限りではありません。 JavaScript ショートサーキット メカニズムを使用すると、残りのオペランドの結果が既に評価された結果の値に影響を与えなくなるまで、式は左から右に評価されます。

論理AND演算子の短絡

最初のオペランドが false の場合、論理 AND 演算子は短絡されます。 後続のオペランドが true か false かに関係なく、式は false として評価されます。

したがって、JavaScript ランタイムは式の残りのオペランドを評価しません。

上記の動作を示す次の例を見てみましょう。

console.log(true && 'it should come here and print me.');

出力:

AND 演算子の短絡出力 1

最初のオペランドが true であるため、この式は短絡しません。 したがって、次のオペランドも評価します。 予想どおり、2 番目のオペランドの値がコンソールに出力されました。これは、JavaScript が両方のオペランドを評価したことを意味します。

次に、最初のオペランドとして false を使用します。

console.log(false && 'short-circuits and will not print me');

出力:

AND 演算子の短絡出力 2

予想どおり、出力は false で、JavaScript は 2 番目のオペランドをそれ以上評価しませんでした。 式が短絡したことを意味します。

論理OR演算子の短絡

論理 AND 演算子とは対照的に、論理 OR 演算子は、以下に示すように、最初のオペランドが真の場合に短絡します。

console.log(true || 'i will not be printed');

出力:

OR 演算子の短絡出力

ご覧のとおり、出力は true なので、2 番目のオペランドは評価されません。

ショートサーキットは、コードの不要な部分を無視して効率的な処理を支援する JavaScript の便利な機能です。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

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.

関連記事 - JavaScript Operator