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 のインスタンスに対して true を返します。同様に、配列リテラルは、instanceof Array に対して true を返します。
<code class="js">var foo = "string"; typeof foo === "string" // true</code>
以上がJavaScript のプリミティブに対して「instanceof」の動作が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。