这是一个非常基本的问题,我自己真的无法得到答案,我正在寻求建议:
使用以下方法在js中实例化对象时:
var obj = new Object();
很明显: obj.constructor === Object
,
然而,
当做一些稍微不同的事情时,例如实例化Array类型的对象:
var obj = new Object([]);
变得
的 obj.constructor === Array
这里到底发生了什么?我完全明白为什么在第一个例子中obj.constructor ===对象
但是为什么在通过新对象创建数组时obj数组的构造函数?
第一卷上obj的构造函数不是必须是Object.constructor吗?
如
var obj = new Object([]);与var obj = new Object(new Array());
的 Cheerio
答案 0 :(得分:1)
让我们看看规范:
15.2.2.1 new Object ( [ value ] )
如果在没有参数或具有一个参数值的情况下调用Object
构造函数,则执行以下步骤:
- 如果提供值,则
醇>
一个。如果Type( value )是Object,那么
一世。如果值是本机ECMAScript对象,请不要创建新对象,只需返回 value 。
这意味着,如果将对象传递给Object
,它只返回相同的值。因此var obj = new Object([]);
与var obj = [];
实际上是一样的,我们可以轻松地测试:{/ p>
> 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(...)
完全相同。