for-of循环的性能成本

时间:2018-01-16 10:08:17

标签: javascript ecmascript-6

最近我使用babel试验了ES6代码。我很惊讶地看到编译的for of循环的详细代码。这是一个例子:

ES6

const a = [1, 2, 3, 4, 5];
for (const i of a)
{
    console.log(i);
}

编译

"use strict";
var a = [1, 2, 3, 4, 5];
for (
    var _iterator = a,
    _isArray = Array.isArray(_iterator),
    _i = 0,
    _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();
  ;

) {
      var _ref;

      if (_isArray) {
          if (_i >= _iterator.length) break;
              _ref = _iterator[_i++];
          } else {
              _i = _iterator.next();
              if (_i.done) break;
                  _ref = _i.value;
      }

      var i = _ref;

      console.log(i);
}

标准for循环或.forEach循环看起来与ES6中的循环几乎完全相同。我在代码中使用了for of循环,这是迭代数组的简洁方法。但直到现在我还没有意识到它带来的所有附加状态和逻辑。我想知道使用此方法与普通for循环或.forEach相比是否具有不可忽视的性能成本?

1 个答案:

答案 0 :(得分:3)

  

我想知道使用此方法与普通for循环或.forEach进行比较是否具有不可忽视的性能成本?

这完全取决于阵列的大小。

除非您重复数百万个元素,否则您不会注意到差异。

为了兼容性目的,Babel扩展了这个循环。较旧的浏览器没有for...of,但功能可以像这样再现。