es6用var,let或const迭代对象?

时间:2017-05-31 03:28:02

标签: javascript loops for-loop ecmascript-6

传统上,我们使用

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

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

1 个答案:

答案 0 :(得分:5)

这与您是否在循环中使用它们无关。根据您的程序需要使用正确的绑定

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

如果您不需要重新分配变量,请使用const - 它更严格,有助于保护您免遭意外重新分配

如果您确实需要重新分配的功能,除了使用let(或var)之外别无选择

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

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

    所以既然我在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