首先,我們可以寫不同的方式程序會更理解
function listToArray(list) {
array = [];
for (var i=list;i; i = i.rest)
{
array.push(i.value);
alert(array)
}
}
var listobject = { value: 10, rest: { value: 20, rest: { value: 30, rest: null } } };
listToArray(listobject);
這裏的ListObject是一個object literal並使用for循環,我們遍歷對象字面值或對象字面值的屬性。
我們可以把代碼
1)listToArray(listobject);
這是函數調用,在這裏我們傳遞的對象作爲參數傳遞給函數的每一行。
2)當此代碼執行,然後控制轉移到函數定義
function listToArray(list) { ...}
這裏列表就是我們通過在函數調用時同樣的論點。
3)array = [];
函數裏面我們聲明瞭一個數組,最初數組沒有元素。
4)接下來是我們的for循環。 for (var i=list;list; i = i.rest)
內部循環首先我們指定var i = list;
意味着我們的對象列表中的所有的財產分配給我
這意味着我們可以通過i
訪問對象的每個屬性,
例如:
i.value將導致10
5)next條件語句在這裏是i
並且在你的程序中它是節點
都在這種情況下相同的含義:
病情會假時i
爲空,你的情況node
爲空。
6)i=i.rest
它將給對象的對象或值的屬性。
例子:listobject.value will result 10
listobject.rest.value will result 20
listobject.rest.rest.value will result 30
7)最後array.push(i.value);
值添加到我們的陣列,並在此我們數組包含10,20,30
當節點爲空時它會停止,因爲這將返回falsey值這導致循環終止。 – DoctorMick 2015-02-23 11:26:28