MDN表示它是「an Array like object」,但沒有說明它是什麼實例。什麼是變量的一個實例?
它不是HTMLCollection
或NodeList
。
如果我打電話Object.prototype.toString.call(arguments)
它返回"[object Arguments]"
但是arguments instanceof Arguments
是一個錯誤。
那麼什麼是arguments
的一個實例?
MDN表示它是「an Array like object」,但沒有說明它是什麼實例。什麼是變量的一個實例?
它不是HTMLCollection
或NodeList
。
如果我打電話Object.prototype.toString.call(arguments)
它返回"[object Arguments]"
但是arguments instanceof Arguments
是一個錯誤。
那麼什麼是arguments
的一個實例?
那麼什麼是參數的一個實例呢?
這是Object
的一個實例。似乎沒有任何公開Arguments
構造函數,您可以使用instanceof
來確定它。
如果你想唯一標識,則:
Object.prototype.toString.call(arguments) === "[object Arguments]"
是確定它的安全方法。
每section 9.4.4 in the EcmaScript 6 specification,arguments
對象是一個普通的對象或一個奇特的對象。以下是規範說明的內容:
大多數ECMAScript函數使參數對象可用於其代碼 。根據函數定義的特徵,其參數對象是普通對象或自變量 奇特對象。
的參數異國 對象是外來的對象,其數組索引屬性映射到其相關聯的 的ECMAScript函數的調用的 形式參數綁定。
參數異國對象與普通對象具有相同的內部 插槽。他們也有一個[[ParameterMap]]內部 插槽。普通參數對象也有一個[[ParameterMap]]內部 插槽,其值始終未定義。對於普通參數對象 ,[[ParameterMap]]內部插槽只能用於 Object.prototype.toString(19.1.3.6)來識別它們。
由於它是一個「異國情調」的對象,這基本上意味着它不遵循所有正常和預期的約定。例如,沒有構造函數可以從中創建自己的對象。而且,由於沒有公共的構造函數,這也可能解釋了爲什麼沒有instanceof
,您可以測試它以唯一標識它。
可以檢索其中arguments
使用也Why was the arguments.callee.caller property deprecated in JavaScript?callee.name
function test() {
this.args = arguments;
}
var obj = new test();
console.log(obj.args.callee.name);
function test() {
return arguments
}
console.log(test().callee.name);
不能在'strict'模式做這個返回的函數的名稱。 – jfriend00
@ jfriend00是;包括鏈接到更多細節。 – guest271314