2011-02-15 3 views
0

Si je donne les résultats suivants:arguments Écrasement objet pour une fonction Javascript

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

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

Serait-ce une mauvaise chose à faire? Je n'ai plus aucune utilité pour les arguments non nettoyés dans la fonction, et ce serait bien de ne pas créer une copie inutile de arguments juste pour les utiliser, mais y a-t-il des effets négatifs à faire cela?

Idéalement, je l'aurais fait, mais je devine que cela va dans les problèmes depuis arguments est pas vraiment un tableau:

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

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

Merci pour toute entrée.

EDIT: Je viens de réaliser que ces deux fonctions sont maintenant dans leurs propres fonctions, donc l'objet arguments a changé. Tout moyen de le faire sans créer une variable inutile?

Répondre

3

Je n'aurais pas pensé que arguments[i] = value; fonctionne, pour la même raison (ce n'est pas un tableau réel).

Vous devriez vraiment envisager d'affecter les valeurs nettoyées à une nouvelle variable:

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

L'introduction d'une nouvelle variable n'est pas inutile ici. Le plus souvent, vous n'opérez pas directement sur arguments de toute façon (à cause de ses défauts comme celui que vous avez déjà découvert), mais le convertissez d'abord en un vrai tableau (ce qui implique une nouvelle variable de toute façon).

En ce qui concerne votre édition:

droit, le premier ne fonctionnerait pas parce arguments fait référence aux arguments de la fonction anonyme.

+0

Oui, vous pouvez mettre à jour les valeurs dans un objet Arguments tout comme vous pouvez mettre à jour la valeur d'un paramètre formel. (Ils sont la même chose Les paramètres formels sont mappés en interne à l'objet Arguments.) Mais si OP voulait finalement manipuler les arguments en tant que collection, alors la conversion en un tableau avec '$ .map' est la voie à suivre . – user113716

Questions connexes