2016-11-15 17 views
0

我正在瀏覽Javascript地圖功能,並堅持循環語法。很難找出放在逗號之後的。任何人都可以幫我弄清楚。循環的終止條件是什麼?瞭解Array.prototype.map

Array.prototype.mymap = function (callback) { 
    var obj = Object(this); 

    if (obj.length === 0) return null; 
    if (typeof(callback) === 'undefined') return null; 

    for (var i = 0, o; o = obj[i]; i++) { 
    obj[i] = callback(o); 
    } 

    return obj; 
}; 
+2

它只是聲明另一個名爲'o'的變量 – ASDFGerte

+0

你看到了什麼錯誤? – jdmdevdotnet

+0

嗨,AlgoreRythm,我沒有看到任何錯誤,我只是想明白這一點。 – aayush

回答

6
for (var i = 0, o; o = obj[i]; i++) { 
    obj[i] = callback(o); 
} 

這是一樣的:

var i = 0, 
    o; 

while (o = obj[i]) { 
    ... 
    i++; 
} 

這意味着,它聲明變量o,其最初被設置爲undefined。在每次循環迭代期間,obj[i]被分配給o。當obj[i]結果爲undefined(因爲i超出了陣列的長度),則表達式o = obj[i]導致undefined,其終止循環。

實際上,這個循環實現有一個bug:只要有任何數組值爲falsey;這可能是不希望的。

+0

感謝torazburo和deceze,現在明白了:) – aayush