JavaScript のリテラルに対して「instanceof」が「false」を返すのはなぜですか?

DDD
リリース: 2024-11-03 22:39:31
オリジナル
771 人が閲覧しました

Why Does `instanceof` Return `false` for Literals in JavaScript?

Instanceof とリテラルの謎

一部のリテラルに対して、instanceof 演算子が false を返すのはなぜですか?

JavaScript では、 instanceof 演算子は、オブジェクトが特定のクラスまたはクラス階層のインスタンスであるかどうかを確認します。ただし、特定のリテラルに適用すると、予期しない動作が発生します。

文字列、数値、ブール値などのリテラルは、クラスを通じて作成されるのではなく、コード内で直接定義されます。次の例を見てみましょう:

"foo" instanceof String //=> false
"foo" instanceof Object //=> false

true instanceof Boolean //=> false
true instanceof Object //=> false

12.21 instanceof Number //=> false

// Array and Object literals are exceptions
[0,1] instanceof Array //=> true
{0:1} instanceof Object //=> true
ログイン後にコピー

区別を理解する

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

  • 文字列などのリテラル数値とブール値はプリミティブです。これらは、どのクラスやインスタンスからも独立して存在します。
  • 配列や new キーワードで作成されたオブジェクトなどのオブジェクトは、クラスのインスタンスです。

Instanceof および Primitives

instanceof 演算子は、オブジェクトがクラスまたはその子孫のインスタンスであるかどうかのみをチェックします。プリミティブはクラスを通じて作成されないため、リテラルの値がクラス型と一致する場合でも、instanceof はプリミティブ リテラルに対して常に false を返します。

例外: 配列とオブジェクト

配列リテラルとオブジェクト リテラルは、この動作の例外です。これらはクラスを通じて構築されませんが、それぞれ Array クラスと Object クラスのインスタンスとみなされます。これはおそらく言語の歴史的な癖です。

代替テスト方法

値が特定のプリミティブ型であるかどうかをテストするには、代わりに typeof 演算子を使用する必要があります。 ofinstanceof:

typeof "foo" === "string" //=> true
typeof 12.21 === "number" //=> true
ログイン後にコピー

結論

Instanceof は、どのクラスのインスタンスでもないため、プリミティブ リテラルで誤動作します。配列リテラルとオブジェクト リテラルは、歴史的な癖のため例外です。プリミティブの型を決定するときは、instanceof の代わりに typeof を使用することをお勧めします。

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

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