簡體   English   中英

new Object([])/ new Object(new Array())的Javascript構造函數

[英]Javascript Constructor of new Object([]) / new Object(new Array())

關於:new Object(new Array())

有一個相當基本的問題,我本人確實無法回答,我正在尋求以下建議:
使用以下方法在js中實例化對象時:
var obj = new Object();
顯而易見: obj.constructor === Object

但是

當做一些稍微不同的事情,例如實例化Array類型的對象時:

var obj = new Object([]);


obj.constructor === Array

這里到底發生了什么?
我完全理解為什么在第一個示例obj.constructor === Object中
但是為什么通過新對象創建數組時,為什么是obj Array的構造函數呢?

第一步的obj的構造函數是否必須是Object.constructor?

如var obj = new Object([]); 與var obj = new Object(new Array())相同;

  • 這是否意味着由新對象返回的構造函數本身會創建另一種類型的新對象,將始終是該“鏈”中分配的最新/最新的嗎?
  • 還是對象只是從其第一個參數(特定類型)繼承了構造函數?


Cheerio

讓我們看一下規格:

15.2.2.1新對象([值])
在不帶參數或帶一個參數值的情況下調用Object構造函數時,將執行以下步驟:

  1. 如果提供了 ,則
    一種。 如果Type( value )是Object,則
    一世。 如果該值是本機ECMAScript對象,則不要創建新對象,而只需返回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(...)完全相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM