2013-08-31 5 views
3

Je veux parcourir toutes les propriétés de l'objet. J'essayais de le faire en utilisantComment parcourir toutes les propriétés de l'objet

for(var key in obj) 

Mais cela ne m'a pas donné toutes les propriétés. Par exemple, il n'y a pas de clic sur la clé. Mais quand j'essaie de faire

obj['click'] 

J'ai quelque chose.

Je suis en train de le faire sur IE7

+0

Qu'est-ce que ce __something__ vous obtenez? –

+0

Si vous itérez correctement, vous utilisez peut-être 'hasOwnProperty', comme http://stackoverflow.com/a/921808/613130, vous ignorez donc les propriétés définies dans les objets" parents ". – xanatos

Répondre

3

itérées boucle for .. in sur toutes les propriétés enumerable, pas sur toutes les propriétés.

Donc, je pense que le click n'est pas énumérable ou vous avez manqué quelque chose.

Exemple sur la façon de définir une propriété qui ne sera pas disponible via la boucle for .. in:

var obj = {}; 

Object.defineProperty(obj, "stealth", { 
    enumerable: false, 
    value: "you don't iterate over me" 
}); 

// obj.stealth === "you don't iterate over me" 

for (var i in obj) { 
    // Loop will not enter here 
} 

Vous pouvez tester si la propriété est dénombrable (c.-à-sera accessible dans une boucle for .. in) en utilisant la méthode Object.propertyIsEnumerable():

obj.propertyIsEnumerable('stealth') === false 
+0

est-il possible d'obtenir toutes les propriétés? –

+1

@JohnSmith - oui, c'est 'Object.getOwnPropertyNames (obj);' mais il n'est pas supporté par IE avant la version 9. – kamituel

1

Pour/in exécute toutes les propriétés énumérables, y compris celles héritées des prototypes d'ancêtres. Si vous voulez juste ceux pour « votre objet », utilisez Object.keys():

Object.keys(yourobject).forEach(function(propertyName) { 
    var value = yourobject[propertyName]; 
    console.log(propertyName + ":", value); 
}); 
+0

Ceci est un concept extrêmement utile. Je vous remercie. – Jazzy

Questions connexes