なぜinstanceofは一部のリテラルに対してfalseを返すのでしょうか? 質問する

なぜinstanceofは一部のリテラルに対してfalseを返すのでしょうか? 質問する
"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 でも同様です。少なくとも一貫性はあります。

ベストアンサー1

プリミティブは、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 は別のことを行います。

おすすめ記事