在NodeList上使用'for ... of'时,Edge 15会引发错误

lam*_*ade 3 javascript nodelist ecmascript-6 microsoft-edge

在查看ECMAScript兼容性表时,它表示Edge 15和Edge 16支持for ... of循环.

但是,当我运行此代码时:

const list = document.querySelectorAll('[data-test]');
console.log(list);

for (const item of list) {
  console.log(item);
}
Run Code Online (Sandbox Code Playgroud)
<div data-test></div>
<div data-test></div>
<div data-test></div>
<div data-test></div>
<div data-test></div>
Run Code Online (Sandbox Code Playgroud)

它适用于Chrome和Firefox,但不适用于Edge.相反它说:

Object不支持属性或方法'Symbol.iterator'.

据我了解,NodeList实际上应该支持它,对吗?

这是一个自己尝试的fildde:在线测试

有人可以在这里解释问题或错误吗?

JLR*_*she 6

Edge确实支持for... of.

它似乎不支持NodeLists上的迭代器.并非所有类似数组的对象都支持迭代器,我不确定NodeLists是否有任何标准说法.

无论如何,for ... of与他们合作很容易:

const list = document.querySelectorAll('[data-test]');

for (const item of Array.from(list)) {
	console.log(item);
}
Run Code Online (Sandbox Code Playgroud)
<div data-test>a</div>
<div data-test>b</div>
<div data-test>c</div>
<div data-test>d</div>
<div data-test>e</div>
Run Code Online (Sandbox Code Playgroud)