2016-11-15 2 views
0

Я просматривал функцию отображения Javascript и придерживался синтаксиса цикла. Трудно определить o после запятой. Может кто-нибудь помочь мне понять это. Также каково условие завершения цикла?Понимание 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, который завершает цикл.

На самом деле, эта реализация цикла имеет ошибку: она завершается всякий раз, когда любое значение массива равно falsey; что, вероятно, нежелательно.

+0

Спасибо torazburo и deceze, Получил это сейчас :) – aayush

Смежные вопросы