我在我正在处理的项目中遇到了这段代码:
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];
....
}
答案 0 :(得分:2)
您的示例似乎是for..of循环的预编译版本。这段代码不是手写的,而是你可以写下来的:
var dataSources = **an array of objects**;
for (let dataSource of dataSources) {
....
}
并编译它以获得您向我们展示的表格。
正如您所看到的,这种语法甚至比常规for循环更短,并且具有能够迭代任何可迭代集合的好处。请参阅iteration protocol。