将此用于迭代器而不是for循环

时间:2017-05-19 09:59:47

标签: javascript loops for-loop iterator

我在我正在处理的项目中遇到了这段代码:

var dataSources = **an array of objects**
var _iteratorNormalCompletion = true;
for (var _iterator = dataSources[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
    var dataSource = _step.value;
    ....
}

首先,我以前从未遇到过这样的事情(甚至不知道要搜索什么参考资料)。它的技术术语是什么?它是如何工作的? _step.value在哪里被分配?这和for loop之间有什么区别?

其次,使用这种for样式比标准for loop有什么突出的好处,对我而言,它似乎是一种过于复杂的方式来实现相同的输出:

var dataSources = **an array of objects**
for (var i = 0; i < dataSources.length; ++i) {
    var dataSource = dataSources[i];
    ....
}

1 个答案:

答案 0 :(得分:2)

您的示例似乎是for..of循环的预编译版本。这段代码不是手写的,而是你可以写下来的:

var dataSources = **an array of objects**;
for (let dataSource of dataSources) {
    ....
}

并编译它以获得您向我们展示的表格。

正如您所看到的,这种语法甚至比常规for循环更短,并且具有能够迭代任何可迭代集合的好处。请参阅iteration protocol