ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript のプリミティブに対して「instanceof」の動作が異なるのはなぜですか?

JavaScript のプリミティブに対して「instanceof」の動作が異なるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 12:00:05367ブラウズ

Why Does `instanceof` Behave Differently for Primitives in JavaScript?

JavaScript のインスタンスとプリミティブ:instanceof の異常について理解

JavaScript の instanceof 演算子は、オブジェクトが特定のクラスから継承している場合に true を返します。ただし、文字列や数値などの特定のリテラルはこのルールに反しているようで、instanceof 比較では false を返します。なぜそうなるのでしょうか?

プリミティブとオブジェクト

これらの異常を理解する鍵は、プリミティブとオブジェクトの区別にあります。文字列、数値、null、未定義、およびブール値を含むプリミティブは、コンストラクターを使用して作成されません。逆に、オブジェクトは、new String("foo") や {} などのコンストラクターまたはオブジェクト リテラルを使用して作成されます。

プリミティブの動作インスタンス

プリミティブの場合、 instanceof 演算子はすべてのクラスに対して false を返します。これは、プリミティブはクラスのインスタンスではなく、プロトタイプを継承しないためです。例:

<code class="js">"foo" instanceof String // false
123 instanceof Number // false</code>

例外: RegExp と配列

RegExp リテラルは、プリミティブであるにもかかわらず、このルールの例外です。 RegExp のインスタンスに対して true を返します。同様に、配列リテラルは、instanceof Array に対して true を返します。

Null および Unknown を含む instance

Null および unknown は、instanceof で特別な動作を持つ固有のプリミティブです。オブジェクトを含むすべてのクラスに対して false を返します。これは、これらは技術的にはオブジェクトではなく、独自の一意のデータ型を持っているためです。

結果

instanceof の動作の不一致は混乱を招き、予期せぬ事態につながる可能性があります。結果。このような問題を回避するには、通常、instanceof ではなく typeof チェックを使用して変数の型を決定することをお勧めします。例:
<code class="js">var foo = "string";
typeof foo === "string" // true</code>

以上がJavaScript のプリミティブに対して「instanceof」の動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。