Mic*_*ael 2 javascript arguments
MDN说它是" 像对象一样的数组 ",但没有说它是什么实例.
它不是HTMLCollection或NodeList.
如果我调用Object.prototype.toString.call(arguments)它返回,"[object Arguments]"但是arguments instanceof Arguments是一个错误.
那么什么是arguments实例?
那么一个实例的参数是什么?
这是一个例子Object.似乎没有任何公共Arguments构造函数可以instanceof用来识别它.
如果您想要唯一识别它,那么:
Object.prototype.toString.call(arguments) === "[object Arguments]"
Run Code Online (Sandbox Code Playgroud)
识别它是一种安全的方法.
根据EcmaScript 6规范中的9.4.4节,arguments对象是普通对象或异国对象.这是规范说的:
大多数ECMAScript函数都会为其代码提供一个参数对象.根据函数定义的特征,其参数对象可以是普通对象,也可以是参数异常对象.
参数奇异对象是一个奇异的对象,其数组索引属性映射到其关联的ECMAScript函数的调用的形式参数绑定.
参数异域对象具有与普通对象相同的内部插槽.它们还有一个[[ParameterMap]]内部插槽.普通参数对象也有一个[[ParameterMap]]内部插槽,其值始终未定义.对于普通的参数对象,[[ParameterMap]]内部插槽仅由Object.prototype.toString(19.1.3.6)用于识别它们.
由于它是一个"异国情调"的对象,这实际上意味着它不遵循所有正常和预期的约定.例如,没有构造函数可以从中创建自己的对象.并且,因为没有公共构造函数,这可能也解释了为什么没有instanceof你可以测试它来唯一地识别它.