Javascript 使用并返回动态参数是否安全?

Javascript 使用并返回动态参数是否安全?,javascript,function,arguments,Javascript,Function,Arguments,没有错误,没有注意到性能下降,并且值已更改 那么,对动态参数执行这样的操作安全吗?我永远不会返回它,因为它不是一个真正的数组(有关该对象的特殊行为的一些信息,请参阅)——因此,取决于调用代码对它做了什么,它将失败 但是,您可以轻松地将其转换为阵列: /* * Example function for operating with dynamic arguments */ function something(){ for(var i in arguments){ ar

没有错误,没有注意到性能下降,并且值已更改


那么,对动态参数执行这样的操作安全吗?

我永远不会返回它,因为它不是一个真正的数组(有关该对象的特殊行为的一些信息,请参阅)——因此,取决于调用代码对它做了什么,它将失败

但是,您可以轻松地将其转换为阵列:

/*
 * Example function for operating with dynamic arguments
 */
function something(){
    for(var i in arguments){
        arguments[i] = arguments[i] + Math.random() * 25;
    }

    return arguments;
}

我不会修改原始对象,因为更改也会更改相应的命名参数,以防您的函数接受任何参数。

我永远不会返回它,因为它不是一个真正的数组(有关该对象的特殊行为的一些信息,请参阅)-因此,根据调用代码对其执行的操作,它将失败

但是,您可以轻松地将其转换为阵列:

/*
 * Example function for operating with dynamic arguments
 */
function something(){
    for(var i in arguments){
        arguments[i] = arguments[i] + Math.random() * 25;
    }

    return arguments;
}

我不会修改原始对象,因为如果函数接受任何参数,更改也会更改相应的命名参数。

参数
是一个“伪数组”。它与返回数组有什么不同?唯一的缺点是,
参数
不是数组,因此,您没有所需的数组属性和方法。

参数
是一个“伪数组”。它与返回数组有什么不同?唯一的缺点是,
参数
不是数组,因此,您没有所需的数组属性和方法。

是的,它是安全的。但是,您应该注意
参数
对象的功能,这在Ecmascript实现和版本之间是不同的。它可以是一个与参数变量绝对链接的伪数组,也可以是一个独立的数组实例

如果您了解您的环境,那么就可以了,而编写代码则更好

var args = Array.prototype.slice.call(arguments);
function something(){
var l=arguments.length,
res=新阵列(l);

对于(var i=0;i是的,它是安全的。但是,您应该注意
arguments
对象的功能,这在Ecmascript实现和版本之间是不同的。它可以是一个与参数变量绝对链接的伪数组,也可以是一个独立的数组实例

如果您了解您的环境,那么就可以了,而编写代码则更好

var args = Array.prototype.slice.call(arguments);
function something(){
var l=arguments.length,
res=新阵列(l);

对于(var i=0;iIt最好在这种情况下使用ThiefMasters变量。如果您不需要这些值,为什么要使用slice来复制它?但是您正在创建一个新数组并动态添加这些值,这与slice相同,只是在一个循环内。哈,以前没有注意到jsperf链接…有趣。它会更快吗浏览器?不,我正在创建一个空数组,而slice需要将值复制到其中。如果您只需要参数作为数组,slice肯定是更好的选择。在这种情况下,最好使用ThiefMasters变量。如果您不需要这些值,为什么要使用slice来复制它?但您正在创建一个新数组并添加这些值动态lues,这与slice相同,只是在一个循环内。哈,以前没有注意到jsperf链接…很有趣。在所有浏览器上都会更快吗?不,我正在创建一个空数组,而slice需要将值复制到其中。如果您只需要将参数作为数组,slice肯定是更好的选择。