Overwriting arguments object for a Javascript func

2019-09-01 07:38发布

If I have the following:

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

        arguments[index] = value.replace(/[\W\s]+/g, '').toLowerCase();
    });

Would that be a bad thing to do? I have no further use for the uncleaned arguments in the function, and it would be nice not to create a useless copy of arguments just to use them, but are there any negative effects to doing this?

Ideally I would have done this, but I'm guessing this runs into problems since arguments isn't really an Array:

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

        return value.replace(/[\W\s]+/g, '').toLowerCase();
    });

Thanks for any input.

EDIT: I've just realized that both of these are now inside their own functions, so the arguments object has changed. Any way to do this without creating an unnecessary variable?

1条回答
孤傲高冷的网名
2楼-- · 2019-09-01 07:51

I would not have thought that arguments[i] = value; works, because of the same reason (it is not a real array).

You really should consider to assign the cleaned values to a new variable:

var cleaned_args = $.map(arguments, function(value) {
    return value.replace(/[\W\s]+/g, '').toLowerCase();
});

Introducing a new variable here is not unnecessary. Most often you don't directly operate on arguments anyway (because of its shortcomings like the one you already discovered), but convert it to a real array first (which will involve a new variable anyway).

Regarding your edit:

Right, the first one would not work because arguments refers to the arguments of the anonymous function.

查看更多
登录 后发表回答