Em meu JSFiddle , estou simplesmente tentando iterar em uma matriz de elementos. O array não está vazio, como provam as declarações de log. No entanto, a chamada para forEach
me dá o (não tão útil) erro “Não capturado TypeError
: undefined
não é uma função”.
Devo estar fazendo algo estúpido; O que estou fazendo de errado?
Meu código:
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); });
está bom. Qual é a diferença entre isso e a matriz no meu exemplo?
arr instanceof Array
resultará, false
ele não pode se beneficiar de nenhum método de protótipo do Array
objeto, como Array.prototype.forEach () . arr
é um HTMLCollection e um objeto como um array (mas não herda ou instanciado Array
). Portanto, seu for
loop padrão funcionará como se simplesmente iterasse através do índice do objeto e não fosse um protótipo de Array
.
arr
não é uma matriz, mas aHTMLCollection
. Não possui os mesmos métodos de um array. developer.mozilla.org/en-US/docs/Web/API/… . Aqui está um post sobre isso mesmo: stackoverflow.com/questions/13433799/…