/*
* Example function for operating with dynamic arguments
*/
function something(){
for(var i in arguments){
arguments[i] = arguments[i] + Math.random() * 25;
}
return arguments;
}
没有错误,没有注意到性能下降,并且值已更改。
那么,对动态参数进行此类操作是否安全?
答案 0 :(得分:3)
我永远不会返回它,因为它不是一个真正的数组(有关该对象特殊行为的一些信息,请参阅http://javascriptweblog.wordpress.com/2011/01/18/javascripts-arguments-object-and-beyond/) - 所以根据调用代码对它的作用,它会失败
但是,您可以轻松将其转换为数组:
var args = Array.prototype.slice.call(arguments);
我不会修改原始对象,因为如果您的函数接受任何更改,更改也会更改相应的命名参数。
答案 1 :(得分:0)
arguments
是一个“伪数组”。与返回数组有什么不同?唯一的缺点是arguments
不是数组,因此,您没有所需的数组属性和方法。
答案 2 :(得分:0)
是的,这是安全的。但是,您应该注意arguments
对象的功能,它在Ecmascript实现和版本之间有所不同。它可以是绝对与参数变量链接的伪数组,也可以是独立的Array实例。
如果你了解你的环境就行了,否则最好是编码
function something() {
var l = arguments.length,
res = new Array(l);
for(var i=0; i<l; i++) {
res[i] = arguments[i] + Math.random() * 25;
}
return res;
}