了解 Array.prototype.map
Understanding Array.prototype.map
我正在研究 Javascript 映射函数,并停留在循环语法上。逗号后面的o很难搞清楚。谁能帮我弄清楚。另外循环的终止条件是什么?
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;
};
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,它就会终止;这可能不是我们想要的。
我正在研究 Javascript 映射函数,并停留在循环语法上。逗号后面的o很难搞清楚。谁能帮我弄清楚。另外循环的终止条件是什么?
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;
};
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,它就会终止;这可能不是我们想要的。