【发布时间】:2017-06-05 04:00:16
【问题描述】:
DOM4 使 NodeLists 可迭代:
interface NodeList {
getter @987654322@? @987654323@(unsigned long index);
readonly attribute unsigned long @987654324@;
iterable<@987654325@>;
};
根据WebIDL,这意味着
实现被声明为可迭代的接口的对象 支持被迭代以获得一系列值。
注意:在 ECMAScript 语言绑定中,接口是 iterable 将有“entries”、“forEach”、“keys”、“values”和 @@iterator 在其 interface prototype object 上的属性。
所以以下是可能的:
for (var el of document.querySelectorAll(selector)) ...
我注意到 HTMLCollections 似乎同样适用于 Firefox 和 Chrome:
for (var el of document.getElementsByTagName(tag)) ...
其实我明白了
HTMLCollection.prototype[Symbol.iterator] === [][Symbol.iterator]; // true
但是,HTMLCollection 未定义为可迭代:
interface HTMLCollection {
readonly attribute unsigned long @987654330@;
getter @987654331@? @987654332@(unsigned long index);
getter @987654333@? @987654334@(DOMString name);
};
我还检查了WHATWG DOM spec,它也不是可迭代的。
那么,这种行为是否标准? HTMLCollection 应该在原型中有 @@iterator 吗?
【问题讨论】:
标签: javascript dom language-lawyer iterable htmlcollection