致电时会发生什么:
new Object(1)
当我尝试时,它返回:
[Number: 1]
我想了解那里发生了什么。任何信息将不胜感激。
答案 0 :(得分:6)
您可以查看规范:
调用new Object(arg)
时,我们实际上是在调用ToObject(arg)
。
ToObject
定义为
抽象操作ToObject根据表13将参数转换为Object类型的值
表格说:
Number:返回一个新的Number对象,其
[[NumberData]]
内部插槽设置为参数值。有关数字对象的说明,请参阅20.1。
所以它与调用new Number(1)
相同,即它会创建一个数字对象。
原始数据类型 String,Number和Boolean具有等效的 object 值,可以通过调用等效的构造函数来创建。但这并不常见,因为对象值的行为与原始值不同,即在某些情况下,数字基元的行为与数字对象的行为不同。
示例:
Boolean(0); // false
Boolean(new Number(0)); // true
答案 1 :(得分:0)
以下是默认构造函数的文档: http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.2.1
调用Object构造函数时没有参数或者没有参数 参数值,采取以下步骤:
- 如果提供了价值,那么
- 如果Type(value)是Object,那么
- 如果值是本机ECMAScript对象,则不要创建新对象,只需返回值。
- 如果值是主机对象,则执行操作,并以与实现相关的方式返回结果 可能取决于主机对象。
- 如果Type(value)是String,则返回ToObject(value)。
- 如果Type(value)为Boolean,则返回ToObject(value)。
- 如果Type(value)为Number,则返回ToObject(value)。
- 断言:未提供参数值或其类型为Null或Undefined。
- 让obj成为新创建的本机ECMAScript对象。
- 将obj的[[Prototype]]内部属性设置为标准内置Object原型对象(15.2.4)。
- 将obj的[[Class]]内部属性设置为“Object”。将obj的[[Extensible]]内部属性设置为true。
- 按照8.12中的规定设置obj的所有内部方法。
- 返回obj。