ホームページ > 記事 > ウェブフロントエンド > 文字列、ブール値、数値リテラルが「instanceof」テストに失敗するのはなぜですか?
Instanceof の難題: 一部のリテラルが一致しない理由
instanceof 演算子は JavaScript の基本であるにもかかわらず、特定の関数で使用すると不可解な動作を示すことがあります。リテラル。特に、文字列、ブール値、および数値リテラルは、それぞれのコンストラクターに対してテストすると、すべて false と評価されます。
<code class="js">"foo" instanceof String //=> false "foo" instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Object //=> false 12.21 instanceof Number //=> false /foo/ instanceof RegExp //=> true</code>
リテラルは対応する型のインスタンスであると予想されるため、この動作は驚くべきものです。ただし、それらの不一致の理由は、プリミティブとオブジェクトの区別にあります。
実際のプリミティブ主義
文字列、数値、ブール値などの JavaScript プリミティブは、オブジェクト コンストラクターを通じて作成されない組み込み型。代わりに、JavaScript 内で構築されたオブジェクトとは根本的に異なります。
<code class="js">var color1 = new String("green"); color1 instanceof String; // returns true var color2 = "coral"; color2 instanceof String; // returns false (color2 is not a String object)</code>
上で示したように、String コンストラクターを使用すると String オブジェクトが作成され、instanceof でテストすると true と評価されます。ただし、プリミティブ文字列リテラル "coral" はこの動作を継承しません。
代替の型検査メソッド
プリミティブを使用したinstanceofの不可解な動作により、この動作が採用されました。型チェックの代替メソッド:
結論として、プリミティブを使用したinstanceofの動作はJavaScriptの独自の型システムの結果です。これは混乱を招く可能性がありますが、プリミティブとオブジェクトの区別を理解することは、開発者がこれらの微妙な違いを効果的にナビゲートするのに役立ちます。
以上が文字列、ブール値、数値リテラルが「instanceof」テストに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。