[英]Javascript Constructor of new Object([]) / 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
構造函數時,將執行以下步驟:
- 如果提供了值 ,則
一種。 如果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.