为什么Javascript函数参数没有存储在普通数组中?

时间:2013-05-19 15:11:23

标签: javascript

我需要将传递给函数的参数连接在一起并将它们作为字符串返回,我记得在某处读取Javascript使用特殊类型的数组来存储参数。当我试图调用arguments.join("")时,我收到运行时错误,告诉我没有这样的方法。

为什么Javascript不使用引用指向参数名称来存储标准数组中的参数?

3 个答案:

答案 0 :(得分:4)

arguments特殊的一种方式是它实际上直接引用参数。 JavaScript中不可能使用常规Array实例。

function foo( param ) {
  arguments[0] = "changed";
  alert( param ); // says "changed"
}

foo( "original" );

现在是否是"功能"或不是一个值得商榷的问题;我不记得将它用于除了制造刺激性错误之外的任何目的。重点是,拥有一个普通的数组实例会以某种方式具有相当离奇的行为(用JavaScript术语来说奇怪)会打开各种奇怪的问题。

编辑 - 它在评论中指出,可以使用可以模仿此行为的setter和getter创建一个Array实例。在我自己的代码中以编程方式进行编程是很困难的(以某种一般方式,而不是在临时的基础上,我的意思),但显然运行时可以做到这一点。

答案 1 :(得分:2)

这实际上是JavaScript中的设计错误。

你可以把它转换成这样的真实数组:

var args = Array.slice(arguments);

或旧浏览器中的这个:

var args = Array.prototype.slice.call(arguments, 0);

答案 2 :(得分:1)

虽然您无法直接在Array上调用arguments方法,但您可以使用call调用Array方法,因为它具有类似于数组的功能:

Array.prototype.join.call(arguments, "");