今日は殺すためにあまりにも多くの時間を持つことが起こったと私は、Node(v0.10.13)コマンドラインでビットを果たし:何instanceof
が行うことで、MDNによると、今なぜJavaScriptプリミティブはオブジェクトのインスタンスではありませんか?
> 1 instanceof Object
false
> (1).__proto__
{}
> (1).__proto__ instanceof Object
true
> (1).__proto__.__proto__ === Object.prototype
true
:
instanceof演算子は、オブジェクトがプロトタイプ にコンストラクタのprototypeプロパティをチェーンしているかどうかをテストします。
しかし明らかにObject.prototype
はのプロトタイプチェーンです。だから1 instanceof Object
はなぜ間違っていますか?おそらく1
はプリミティブではないから始めるのだろうか?
さて、私はそれを受け入れ、と私はより多くのテストをしました:
> (1).__proto__ === (2).__proto__
true
> 'a'.__proto__ === 'b'.__proto__
true
> (1).__proto__ === 'a'.__proto__
false
> (1).__proto__.__proto__ === 'a'.__proto__.__proto__
true
> (1).__proto__.type = 'number'
'number'
> 'a'.__proto__.type = 'string'
'string'
> (2).type
'number'
> (1.5).type
'number'
> 'b'.type
'string'
だから明らかに、すべての数のプリミティブが一つのオブジェクトから継承し、すべての文字列プリミティブは、他のオブジェクトから継承します。これらの2つのオブジェクトはどちらも
Object.prototype
から継承されます。
数字と文字列をプリミティブと見なすと、他のオブジェクトからそれらを継承するのはなぜですか?逆に、他のオブジェクトを継承するときにも、そのオブジェクトも考慮する必要があります。オブジェクトの子がオブジェクトではないことは無意味なようです。
ところで、私もFirefox 22でこれらをテストして同じ結果を得ました。
グレート答えは、感謝。 –
すべてのマイ+1があなたに行く! – Greg
Myne 2 .... :-)。 –