简体   繁体   中英

Overwriting arguments object for a Javascript function

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM