对象不支持属性或方法“jscomp_symbol_iterator0”。

6

我正在使用babel 6.7来构建一个单页React.js Web应用程序。 我已经尝试包含所有相关的polyfill,例如babel-polyfill,以使其与ES5浏览器兼容。即使如此,我偶尔也会遇到像这样的javascript错误

Object doesn't support property or method 'jscomp_symbol_iterator0'

大多数用户使用运行IE10+的Windows 7和8.1。我认为这可能与js Symbol.iterator不受支持有关。是否有办法为旧浏览器提供此功能的兼容性?

谢谢!


你的babel版本是否全部更新了?我看到有些问题,但它们都比较旧。 - Rob Wilkinson
是的,我刚刚更新了所有最新版本的babel和所有最新的插件和polyfills。你能告诉我你发现了哪些问题吗?我在这个主题上花费了很多时间,但却找不到任何东西。 - Peter Matev
2个回答

3
在我的情况下,错误如下:

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

指向与 ES6 语法相关的 for 循环的特定行。也就是说,我的代码如下:
for(let el of document.getElementsByClassName('especial-els')) { /* ... */ }

我只需要将这个循环改为“旧式”循环即可解决问题:

let especialEls = document.getElementsByClassName('especial-els');
for(let i = specialEls.length - 1; i >= 0; i--) { /* ... */ }

这个错误只出现在Edge浏览器中(Chrome和Firefox中没有),特别是在这个for(let i of iterator)循环中(我有其他类似的循环遍历数组,但错误不会出现)。我猜测document.getElementsByClassName()返回了一个“特殊”的迭代器。


1
我也遇到了使用 for (var a of b) 循环时的问题。将其改为传统的 for 循环,并将原始变量定义为 a = b[i] 即可完美解决。谢谢! - geebru

0
你应该添加以下的“require”语句:
require('core-js/es6/object');
require('core-js/es6/map');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接