1. ホーム
  2. ジャバスクリプト

[解決済み】なぜinstanceofはいくつかのリテラルに対してfalseを返すのですか?

2022-03-29 13:28:23

質問

"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

// the tests against Object really don't make sense

配列リテラルとオブジェクトリテラルが一致する...

[0,1] instanceof Array //=> true
{0:1} instanceof Object //=> true

なぜ、全員がそうしないのか?あるいは、なぜ全員が ではない ?

そして、それらは何のインスタンスなのでしょうか?

FF3、IE7、Opera、Chromeで同じです。つまり、少なくとも一貫性があるわけです。

解決方法は?

プリミティブは、Javascript内から作成されるオブジェクトとは異なる種類の型です。より Mozilla API ドキュメント :

var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral";
color2 instanceof String; // returns false (color2 is not a String object)

プリミティブ型をコードで構築する方法が見当たらないのですが、おそらく不可能なのでしょう。このため、おそらく人々は typeof "foo" === "string" の代わりに instanceof .

このようなことを簡単に覚えるには、「正気で簡単に学べることは何だろう"?その答えが何であれ、Javascriptはもう1つのことをします。