Ash*_*ary 7 javascript prototype
在Firebug控制台中:
a = 12
a.constructor.prototype.isPrototypeOf(a) // prints 'false'
Run Code Online (Sandbox Code Playgroud)
我认为这应该打印 true
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
Run Code Online (Sandbox Code Playgroud)
根据ECMAScript规范:
当
isPrototypeOf方法被调用以参数V,采取下面的步骤:
- 如果V不是对象,则返回
false.
严格来说,原始数字不是对象.
a = new Number(12);
a.constructor.prototype.isPrototypeOf(a) // prints 'true'
Run Code Online (Sandbox Code Playgroud)
我不够聪明,无法告诉你为什么我只知道事情就是这样。是的,这很奇怪。
现在,你可以说“12是一个基元,new Number(12)也是一个对象”。但你如何解释这一点呢?
(12).toFixed(3); // "12.000"
Run Code Online (Sandbox Code Playgroud)
显然,JavaScript 在某个地方决定原语也可能是一个对象。
为什么存在这种区别?两种形式之间如何转换?这对性能有何影响?所有与这个问题相关的问题我都没有答案。