【问题标题】:es6 iterate object with var, let, or const?es6 用 var、let 或 const 迭代对象?
【发布时间】:2017-05-31 03:28:02
【问题描述】:

传统上,我们使用

for (var key in yourobject) {
  console.log(key, yourobject[key]);
}

但是对于es6,我应该改为使用const key还是let key

【问题讨论】:

  • 视情况而定,var 在大多数循环中都可以,但我认为let 是首选:p
  • 使用 let 而不是 var 会改变行为(在正确实现它的浏览器中),但新行为(主观上)更好,所以...
  • @nnnnnn const 并不暗示该变量是一个常量或者它不能被变异——它是一个常量binding,而不是一个常量value
  • @naomik - 在你回复之前,我删除了我的那部分评论,但我的意思是,当key 获得一系列不同的值。当特定的const 可以获得不同的 时,是否存在循环以外的上下文? (我知道如果它指的是一个对象,这个对象可以被变异,但这不是一回事。)
  • @nnnnnn for (const x of xs) ... 对您来说可能看起来很奇怪,但如果您不打算重新分配 x(您可能不会),那么没有理由使用更宽松的 let 绑定;至少没有一个我能想到的。诚然,在过去一年左右的时间里,我在两者之间摇摆不定,但几乎所有事情我都登陆了constlet 向我发出信号,将重新分配绑定

标签: javascript loops for-loop ecmascript-6


【解决方案1】:

这与您是否在循环中使用它们无关。为您的程序需要的任何内容使用正确的绑定

  • const 绑定无法重新分配
  • let 绑定可以重新分配

如果您不需要重新分配变量的能力,请使用 const - 它更严格,有助于防止意外重新分配

如果你确实需要重新分配的能力,你别无选择,只能使用let(或var


我喜欢@jfriend 的决策树,但我可能会这样写^_^

  1. 使用const
  2. 如果遇到重新分配问题,请使用let
  3. 如果您遇到超出范围的问题,请仔细检查您是否犯了错误;如果没有,请使用var

所以由于我在 for 循环中使用它,它在每个循环中重新分配键,我应该使用 let?

没有。 constlet 绑定仅在它们定义的上下文/范围内可用。在 forwhile 循环的情况下,绑定仅在循环体中可用 - 不会发生重新分配

for (const x of [1,2,3])
  console.log(x)
//1
//2
//3
  
for (const {a} of [{a:1}, {a:2}, {a:3}])
  console.log(a)  
//1
//2
//3

// const x and const a are not available outside of the loop
console.log(x) // ERROR: Uncaught ReferenceError: x is not defined
console.log(a) // ERROR: Uncaught ReferenceError: a is not defined

【讨论】:

  • 所以因为我在 for 循环中使用它,在每个循环中重新分配键,我应该使用 let?
  • 3.如果您遇到超出范围的问题,请仔细检查您是否尝试做一些不合逻辑的事情,如果没有,请使用var
  • @nnnnnn 更好
猜你喜欢
  • 2021-04-24
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2016-09-07
相关资源
最近更新 更多