2011-02-04 1 views
1

J'ai étendu le tableau pour prendre en charge indexOf dans IE en utilisant this JavaScript function from Mozilla MDC.Fonction ajoutée à Array en JavaScript, comment garder la fonction hors de ... dans?

Malheureusement, lors de l'utilisation de la syntaxe ... pour parcourir le tableau, la boucle s'arrête sur indexOf au lieu d'index numériques. Est-ce que je peux garder indexOf hors de pour ... dans la syntaxe dans Internet Explorer (il le fait dans Chrome)?

Qu'est-ce qui rend la propriété Array.length et les autres fonctions Array si spéciales que la boucle for ... in les ignore?

Je sais que le passage à la norme pour la syntaxe est une solution, mais je préférerais un pour ... dans le correctif.

+6

la solution ne doit pas être utilisée pour itérer sur le réseau. la raison pour laquelle la longueur et les autres propriétés n'apparaissent pas est due à l'attribut interne ['DontEnum'] (https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute) dans ES3. ES5 normalise ce comportement, donc vous pouvez aussi rendre vos propriétés non-énumérables. – Anurag

+0

Je ne peux pas contrôler ce que les autres personnes font avec ce fichier JS. Ils peuvent décider d'utiliser pour ... sur Array pendant que cela est inclus. – getWeberForStackExchange

+1

Voir http://stackoverflow.com/questions/2636453/is-it-possible-to-create-a-hidden-property-in-javascript –

Répondre

1

En plus d'éviter les ... dans la notation pour les tableaux, essayez d'appliquer une programmation défensive:
Lorsque vous utilisez la syntaxe for (... in ...) dans ES3 (Les navigateurs actuels), il est toujours recommandé que vous la filtrer:

var member; 
for (member in someObject) { 
    if (someObject.hasOwnProperty(member)) { 
    someObject[member]; // do whatever you want with it 
    } 
} 

Un autre code pourrait également enrichir un prototype d'objet.

Questions connexes