2 votes

Javascript pour les variantes de la boucle ()

Je crée cet élément avec ces attributs :

var x = document.createElement('x');
x.setAttribute('ha','1');
x.setAttribute('he','2');
x.setAttribute('hi','3');

Ensuite, j'utilise en boucle ces deux formulaires et j'obtiens des résultats différents à chaque fois :

>>>for(var i in x.attributes) console.log(x.attributes[i]);
ha="1"
he="2"
hi="3"
3
item()
getNamedItem()
setNamedItem()
removeNamedItem()
getNamedItemNS()
setNamedItemNS()
removeNamedItemNS()

Et l'autre :

>>>for(var i=0;i<x.attributes.length;i++) console.log(x.attributes[i]);
ha="1"
he="2"
hi="3"

Cela ne devrait-il pas donner le même résultat ? Pourquoi ?

5voto

David Thomas Points 111253

Les for...in parcourt toutes les propriétés d'un objet, y compris les propriétés "natives". Pour limiter la sortie aux propriétés que vous avez définies :

for (var i in obj) {
    if (obj.hasOwnProperty(i)) {
        console.log(i);
    }
}

Références :

5voto

Asad Points 22968

En effet, vous obtenez également tout du prototype. Utiliser hasOwnProperty pour n'itérer que sur les propriétés que vous avez définies :

for(var i in x.attributes){ 
    if (x.hasOwnProperty(i)) {
        console.log(x.attributes[i]);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X