当你在JavaScript中实例化一个带有参数的新对象(1)时会发生什么?
What happens when you instantiate a new Object(1) with a parameter in JavaScript?
当你调用:
new Object(1)
当我尝试它时,它返回:
[Number: 1]
我想知道那里发生了什么。
你可以看说明书:
当new Object(arg)
被调用时,我们实际上是在调用ToObject(arg)
。
ToObject
定义为
抽象操作ToObject根据表13将实参转换为Object类型的值
表格显示:
Number:返回一个新的Number对象,其
[[NumberData]]
内部槽位被设置为argument的值。Number对象的描述请参见20.1。
所以它和调用new Number(1)
是一样的,也就是说它创建了一个数字对象。
基本数据类型 String、Number和Boolean具有等效的对象值,可以通过调用等效的构造函数来创建。但这不是一个常见的事情,因为对象值的行为不同于原始值,也就是说,在某些情况下,数字原始值的行为与数字对象的行为不同。
的例子:
Boolean(0); // false
Boolean(new Number(0)); // true
以下是默认构造函数的文档:http://www.ecma-international.org/ecma-262/5.1/sec-15.2.2.1
调用Object构造函数时不带参数或带参数参数值时,执行以下步骤:
- 如果value被提供,则
- 如果Type(value)为Object,则
- 如果值是一个本地ECMAScript对象,不要创建一个新对象,而只是返回值。
- 如果值是主机对象,则采取操作并以依赖于实现的方式返回结果可能取决于宿主对象。
- 如果Type(value)是String,返回ToObject(value)。
- 如果Type(value)是Boolean,则返回ToObject(value)。
- 如果Type(value)为Number,则返回ToObject(value)。
- Assert:没有提供参数值或参数类型为Null或Undefined。
- 让obj成为一个新创建的原生ECMAScript对象。
- 设置obj的[[Prototype]]内部属性为标准的内置Object原型对象(15.2.4)。
- 设置obj的[[Class]]内部属性为"Object"。设置obj的[[Extensible]]内部属性为true。
- 按照8.12的规定设置obj的所有内部方法。
- 返回obj。
相关文章:
- 查找关键字并创建新对象
- 创建新对象时,为什么要更新旧对象
- 为什么要使用立即调用的函数来创建新对象
- 剑道网格-插入具有外部列的新对象失败
- 将原型调用为新对象中的另一个原型
- 将新对象添加到本地存储
- $$hashKey在Angular中push()新对象时未生成新值
- 从分析类传递现有对象,否则创建一个新对象
- 为什么这个功能打印“;未定义的未定义的“;作为联系人名称,添加“新对象”
- Will my'新对象'在套接字断开连接时被垃圾收集
- 从数组javascript创建新对象
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- 在for循环-Javascript中创建新对象
- Javascript:使用一个预先存在的对象值作为一个新对象的键
- 确定是创建新对象还是更新现有对象
- 返回它在Javascript中构建的新对象
- 如何使用Typescript创建一个包含对象的字段的新对象
- Sinon:存根和整个对象,并将其替换为新对象
- JavaScript:创建新对象类型的方法
- 将新对象“附加”到 ng 重复项