JavaScript のリテラルで「instanceof」が予期しない動作をするのはなぜですか?

Linda Hamilton
リリース: 2024-11-02 09:36:03
オリジナル
1032 人が閲覧しました

Why Does `instanceof` Behave Unexpectedly with Literals in JavaScript?

型解析の難題: リテラルに対して、instanceof が予期しない動作をする理由

調査の開始

JavaScript の instanceof 演算子、表向きは次のように使用されます。クラス内のオブジェクトのメンバーシップを確認し、特定のリテラルに対して独特の動作を示し、開発者を当惑させます。いくつかの複雑な例を詳しく見てみましょう。

"foo" instanceof String //=> false<br>"foo" オブジェクトのインスタンス //=> false</p>
<p>true Boolean のインスタンス //=> false<br>true オブジェクトのインスタンス //=> false<br>false Boolean のインスタンス //=> false<br>false オブジェクトのインスタンス //=> false</p>
<p>12.21 インスタンスオブ数値 //=> false<br>/foo/instanceof RegExp //=> true

謎の解明

この謎めいた動作の根本は、JavaScript におけるプリミティブとオブジェクトの基本的な違いにあります。プリミティブは、文字列、数値、ブール値、null などの基本的なデータ型を表します。一方、オブジェクトは、コンストラクターまたはクラスからプロパティとメソッドを継承するインスタンス化されたエンティティです。

リテラルでinstanceofを使用する場合、重要な考慮事項は、プリミティブが本質的にどのクラスにも属さないことです。代わりに、それらは独自の属性セットを持つ別個のエンティティです。たとえば、「foo」は単なる文字列リテラルであり、String クラスのインスタンスではありません。したがって、式「foo」instanceof String は false を返します。

結果と回避策

この癖は型チェックに影響します。プリミティブのタイプを決定するために、開発者は多くの場合、instanceof の代わりに typeof 演算子を使用します。たとえば、typeof "foo" は "string" を生成し、リテラルの型を確認します。

結論

リテラルに対する instanceof の一見気まぐれな動作は、リテラルに対する固有の区別から生じています。 JavaScript のプリミティブとオブジェクト。最初は直感に反するように見えるかもしれませんが、この根本的な違いを認識すると、より扱いやすくなります。この微妙な理解を受け入れることで、開発者は JavaScript の複雑な型チェックをより自信を持って操作できるようになります。

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

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