【发布时间】:2018-05-01 09:42:33
【问题描述】:
我在弄清楚这句话有什么问题时遇到了一些问题。
for(const form of doc.getElementsByClassName('class-name')) { .... }
查看compatibility listings,我可以明白为什么它在没有支持的情况下在 safari 上运行纯 ES6 时会出现问题。但是,直到我用 babel 编译 ES6 时才会发生这种情况。
编译后我得到以下信息:
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = doc.getElementsByClassName('class-name')[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var form = _step3.value;
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
但这会触发 safari 中的错误
TypeError: doc.getElementsByClassName('class-name')[Symbol.iterator] is not a function. (In 'doc.getElementsByClassName('class-name')[Symbol.iterator]()', 'doc.getElementsByClassName('class-name')[Symbol.iterator]' is undefined)
这是使用最新版本的 Babel,通过 browserify 和 babelify 使用 gulp 编译所有最新版本。如果我安装 transform-es2015-for-of 插件并强制它,我会得到以下结果:
var _loop = function _loop() { };
for (var _iterator2 = doc.getElementsByClassName('class-name'), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
var _ret = _loop();
if (_ret === 'break') break;
}
但这给了我另一个 safari 错误:
TypeError: _iterator2[Symbol.iterator] is not a function. (In '_iterator2[Symbol.iterator]()', '_iterator2[Symbol.iterator]' is undefined)
【问题讨论】:
-
您的
doc变量是否设置为document?
标签: javascript ecmascript-6 babeljs