2

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

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

4

3 回答 3

4

嗯,其中arguments一种特殊的方式是它确实直接引用参数。在 JavaScript 中不可能用常规的 Array 实例来做到这一点。

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

foo( "original" );

现在这是否是“功能”显然是一个值得商榷的问题;除了创建恼人的错误之外,我不记得将它用于任何目的。关键是,拥有一个普通的 Array 实例以某种方式具有相当奇怪的行为(在 JavaScript 术语中是奇怪的)会引发各种奇怪的问题。

编辑——在评论中指出,可以使用模仿这种行为的 setter 和 getter 创建一个 Array 实例。在自己的代码中以编程方式执行此操作会有点困难(以某种通用方式,而不是临时的,我的意思是),但显然运行时可以做到这一点。

于 2013-05-19T15:14:33.063 回答
2

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

您可以将其转换为真正的数组,如下所示:

var args = Array.slice(arguments);

或者在旧版浏览器中:

var args = Array.prototype.slice.call(arguments, 0);
于 2013-05-19T15:14:29.193 回答
1

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

Array.prototype.join.call(arguments, "");
于 2013-05-19T15:22:26.393 回答