angular forEach方法遍历源码解读
angular中提供了forEach()方法用于遍历对象或数组,供大家参考,具体内容如下
functionforEach(obj,iterator,context){
varkey,length;
if(obj){
if(isFunction(obj)){
for(keyinobj){
//NeedtocheckifhasOwnPropertyexists,
//asonIE8theresultofquerySelectorAllisanobjectwithoutahasOwnPropertyfunction
if(key!='prototype'&&key!='length'&&key!='name'&&(!obj.hasOwnProperty||obj.hasOwnProperty(key))){
iterator.call(context,obj[key],key,obj);
}
}
}elseif(isArray(obj)||isArrayLike(obj)){
varisPrimitive=typeofobj!=='object';
for(key=0,length=obj.length;key<length;key++){
if(isPrimitive||keyinobj){
iterator.call(context,obj[key],key,obj);
}
}
}elseif(obj.forEach&&obj.forEach!==forEach){
obj.forEach(iterator,context,obj);
}elseif(isBlankObject(obj)){
//createMap()fastpath---SafetoavoidhasOwnPropertycheckbecauseprototypechainisempty
for(keyinobj){
iterator.call(context,obj[key],key,obj);
}
}elseif(typeofobj.hasOwnProperty==='function'){
//SlowpathforobjectsinheritingObject.prototype,hasOwnPropertycheckneeded
for(keyinobj){
if(obj.hasOwnProperty(key)){
iterator.call(context,obj[key],key,obj);
}
}
}else{
//Slowpathforobjectswhichdonothaveamethod`hasOwnProperty`
for(keyinobj){
if(hasOwnProperty.call(obj,key)){
iterator.call(context,obj[key],key,obj);
}
}
}
}
returnobj;
}
官方描述:
forEach方法可以遍历数组或对象,函数有三个参数为别为:value,key,obj。
1)、valuevalue指当遍历的对象或数组元素当前的值
2)、key是对象属性的的key或者数组的索引
3)、objobj即被遍历的对象或数组本身
示例:
varvalues={name:'misko',gender:'male'};
varlog=[];
angular.forEach(values,function(value,key){
this.push(key+':'+value);
},log);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。