Search code examples
javascriptjqueryfunctionargumentsconventions

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?


Solution

  • 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.