2016-04-16 50 views
2

MDN表示它是「an Array like object」,但沒有說明它是什麼實例。什麼是變量的一個實例?

它不是HTMLCollectionNodeList

如果我打電話Object.prototype.toString.call(arguments)它返回"[object Arguments]"但是arguments instanceof Arguments是一個錯誤。

那麼什麼是arguments的一個實例?

回答

7

那麼什麼是參數的一個實例呢?

這是Object的一個實例。似乎沒有任何公開Arguments構造函數,您可以使用instanceof來確定它。

如果你想唯一標識,則:

Object.prototype.toString.call(arguments) === "[object Arguments]" 

是確定它的安全方法。

section 9.4.4 in the EcmaScript 6 specificationarguments對象是一個普通的對象或一個奇特的對象。以下是規範說明的內容:

大多數ECMAScript函數使參數對象可用於其代碼 。根據函數定義的特徵,其參數對象是普通對象自變量 奇特對象

的參數異國 對象是外來的對象,其數組索引屬性映射到其相關聯的 的ECMAScript函數的調用的 形式參數綁定。

參數異國對象與普通對象具有相同的內部 插槽。他們也有一個[[ParameterMap]]內部 插槽。普通參數對象也有一個[[ParameterMap]]內部 插槽,其值始終未定義。對於普通參數對象 ,[[ParameterMap]]內部插槽只能用於 Object.prototype.toString(19.1.3.6)來識別它們。

由於它是一個「異國情調」的對象,這基本上意味着它不遵循所有正常和預期的約定。例如,沒有構造函數可以從中創建自己的對象。而且,由於沒有公共的構造函數,這也可能解釋了爲什麼沒有instanceof,您可以測試它以唯一標識它。

相關問題