一部のリテラルに対して、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
区別を理解する
プリミティブとオブジェクト:
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 サイトの他の関連記事を参照してください。