JavaScriptの「===」を紐解く

Mary-Kate Olsen
リリース: 2025-01-27 06:29:10
オリジナル
474 人が閲覧しました

Unraveling the

このガイドでは、ECMAScript 仕様の「厳密な等価比較」セクションで定義されている JavaScript の厳密な等価演算子 (===) の複雑さを詳しく説明します。 その機能を段階的に見てみましょう:

=== アルゴリズム: 詳細

=== 演算子は、次のアルゴリズムを使用して等しいかどうかを判断します。

  1. 型チェック: 演算子は最初に 2 つの値の型を比較します。型が異なる場合は、すぐに false を返します。 型マッチングは、型が同一の場合にのみ次のステップに進みます。

  2. タイプ固有の比較:

    • 数字:

      • NaN === NaNfalse と評価されます (分岐の重要な点)。
      • 数値的に同一の値は true を返します。
      • 0-0 は等しいと見なされます (true)。
    • 文字列: 文字ごとの比較により等しいかどうかが判断されます。 同一のシーケンスは true を生成します。それ以外の場合、false.

    • ブール値: true === truefalse === false はどちらも true を返します。 それ以外の場合、false.

    • オブジェクト (配列と関数を含む): === は、参照の等価性 をチェックします。 両方の値が同じメモリ位置 (同じオブジェクト) を指している場合にのみ、true.

      が返されます。
    • null および undefined: null === null および undefined === undefinedtrue を返します。ただし、型の違いにより null === undefinedfalse となります。


なぜ NaN === NaNfalse

なのか

これはよくある混乱の原因です。 仕様では、NaN (Not-a-Number) はそれ自体と等しくないものとして定義されています。これは、NaN が無効または未定義の数値結果を表すためです。 2 つの未定義の結果を等しいものとして比較することは、論理的な一貫性を欠きます。

例:

<code class="language-javascript">NaN === NaN; // false</code>
ログイン後にコピー
ログイン後にコピー

NaN を確実にチェックするには、Number.isNaN() または Object.is() を利用します。

<code class="language-javascript">Number.isNaN(NaN); // true
Object.is(NaN, NaN); // true</code>
ログイン後にコピー
ログイン後にコピー

なぜ 0 === -0true

なのか

仕様では、 0-0 は同等のものとして扱われます。これは、ほとんどの数学的演算において、それらの動作が区別できないためです。 ただし、特定のシナリオでは微妙な違いが存在します (たとえば、1 / 0Infinity を生成しますが、1 / -0-Infinity を生成します)。 区別が必要な状況では、Object.is():

を使用します。
<code class="language-javascript">NaN === NaN; // false</code>
ログイン後にコピー
ログイン後にコピー

オブジェクトと参照等式(revisited)

オブジェクトを比較する場合、===参照等式を評価します。同一の内容を持つ2つのオブジェクトは、メモリ内の同じオブジェクトでない限り、等しいとは見なされません。

<code class="language-javascript">Number.isNaN(NaN); // true
Object.is(NaN, NaN); // true</code>
ログイン後にコピー
ログイン後にコピー
しかし:

<code class="language-javascript">Object.is(+0, -0); // false</code>
ログイン後にコピー
JavaScriptの基礎のさらなる調査

以上がJavaScriptの「===」を紐解くの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート