Javascript 实例的参数变量是什么?

Javascript 实例的参数变量是什么?,javascript,arguments,Javascript,Arguments,MDN说它是“”,但没有说它是什么实例 它不是HTMLCollection或NodeList 如果我调用Object.prototype.toString.call(arguments)它将返回“[Object arguments]”,但是arguments instanceof arguments是一个错误 那么,参数是什么呢 那么什么是参数的实例呢 它是对象的一个实例。似乎没有任何公共的参数构造函数,您可以使用instanceof来识别它 如果要对其进行唯一标识,则: Object.prot

MDN说它是“”,但没有说它是什么实例

它不是
HTMLCollection
NodeList

如果我调用
Object.prototype.toString.call(arguments)
它将返回
“[Object arguments]”
,但是
arguments instanceof arguments
是一个错误

那么,
参数
是什么呢

那么什么是参数的实例呢

它是
对象的一个实例。似乎没有任何公共的
参数
构造函数,您可以使用
instanceof
来识别它

如果要对其进行唯一标识,则:

Object.prototype.toString.call(arguments) === "[object Arguments]"
这是一种安全的识别方法

根据,
参数
对象可以是普通对象,也可以是外来对象。以下是规格说明:

大多数ECMAScript函数都使参数对象对其对象可用 代码。根据函数定义的特征, 其参数对象是普通对象参数 外来物体

异国情调的争论 对象是一个特殊对象,其数组索引属性映射到 调用其关联函数的形式参数绑定 ECMAScript函数

外来对象的参数具有相同的内部参数 插槽作为普通对象。它们还有一个[[ParameterMap]]内部 狭槽普通参数对象还具有[[ParameterMap]]内部参数 其值始终未定义的插槽。对于普通参数对象 [[ParameterMap]]内部插槽仅由用户使用 Object.prototype.toString(19.1.3.6)来识别它们


因为它是一个“奇异”的对象,这本质上意味着它没有遵循所有正常和预期的约定。例如,没有可以用来创建自己对象的构造函数。而且,由于没有公共构造函数,这可能也解释了为什么没有
instanceof
,您可以对其进行测试以唯一标识它。

您可以检索函数名,其中
参数
是使用
被调用方返回的。name

function test() {
  this.args = arguments;
}

var obj = new test();

console.log(obj.args.callee.name);


另请参见,

严格模式下无法执行此操作。@jfriend00 Yes;包含更多详细信息的链接。
function test() {
  return arguments
}

console.log(test().callee.name);