【问题标题】:Why does for-each work, but for...of... doesn't?为什么 for-each 有效,但 for...of... 无效?
【发布时间】:2020-06-18 16:11:08
【问题描述】:

这是我从 firebase 获取数据的代码:

const querySnapshot = await db.collection('entries').get()

我想将每个条目元素的数据添加到一个新数组中,为此我有两种方法:

querySnapshot.forEach((entry) => {
   const entryData = entry.data()
   entries.value.push(entryData)
})

for (const entry of querySnapshot) {
      const entryData = entry.data()
      if (entry) { entries.value.push(entryData)
}

第一个解决方案有效,但第二个引发此错误:TypeError: "querySnapshot is not iterable"。这两种方式不是基本一样吗?为什么 on 会抛出错误,而另一个不会?

【问题讨论】:

  • 因为 get() 返回的任何东西都没有实现 Symbol.iterator 循环所需的 for...offorEach() 不需要 Symbol.iterator,因为这是返回对象上已经可用的方法

标签: javascript for-loop foreach


【解决方案1】:

从 get 方法返回的 querySnapshot 不是数组或可迭代对象。

https://firebase.google.com/docs/reference/js/firebase.firestore.QuerySnapshot

forEach 是来自 querySnapshot 对象的method,这就是您可以使用它的原因。

【讨论】:

    【解决方案2】:

    它们不一样。 第一个 when 仅仅意味着你的对象有一个forEach 方法。

    第二个意味着你的对象有一个[Symbol.iterator] 属性,它是一个生成器。这使您的对象可迭代。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2016-12-26
      • 1970-01-01
      • 2019-03-08
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      相关资源
      最近更新 更多