2017-05-31 35 views
1

传统上,我们使用es6用var,let或const迭代对象?

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

但随着ES6,我应该改变使用const keylet key呢?

+0

依赖,VAR是最环路完全确定,但'让'我认为是必须的:p –

+0

使用'let'而不是'var'会改变行为(在实现它的浏览器中),但新行为(主观上)更好,所以... – nnnnnn

+0

@nnnnnn' const'并不意味着该变量是一个常量或者它不能被突变 - 它是一个常量*绑定*,而不是一个常量*值* – naomik

回答

4

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

  • const绑定不能被重新分配
  • let绑定可以被重新分配

如果你不需要重新分配您的变量的能力,使用const - 这是更严格,并有助于保护您免于意外重新分配

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


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

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

所以自从我使用它在for循环中,其重新分配的关键在每个周期中,我应该使用让?

编号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

+0

所以,因为我使用它在循环中重新分配每个循环中的键,我应该使用let? – stackjlei

+0

我已更新我的回答以解答您的意见 – naomik

+0

3.如果遇到超出范围的问题,请仔细检查您是否尝试做不合逻辑的事情,如果不使用'var'。 – nnnnnn