DOM4 使NodeList可迭代:
interface NodeList {
getter Node? item(unsigned long index);
readonly attribute unsigned long length;
iterable<Node>;
};
根据WebIDL,这意味着
实现被声明为可迭代的接口的对象支持被迭代以获得一系列值。
注意:在 ECMAScript 语言绑定中,可迭代的接口将 在其接口原型对象上具有“entries”、“forEach”、“keys”、“values”和@@iterator属性。
所以以下是可能的:
for (var el of document.querySelectorAll(selector)) ...
我注意到在 Firefox 和 Chrome 上似乎同样适用于 HTMLCollections:
for (var el of document.getElementsByTagName(tag)) ...
事实上,我得到
HTMLCollection.prototype[Symbol.iterator] === [][Symbol.iterator]; // true
但是,HTMLCollection没有定义为可迭代的:
interface HTMLCollection {
readonly attribute unsigned long length;
getter Element? item(unsigned long index);
getter Element? namedItem(DOMString name);
};
我还检查了WHATWG DOM 规范,它也不是可迭代的。
那么,这种行为标准与否?HTMLCollection
应该@@iterator
在原型中有一个?