In meiner JSFiddle versuche ich einfach, über ein Array von Elementen zu iterieren. Das Array ist nicht leer, wie die Protokollanweisungen belegen. Der Aufruf von forEachgibt mir jedoch den (nicht so hilfreichen) Fehler "Nicht gefangen TypeError: undefinedist keine Funktion".
Ich muss etwas Dummes tun; Was mache ich falsch?
Mein Code:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});
.myClass {
background-color: #FF0000;
}
<div class="myClass">Hello</div>
[1,2,3].forEach(function(v,i,a) { console.log(v); });ist in Ordnung. Was ist der Unterschied zwischen diesem und dem Array in meinem Beispiel?
arr instanceof Arraydazu führen wird false, können keine Prototypmethoden des ArrayObjekts wie Array.prototype.forEach () verwendet werden . arrist eine HTMLCollection und ein Array-ähnliches Objekt (erbt jedoch nicht von oder instanziiert nicht Array). Daher forfunktioniert Ihre Standardschleife so, dass sie einfach den Index des Objekts durchläuft und kein Prototyp von ist Array.
arrist kein Array, sondern einHTMLCollection. Es hat nicht die gleichen Methoden wie ein Array. developer.mozilla.org/en-US/docs/Web/API/… . Hier ist sogar ein SO-Beitrag darüber: stackoverflow.com/questions/13433799/…