forEach、for-in、for-of
2018-12-27 本文已影响0人
云上笔记
1.forEach
遍历范围:数组;
回调函数提供三个参数:
当前元素item、当前索引index、当前操作的数组array;注意:不能用break跳出循环,不能用return返回。
var words = ["one", "two", "three", "four"];
words.forEach(function(item, index, array) {
console.log(item);
if (item === "two") {
// 当数组改变时,数组中元素对应的索引也会随之改变
words.shift();
}
// console.log(array);
});
// 输出结果为 one two four
2.for-in
for-in 获取的是键名,且键名是字符串,设计的初衷是针对键名为字符串的对象,对数组友好度不高
遍历范围:
- 数组
- 对象
- 字符串
var b = {name: "lili", age: 15};
for(let i in b){
console.log(i); // 此处i为对象中的键 name、age;如果遍历的是数组,则 i 为数组索引
}
3.for-of
for-of获取的是键值,如果要获取数组中的键名,可用Array.keys();
可以使用break、return等关键字处理循环;
遍历范围:
- 数组
- Set
- Map
- 类数组对象,如 arguments 对象、DOM NodeList 对象
- Generator 对象
- 字符串
var myarr = ['a', 'b', 'c', 'd'];
for (let a of myarr ) {
console.log(a); // a b c d
}
var b= {name: 'slili', age: 15};
// 注意:直接遍历对象会报错,可以转换后遍历
for (var key of Object.keys(b)) {
console.log(key + ": " + b[key]);
}
// 对比
let arr = [3, 5, 7, foo: "hello"];
for (let i in arr) {
console.log(i); // "0", "1", "2", "foo"
}
for (let i of arr) {
console.log(i); // "3", "5", "7"
}