2017-02-27 75 views
3

我正在閱讀Eloquent Javascript by Marijn Haverbeke,我正在研究第4章的obj數組和obj練習數組。到數組obj中的解決方案如下:循環obj練習

var list = {value: 1, rest: { value: 2, rest: { value: 3, rest: null}}}; 
 

 
function listToArray(list){ 
 
\t var array = []; 
 
\t for(var node = list; node; node = node.rest){ 
 
\t \t array.push(node.value); 
 
\t } 
 
\t return array; 
 
} 
 

 
console.log(listToArray(list));

我對什麼是對發生的for循環困惑。這就是我明白:

  1. 變量節點等於列表對象
  2. 的長度等於這是一樣的列表對象
  3. 和節點的節點等於價值休息

有人能夠簡單地分解這個for循環中發生的事情嗎?

+0

這不是一個騙局!哎呀。 –

+0

https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Statements/for –

+0

@Kinduser,其根本問題在於['for'](https://developer.mozilla.org/ en-US/docs/Web/JavaScript/Reference/Statements/for)循環工作。 – zzzzBov

回答

3
for(var node = list; node; node = node.rest) 

第一部分(至第一個;)表示;通過將節點設置爲列表來初始化節點;

第二部分的意思是;保持循環,直到'節點'爲空。這是因爲第二部分實際上是一個表達式,你經常看到像i<list.length這樣的東西,但它不必涉及長度,它只需要是布爾型的,真實意味着繼續前進,假意味着停止。在Javascript中,你可以將表達式的對象變量,它意味着相同的node!=null

第三部分手段;在每個循環設置節點之後等於node.rest的結果。其中node.rest是另一個需要解決的問題。

所以它循環的第一次,這是你所得到的

node = {value: 1, rest: { value: 2, rest: { value: 3, rest: null}}} 

,這將推動node.value(這是1)上array

第二次它循環你得到;

node = { value: 2, rest: { value: 3, rest: null}} 

,它會推node.value(其2)上array

依此類推,直到node.rest爲空。

+0

謝謝@jimW這很有道理! –