JS19 -- 循环和遍历各方法比较

for...in          index

for...of          item

forEach       index,item,all

filter             index,item,all    return 新数组,原数组不变(1层的情况) 

map             index,item,all

 

some             index,item,all    

every             index,item,all    

 

 

1、for...in:

  ①. 返回下标
  ②. 只遍历可枚举的,如果设置某下标为不可枚举,则不展示Object.defineProperty(arr,index,{enumrable:false})
  ③. 还会遍历继承的, Array.prototyp.my = 'shabi'; 也会遍历出来,可以通过hasOwnProperty判断有没有这个属性(非继承)
  ④. 对象遍历不安顺序{"2":'ef',"a":'fefe',"1":"feffgeef"}
  ⑤. 数组通过对象方式添加属性,array.text = 1;只有for...in能打印出
2、forEach:

   ①. 返回值,下标,原数组
  ②. 没办法使用 break /continue语句跳出循环,或者使用return从函数体内返回(可以抛出错误,trycatch接受)

        优点传入函数使变量不会污染全局
3、for...of

  ①. 返回值
  ②. 获取下标转为Map
  ②. 可以使用 break, continue 和 return
  ③. 除支持数组,还支持字符串,Set,Map(let [key,value] of xxxMap),对象
  ⑤. 代替for...in和forEach

Array.prototype.bb = 'efefef';
let arrA = [
	{id:1, name: 'AA', url: '/ueijfejf'},
	{id:2, name: 'BB', url: '/ueijfejf'},
	{id:3, name: 'CC', url: '/ueijfejf'},
	{id:4, name: 'DD', url: '/ueijfejf'},
	{id:5, name: 'EE', url: '/ueijfejf'},
]
arrA['efefe'] = {id:0}
Object.defineProperty(arrA,'efefe',{
	enumerable: false
})
Object.defineProperty(arrA,0,{
	enumerable: false
})
Object.defineProperty(arrA,2,{
	enumerable: false
})
console.log('for...in-start')
for(let item in arrA){
	console.log(item);
}
console.log('for...in-end')
console.log('forEach-start')
arrA.forEach((item)=>{
	console.log(item)
})
console.log('forEach-end')
console.log('for...of-start')
for(let item of arrA){
	console.log(item);
}
console.log('for...of-end')

  

 4、filter 

 过滤数组

 arr.filter((item,index,oldArr)=>{true});   //   return 为true的item,生成新的数组,否则[]

5、map 

 arr.map((item,index,oldArr)=>{  }); 

https://segmentfault.com/a/1190000018340362

https://www.cnblogs.com/qdlhj/p/9916324.html
https://www.baidu.com/s?ie=UTF-8&wd=map%20%E5%92%8C%20for%20of

 

 

6、some

通过提供函数返回匹配到第一个满足返回true,否则返回false,不改变原数组

 

7、every

通过提供函数返回匹配到所有满足返回true,否则返回false,不改变原数组

posted @ 2020-04-16 10:06  Yo!  阅读(272)  评论(0编辑  收藏  举报