"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 は別のことを行います。