//ECScript3中模仿ECScript5中的map方法
Array.prototype.map = Array.prototype.map || function(f){
var caller = arguments.callee.caller;
var results = [];
for(var i = 0; i< caller.length; i++){
//下面这个if判断还有没有必要?看到书上有这个if判断
if(i in caller) results[i] = f.call(null,caller[i],i,caller);
}
return results;
};
这个
i in caller
就是用来判断数组里的第i项是否存在 (是否是undefined
)。如果是则不传递给 f 去处理。如果没有
i in caller
,则在 console 里面会出现 7 行记录。这样和原生的 map 方法的行为就不一致了。in
是专门用来判断一个object
是否包含某个属性的。