11、循环语法比较及使用场景(for、forEach、for...in、for...of)

https://www.cnblogs.com/MuYunyun/p/6676027.html

主要有四种遍历的语法:

1、for循环
缺点是很麻烦。
2、forEach
回调函数参数分别是value,index,array
缺点在于无法中途跳出forEach循环,break和return命令都不行。
3、for…in
用于遍历所有的可枚举属性,功能类似于Object.keys(),但是遍历不到constructor、length这样的不可枚举属性。
缺点:
数组的键名为数字,但是for…in循环是以字符串作为键名"0",“1”,“2”
for…in循环主要是为遍历对象而设计的,不适用于遍历数组。
4、for…of
for…of是ES6新增的遍历方式,它提供了统一的遍历机制。所有实现了[Symbol.iterator]接口的对象都可以被遍历。for…of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、Generator 对象,以及字符串
优点:1、用法简洁 2、可以和break,continue,return配合使用 3、提供了遍历所有数据结构的统一操作接口。
三个遍历器对象:
entries() 返回一个遍历器对象,用来遍历[键名, 键值]组成的数组。对于数组,键名就是索引值;对于 Set,键名与键值相同。Map 结构的 Iterator 接口,默认就是调用entries方法。
keys() 返回一个遍历器对象,用来遍历所有的键名。
values() 返回一个遍历器对象,用来遍历所有的键值。

// demo
let arr = ['a', 'b', 'c'];
for (let pair of arr.entries()) {
  console.log(pair);
}
// [0, 'a']
// [1, 'b']
// [2, 'c']

并不是所有类似数组的对象都具有 Iterator 接口,一个简便的解决方法,就是使用Array.from方法将其转为数组。

let arrayLike = { length: 2, 0: 'a', 1: 'b' };

// 报错
for (let x of arrayLike) {
  console.log(x);
}

// 正确
for (let x of Array.from(arrayLike)) {
  console.log(x);  // 'a' // 'b'
}

普通的对象必须要部署接口后才能使用,用for…in可以,用for…of必须加上Object.keys(obj)方法。

let es6 = {
  edition: 6,
  committee: "TC39",
  standard: "ECMA-262"
};

for (let e in es6) {
  console.log(e);
}
// edition
// committee
// standard

for (let e of es6) {
  console.log(e);
}
// TypeError: es6 is not iterable

解决方法:

for (var key of Object.keys(someObject)) {
  console.log(key + ': ' + someObject[key]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值