gpt4 book ai didi

new Object([])/new Object(new Array()) 的 JavaScript 构造函数

转载 作者:行者123 更新时间:2023-12-03 11:51:36 28 4
gpt4 key购买 nike

关于:new Object(new Array())

有一个相当基本的问题,我自己确实无法给出答案,我正在寻求建议:
在js中实例化对象时使用如下方法:
var obj = new Object();
很明显: obj.constructor === Object

但是

当做一些稍微不同的事情时,例如实例化数组类型的对象:

var obj = new Object([]);

变成
obj.constructor === 数组

这里到底发生了什么?
我完全明白为什么在第一个例子中 obj.constructor === Object
但是为什么当通过 new Object 创建数组时 obj Array 的构造函数是?

第一次滚动时 obj 的构造函数不是必须是 Object.constructor 吗?

作为 var obj = new Object([]);与 var obj = new Object(new Array());

相同
  • 这是否意味着新对象返回的构造函数是本身创建另一种类型的新对象,总是会该“链”中最新/最新分配的?
  • 或者对象只是简单地从它的第一个继承构造函数参数(特定类型)?


Cheerio

最佳答案

让我们看一下规范:

15.2.2.1 new Object ( [ value ] )
When the Object constructor is called with no arguments or with one argument value, the following steps are taken:

  1. If value is supplied, then
    a. If Type(value) is Object, then
       i. If the value is a native ECMAScript object, do not create a new object but simply return value.

这意味着,如果您将一个对象传递给Object,它只会返回完全相同的值。所以 var obj = new Object([]); 实际上与 var obj = []; 相同,我们可以轻松测试:

> var arr = []; // or var arr = new Array();
> var obj = new Object(arr);
> arr === obj;
true

如果您传递的参数不是对象,它将被转换为对象,例如

> typeof new Object("string")
'object'

如果您不提供任何参数,它只会返回一个新对象:

> new Object()
Object {}

另请注意,根据规范,Object(...) 的行为与 new Object(...) 完全相同。

关于new Object([])/new Object(new Array()) 的 JavaScript 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812079/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com