我需要将传递给函数的参数连接在一起并将它们作为字符串返回,我记得在某处读过 Javascript 使用一种特殊类型的数组来在其中存储参数。当我试图打电话时,arguments.join("")
我得到一个运行时错误,告诉我没有这样的方法。
为什么 Javascript 不使用指向参数名称的引用将参数存储在标准数组中?
我需要将传递给函数的参数连接在一起并将它们作为字符串返回,我记得在某处读过 Javascript 使用一种特殊类型的数组来在其中存储参数。当我试图打电话时,arguments.join("")
我得到一个运行时错误,告诉我没有这样的方法。
为什么 Javascript 不使用指向参数名称的引用将参数存储在标准数组中?
嗯,其中arguments
一种特殊的方式是它确实直接引用参数。在 JavaScript 中不可能用常规的 Array 实例来做到这一点。
function foo( param ) {
arguments[0] = "changed";
alert( param ); // says "changed"
}
foo( "original" );
现在这是否是“功能”显然是一个值得商榷的问题;除了创建恼人的错误之外,我不记得将它用于任何目的。关键是,拥有一个普通的 Array 实例以某种方式具有相当奇怪的行为(在 JavaScript 术语中是奇怪的)会引发各种奇怪的问题。
编辑——在评论中指出,可以使用模仿这种行为的 setter 和 getter 创建一个 Array 实例。在自己的代码中以编程方式执行此操作会有点困难(以某种通用方式,而不是临时的,我的意思是),但显然运行时可以做到这一点。
这实际上是 JavaScript 中的设计错误。
您可以将其转换为真正的数组,如下所示:
var args = Array.slice(arguments);
或者在旧版浏览器中:
var args = Array.prototype.slice.call(arguments, 0);
虽然您不能Array
直接在 上调用方法,但arguments
您可以Array
使用它调用方法,call
因为它具有类似数组的功能:
Array.prototype.join.call(arguments, "");