7

関連:プロトタイプチェーン、プリミティブ、オブジェクトに関する混乱

Firebug コンソールで:

a = 12
a.constructor.prototype.isPrototypeOf(a) // prints 'false'

これは印刷するべきだと思いますtrue

4

2 に答える 2

9

a = 12オブジェクトとまったく同じではないプリミティブ数を作成しNumberます。プリミティブは、プロパティ アクセスのためにオブジェクトに暗黙的にキャストされます。

a = 12; //a is a primitive
b = new Number(12); //b is an object
a.constructor.prototype.isPrototypeOf(a); //false because a is primitive
b.constructor.prototype.isPrototypeOf(b); //true because b is an object

ECMAScript仕様に従って:

isPrototypeOfメソッドが引数Vで呼び出されると、次の手順が実行されます。

  1. Vがオブジェクトでない場合は、 を返しfalseます。

プリミティブ数は、厳密に言えばオブジェクトではありません。

于 2013-03-29T14:04:15.790 に答える
0
a = new Number(12);
a.constructor.prototype.isPrototypeOf(a) // prints 'true'

私は、これがどのようになっているのかを知っている理由を説明できるほど頭が良くありません。そして、はい、それは奇妙です。

さて、12はプリミティブでnew Number(12)あり、オブジェクトである」と言えます。しかし、これをどのように説明しますか?

(12).toFixed(3); // "12.000"

どうやらどこかで JavaScript がプリミティブがオブジェクトである可能性があると判断しているようです。

この区別はなぜ存在するのでしょうか。2 つの形式をどのように変換しますか? これはパフォーマンスにどのように影響しますか? 私が答えを持っていないこの質問に関連するすべての質問。

于 2013-03-29T13:59:07.967 に答える