实现forEach的问题?

这是我写的,要实现的就是对数组中的非稀疏元素进行操作
Array.prototype.foreach=function(callback){
vara=this;
for(vari=0;iif(!(iina))continue;
callback(a[i],i,a);
}
}
这是ES5源码
//ProductionstepsofECMA-262,Edition5,15.4.4.18
//Reference:http://es5.github.io/#x15.4.4.18
Array.prototype.forEach=function(callback,thisArg){
varT,k;
if(this==null){//难道Array可能为null??什么情况下?
thrownewTypeError('thisisnullornotdefined');
}
varO=Object(this);//这有什么用?
varlen=O.length>>>0;//这有什么用?
if(typeofcallback!=="function"){
thrownewTypeError(callback+'isnotafunction');
}
if(arguments.length>1){
T=thisArg;//thisArg有什么用?
}
k=0;
while(kvarkValue;
if(kinO){
kValue=O[k];
callback.call(T,kValue,k,O);
}
k++;
}
};
问题已写在注释中,求指导。
关于第三个问:length>>>0,提供一个参考链接
凤凰求蛊
浏览 469回答 2
2回答

慕村225694

自己的一点见解:if(this==null){用来判断作用对象是否为null或undefined,这里用了双等,作用是在比较之前会默认进行类型转换,比如把'',undefined,0,false都给转转化成undefined,作用是判断、过滤作用对象。vartarget=''||false||0||undefined||null;if(target==null){console.log('targetisundefined')}T=thisArg;这个东西在MDN里有说,他是在forEach执行callback时的this值,比如:vararray=[1,2,3];varresult=[];array.forEach(function(i){this.push(i*i);},result);//result==>[1,4,9]或者在reduce里,[1,2,3].reduce(function(p,v){returnp+v})//6[1,2,3].reduce(function(p,v){returnp+v},10)//16
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript