【问题标题】:Using this for iterator as opposed to for loop使用这个 for 迭代器而不是 for 循环
【发布时间】:2017-05-19 09:59:46
【问题描述】:

我在我正在从事的项目中遇到了这段代码:

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 loop 相比,使用这种for 风格有什么突出的好处吗?在我看来,实现相同输出的方法过于复杂:

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

【问题讨论】:

  • “这与标准 for 循环有什么区别?” – 无;这一个“标准”for循环。 for (INITIALIZATION; CONDITION; AFTERTHOUGHT)
  • 好的,但是为什么要使用一个而不是另一个“这似乎是实现相同输出的一种过于复杂的方法”

标签: javascript loops for-loop iterator


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢@Tamas,原来是这样。结果项目正在使用Babel,我一直在查看编译文件而不是原始文件,将其归结为“星期五" 问题 (-_-)。
猜你喜欢
  • 1970-01-01
  • 2018-08-20
  • 2018-07-05
  • 2016-06-20
  • 2019-01-24
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2021-06-22
相关资源
最近更新 更多