覆盖Javascript函数的arguments对象

覆盖Javascript函数的arguments对象,javascript,jquery,function,arguments,conventions,Javascript,Jquery,Function,Arguments,Conventions,如果我有以下资料: // Clean input. $.each(arguments, function(index, value) { arguments[index] = value.replace(/[\W\s]+/g, '').toLowerCase(); }); 这样做会是件坏事吗?我不再使用函数中未清理的参数,最好不要仅仅为了使用它们而创建一个无用的参数副本,但是这样做有任何负面影响吗 理想情况下,我会这样做,但我猜这会遇到问题,因为参数不

如果我有以下资料:

    // Clean input.
    $.each(arguments, function(index, value) {

        arguments[index] = value.replace(/[\W\s]+/g, '').toLowerCase();
    });
这样做会是件坏事吗?我不再使用函数中未清理的参数,最好不要仅仅为了使用它们而创建一个无用的
参数副本,但是这样做有任何负面影响吗

理想情况下,我会这样做,但我猜这会遇到问题,因为
参数
不是真正的数组:

    arguments = $.map(arguments, function(value) {

        return value.replace(/[\W\s]+/g, '').toLowerCase();
    });
谢谢你的意见


编辑:我刚刚意识到这两个函数现在都在它们自己的函数中,所以arguments对象已经改变了。有没有办法在不创建不必要的变量的情况下做到这一点?

我不会想到
参数[I]=value也可以工作,原因相同(它不是真正的数组)

<>你真的应该考虑把干净的值分配给一个新的变量:

var cleaned_args = $.map(arguments, function(value) {
    return value.replace(/[\W\s]+/g, '').toLowerCase();
});
在这里引入一个新变量并不是没有必要的。通常情况下,您不会直接操作
参数
(因为它的缺点与您已经发现的一样),而是首先将其转换为实际数组(这将涉及一个新变量)

关于您的编辑:


对,第一个不起作用,因为
arguments
引用匿名函数的参数。

我不会想到
arguments[I]=value也可以工作,原因相同(它不是真正的数组)

<>你真的应该考虑把干净的值分配给一个新的变量:

var cleaned_args = $.map(arguments, function(value) {
    return value.replace(/[\W\s]+/g, '').toLowerCase();
});
在这里引入一个新变量并不是没有必要的。通常情况下,您不会直接操作
参数
(因为它的缺点与您已经发现的一样),而是首先将其转换为实际数组(这将涉及一个新变量)

关于您的编辑:


对,第一个不起作用,因为
arguments
引用匿名函数的参数。

是的,可以更新arguments对象中的值,就像更新形式参数的值一样。(它们是一样的。形式参数在内部映射到Arguments对象。)但是如果OP最终想要进一步将参数作为集合进行操作,那么转换为带有
$的数组。映射是一种方法。是的,可以更新Arguments对象中的值,就像更新形式参数的值一样。(它们是一样的。形式参数在内部映射到Arguments对象。)但如果OP最终想要进一步将参数作为集合进行操作,则可以使用
$转换为数组。map
是一种方法。