php+foreach菜鸟,菜鸟系列——forEach、map、for...in、for...of

作为一个前端菜鸟,有好多容易弄混的名词

我想把搞清楚的一一记录下来,帮助记忆

forEach、map、for...in、for...of

这四个方法都是可以遍历数组或类数组的,很容易就懵了,必须总结一下他们的使用对象和区别,加以区分。

首先,map()和forEach()是Array自带的方法,Map对象也有forEach()方法,而for...in和for...of是对数组/类数组元素进行for循环操作的方法。

也就是说,在使用map()和forEach()的时候,需要用数组调用。(先只说数组的forEach())

var arr=[1,2,3,4,5];

arr.map();

arr.forEach();

for( k in arr ){};

for( k of arr ){};

这么说来,我们可以把他们分为两组分别介绍

第一组:map()和forEach()

相同点:

只能遍历数组,且循环遍历数组中的每一项

包含的匿名函数都是三个参数(item,index,input)(当前项,当前项的索引,原始数组)

在IE6-8下都不兼容

不同点:

map()有返回值,可以用'链式'连接;forEach()无返回值,写了也没用

举个栗子吧~ 建议不要只看看,自己多尝试一下

var arr = [1,2,3,4];

var res1 = arr.map(function(item,index,input){

return input[index] = item*2; //返回每一项哦

})

console.log(res1); //[2,4,6,8]

console.log(arr); //[2,4,6,8]

// 如果不想改变原数组,可以return item*2;那么最后arr=[1,2,3,4]

var arr = [1,2,3,4];

var res2 = arr.forEach(function(item,index,input){

return input[index] = item*2;

})

console.log(res2); //undefined

console.log(arr); //[2,4,6,8]

// 如果写return item*2,原数组也不会改变

forEach()不能使用continue, break;

map()速度最快

作为 Map 的forEach方法时,与数组的forEach方法类似,也可以实现遍历。

map.forEach(function(value, key, map) {

console.log("Key: %s, Value: %s", key, value);

});

forEach方法还可以接受第二个参数,用来绑定this。

第二组:for...in和for...of

em....

for...in的毛病真是太多了,直接别用了,他作为一个for循环,不能保证遍历的顺序是预期的,还只能访问索引还会把数组属性遍历,实在是很糟糕,唯一能替代for...of的场景就是循环普通对象(for...of不能循环没有遍历器(Iterator)的对象)

for...of可以循环具备 Iterator 接口的数据结构,如下

ES6中定义的原生具备 Iterator 接口的数据结构:

Array

Map

Set

String

TypedArray

函数的 arguments 对象

NodeList 对象

另外,通过数组&Map对象包含的三个遍历器生成函数,for...in 还可以循环索引和键值对

keys():返回键名的遍历器。

values():返回键值的遍历器。

entries():返回所有成员的遍历器。

详细的内容大家可以通过阮一峰大大的ES6入门了解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值