【问题标题】:Is a for...of loop the same as this regular loop? [duplicate]for...of 循环与此常规循环相同吗? [复制]
【发布时间】:2020-12-24 03:19:02
【问题描述】:

a = [1, 2];

for (item of a) {} 是否类似于这个 for 循环:

for (let index = 0; index < a.length; index++) {
    let item = a[index]
}

我注意到你也可以在for...of 中使用continuebreak

我想我更喜欢使用常规的 for 循环 - 感觉我有更多的控制权。

【问题讨论】:

  • for .. of invokes a custom iterator hook 所以...不完全一样。
  • 不,不一样。它使用不同的机制进行迭代,调用a[Symbol.Iterator],这是一种非常不同的机制。例如,迭代器不通过索引访问,因此不必是已知大小甚至是有限的。

标签: javascript


【解决方案1】:

是的,假设a 是一个标准数组,它在功能上是相同的。

我想我更喜欢使用常规的 for 循环 - 感觉我有更多的控制权。

在编写完第 100 个for 循环后,您将不再有这种感觉,意识到您只需要在其中 1% 的情况下进行额外的控制,而在 99% 的情况下您有不必要的冗长,其中 10% 的情况下存在奇怪的错误。

Array#forEach 是另一个不错的选择。通常,您真正想要的是Array#map(如果您想以某种方式转换数组的每个项目)。

【讨论】:

    【解决方案2】:

    for 用于具有 [] 运算符的对象。 for..of 用于可迭代对象。一些对象可以迭代并具有 [] 运算符,如数组。

    let myIterable = {};
    myIterable[Symbol.iterator] = function* () {
        yield 1;
        yield 2;
        yield 3;
    };
    for(x of myIterable) {
      console.log(x)
    }

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      相关资源
      最近更新 更多