2017-05-31 59 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