ind HTMLCollection und NodeList iterable

In ES6, einwiederholba ist ein Objekt, das @ erlaufor... of und hat einen Symbol.iterator-Schlüssel.

Arrays sind iterabel, ebenso wie Sets und Maps. Die Frage ist: sind HTMLCollection und NodeList iterables? Sollen sie sein?

MDN-Dokumentation scheint ein @ vorzuschlagNodeList ist eine iterable.

for...of -Loops durchlaufen NodeList-Objekte in Browsern, die @ unterstützen, korrekfor...of (wie Firefox 13 und höher)

Dies scheint das Verhalten von Firefox zu bestätigen.

Ich habe den folgenden Code sowohl in Chrome als auch in Firefox getestet und festgestellt, dass Firefox anscheinend den Eindruck hat, dass es sich um iterable Dateien handelt, Chrome jedoch nicht. Außerdem glaubt Firefox, dass die von @ zurückgegebenen IteratorHTMLCollection undNodeList sind ein und dasselbe.

var col = document.getElementsByClassName('test'); // Should get HTMLCollection of 2 elems
var nod = document.querySelectorAll('.test');      // Should get NodeList of 2 elems
var arr = [].slice.call(col);                      // Should get Array of 2 elems

console.log(col[Symbol.iterator]);    // Firefox: iterator function, Chrome: undefined
console.log(nod[Symbol.iterator]);    // Firefox: iterator function, Chrome: undefined
console.log(arr[Symbol.iterator]);    // Firefox & Chrome: iterator function
console.log(col[Symbol.iterator] === nod[Symbol.iterator]);  // Firefox: true
console.log(col[Symbol.iterator] === arr[Symbol.iterator]);  // Firefox: false
<div class="test">1</div>
<div class="test">2</div>

One wirklich seltsame, verwirrende Sache: Das Ausführen des Code-Snippets führt zu einem anderen Ergebnis als das Kopieren und Ausführen in einer tatsächlichen Datei / Konsole in Firefox (insbesondere im letzten Vergleich). Jede Aufklärung über dieses seltsame Verhalten hier wäre auch willkommen.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage