问题 为什么MS Edge不使用spread元素和querySelector?


在另一个问题中,这是在那里:

this.products = [...document.querySelectorAll('.product')];

Edge将失败,并显示以下错误:

功能预期

但这有效:

var params = ['hello', '', 7];
var other = [ 1, 2, ...params];

为什么不是顶级的工作在Edge(它在Chrome上)?


9184
2017-10-10 16:43


起源

你有没有尝试过 [...(document.querySelectorAll('.product'))]? - Andrzej Smyk
我做了你的建议,没有工作! - Mouser
Edge可能没有实现迭代器协议 NodeListS' 编辑: 是的: developer.mozilla.org/en-US/docs/Web/API/... (至少它不支持 entries(), values()等等,我相信它会支持迭代器协议)。 - Felix Kling
错误消息并不是太有用,但它 大概 意思是“预期的 document.querySelectorAll('.product')[Symbol.iterator] 成为一个功能“。 - Bergi


答案:


你可以用 Array.from,从像对象一样的数组生成一个数组。

this.products = Array.from(document.querySelectorAll('.product'));

8
2017-10-10 16:47



就是这样 首选语法 无论如何要进行类型转换 - Bergi


好吧,看起来Bergi和Felix在正确的轨道上:在这里 文件 在MDN上他们谈论迭代器。

一些内置构造,​​例如扩展运算符,在引擎盖下使用相同的迭代协议:

所以Array确实有 entries() 一个 nodelist 在Edge中不支持迭代,也不支持迭代。

尼娜的回答是转到的!


1
2017-10-10 16:54