了解Array.prototype.map

aay*_*ush 0 javascript loops array.prototype.map

我正在浏览Javascript 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;
};
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 6

for (var i = 0, o; o = obj[i]; i++) {
    obj[i] = callback(o);
}
Run Code Online (Sandbox Code Playgroud)

这与:

var i = 0,
    o;

while (o = obj[i]) {
    ...
    i++;
}
Run Code Online (Sandbox Code Playgroud)

这意味着,它声明了o最初设置为的变量undefined.在每次循环迭代期间,obj[i]分配给o.当obj[i]结果undefined(因为i超出数组的长度)时,表达式o = obj[i]导致undefined,终止循环.

实际上,这个循环实现有一个错误:只要任何数组值为false,它就会终止; 这可能是不希望的.