【问题标题】:Using for-in is not prefered in JavaScript what about for-of?在 JavaScript 中不推荐使用 for-in,那么 for-of 呢?
【发布时间】:2018-01-07 07:49:42
【问题描述】:

我行写在最佳实践中。因为我知道 for-in 是一种不好的做法,因为它是不好的行为,所以我停止使用它。 但是使用 for-of 怎么样? 我们应该在迭代器之前使用哪个词(var、let、const)以及为什么?

for(单元格的常量迭代器){ iterator.addEventListener('click', function (event) { 控制台.log(迭代器); }); }

【问题讨论】:

  • 1) for-in 和 for-of 有不同的用途。前者用于迭代对象的可枚举键。后者用于迭代迭代器/可迭代对象(数组、生成器、数组键迭代器等)

标签: javascript


【解决方案1】:

for-of 专门用于循环遍历可迭代对象(例如数组)的值。所以是的,绝对是,在数组上使用for-of 是非常好的做法。

我们应该在迭代器之前使用哪个词(var、let、const)以及为什么

这取决于你。 (但它不是“迭代器”。它是“变量”或“绑定”或松散的“标识符”。iteratorfor-of 在幕后使用的对象。)如果我使用 const不打算在循环中更改该绑定的值(通常最好不要),因为它是每次循环迭代的常量。 let 也是一个合理的选择,在这两种情况下,在循环中创建的任何闭包都不会与 the closures in loops problem 与该绑定发生冲突。但出于同样的原因,letconst 如果在循环构造中声明,都会对性能产生影响,因为每次循环迭代都会创建一个 new 绑定。如果您使用var,它将具有函数范围,因此不会为每个循环迭代重新创建。 (但我不会使用var;如果我有一段对性能特别敏感的代码需要避免绑定重新创建,我会在循环上方使用let。)


...因为我知道 for-in 是一种不好的做法,因为它是不好的行为...

for-in 如果用于其目的,则不是“不良行为”:循环遍历对象的可枚举属性的名称。只是人们经常使用它来循环遍历数组的索引,它不是为它设计的,也不是最佳选择。 (更多内容见this question,包括mine。)

【讨论】:

  • 太棒了。这是一个更好的描述。 “如果用于其目的:循环遍历对象的可枚举属性的名称”.. 其他人说.. 嘿,初学者永远不要使用它,这是有害的:D 谢谢亲爱的
猜你喜欢
  • 1970-01-01
  • 2018-11-14
  • 2019-11-11
  • 2017-09-12
  • 2015-05-30
  • 2010-09-19
相关资源
最近更新 更多