获取函数`arguments`作为键值对象

时间:2012-10-08 14:07:02

标签: javascript arguments associative-array

在JavaScript中,可以通过arguments获取传递给函数的参数列表,这是一个类似数组的对象:

>> function fun(a, b, c) { console.log(arguments) };  
undefined
>> fun(1, 2, 3);
[1, 2, 3]

是否有办法获取包含每个参数的正式名称的对象? 也就是说,如果一个人调用上面的函数,他应该得到:

{a = 1, b = 2, c = 3}

5 个答案:

答案 0 :(得分:4)

对于某些浏览器,您可以根据函数的toString表示形式as described in this question从已定义的参数中解析参数名称。您可以使用它来自己映射值。

请注意,并非所有参数都必须被命名,例如,如果我要调用上面的函数,fun(1, 2, 3, 4)最后一个参数不会映射到任何名称,但仍然可以通过{{ 1}}

答案 1 :(得分:4)

我不建议这样做,因为如果代码被缩小并且压缩器/混淆器将重命名函数参数,您可能会丢失一些数据。

答案 2 :(得分:1)

那不存在。您可以将参数作为对象传递。

答案 3 :(得分:1)

正式参数的名称不能从运行时获得(编辑,除非作为函数toString()值中文本的一部分,正如@David Hedlund指出的那样),但参数值可通过arguments对象获得。如果你在一个函数中编写代码,那么当然知道名字,所以你可以自己构建这样一个对象:

function foo(a, b, c) {
  return {a: a, b: b, c: c};
}

答案 4 :(得分:0)

  

是否有办法获取包含每个参数的正式名称的对象?

没有。形式参数与声明的变量基本相同。每个执行上下文都有一个关联的变量对象(ed3)或环境记录(ed 5),声明变量和形式参数属于。

您无法访问该对象,因此您无法检查它以查看它具有的属性。

在全局执行上下文中,变量是全局对象的属性,但不在函数执行上下文中。并且没有正式的方法来区分变量和全局对象的其他属性。