使用JavaScript中的参数实例化新的Object(1)时会发生什么?

时间:2016-09-27 19:54:10

标签: javascript javascript-objects

致电时会发生什么:

new Object(1)

当我尝试时,它返回:

[Number: 1]

我想了解那里发生了什么。任何信息将不胜感激。

2 个答案:

答案 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。
  •