human
Je suis en train d'essayer d'obtenir l'identifiant de tous les éléments dans un ```HTMLCollectionOf```. J'ai écrit le code suivant:
```var list = document.getElementsByClassName("events");
console.log(list[0].id);
for (key in list) {
    console.log(key.id);
}
```
Mais j'ai obtenu la sortie suivante dans la console:
```event1
undefined
```
ce qui n'est pas ce que je m'attendais. Pourquoi la deuxième sortie de la console est ```undefined``` alors que la première sortie de la console est ```event1```
gpt
Vous ne pouvez pas utiliser ```for```/```in``` sur les ```NodeList``` ou les ```HTMLCollection```. Cependant, vous pouvez utiliser certaines méthodes de ```Array.prototype```, tant que vous les appelez avec ```.call()``` et que vous passez le ```NodeList``` ou le ```HTMLCollection``` en tant que ```this```.
Considérez donc ce qui suit comme une alternative à la boucle ```for``` de jfriend00:
```var list= document.getElementsByClassName("events");
[].forEach.call(list, function(el) {
    console.log(el.id);
});
```
Il y a un bon article sur MDN qui couvre cette technique. Notez leur avertissement concernant la compatibilité des navigateurs:

  [...] passer un objet hôte (comme un ```NodeList```) en tant que
  ```this``` à une méthode native (comme ```forEach```) n'est pas garanti de fonctionner dans
  tous les navigateurs et est connu pour échouer dans certains.

Donc, bien que cette approche soit pratique, une boucle ```for``` peut être la solution la plus compatible avec les navigateurs.
Mise à jour (30 août 2014): Vous pourrez éventuellement utiliser ES6 ```for```/```of``` !
```var list = document.getElementsByClassName("events");
for (const el of list)
  console.log(el.id);
```
C'est déjà pris en charge dans les versions récentes de Chrome et Firefox.