1.for…in 与 for…of
for…of是ES6新引入的特性,修复了ES5引入的for…in的不足
for in遍历的是数组的索引(即下标),而for of遍历的是数组元素值。
-
遍历数组 可以用 for…in 和 for…of()
let arr = [5,4,3,3,4] for (const key in arr) { console.log(key); //打印出来的是0,1,2,3,4 即输出的是索引(下标) } for (const key of arr) { console.log(key); //打印出来的是5,4,3,3,4 即输出的是数组内的元素 }
-
遍历对象 只能用 for…in
let obj = { name:'张三', age:'18', sex:'男' } for (const key in obj) { console.log(key); //打印出来的是name,age,sex 即输出的是索引(键下标) console.log(obj[key]); //打印出来每个值 张三、18、男 }
-
如果将对象的属性或属性的值变成一个数组,还是可以用for…in的
let obj = {a: '5', b: '2', c: '3', d: '4'} for (let o of Object.keys(obj)) { console.log(o) // a,b,c,d } 或 let obj = {a: '5', b: '2', c: '3', d: '4'} for (let o of Object.values(obj)) { console.log(o) // 5,2,3,4 }
2.Object.keys(obj) 与 Object.values(obj)
将对象里的里的索引或值挑出来,变成一个数组
let obj = {
a: "5",
b: "6",
c: "3",
d: "4"
};
Object.keys(obj) //输出["a", "b", "c", "d"]
Object.values(obj) //输出["5", "6", "3", "4"]
3.for…of 循环一个字符串
let str = 'loveyou'
for (let i of str) {
console.log(i); // l,o,v,e,y,o,y
}
4. forEach 与 map
-
forEach
没有返回值,会对原来的值发生改变let arr = [5, 4, 3, 2, 4]; arr.forEach((value, index,arr ) => { console.log(value); //5,4,3,2,4打印值 console.log(index); //0,1,2,3,4打印下标(索引) console.log(arr); //原来的数组 });
var arr= [1,2,2,4,1]; var res = arr.forEach(function (item,index,input) { input[index] = item*10; }) console.log(res); //-->undefined; console.log(arr); //-->会对原来的数组产生改变 [10,20,20,20,40,10]
-
map
有返回值,可以return 出来。原来的没改变,return出来的是新的数组let arr = [5, 4, 3, 2, 4]; arr.map((value, index,arr ) => { console.log(value); //5,4,3,2,4打印值 console.log(index); //0,1,2,3,4打印下标(索引) console.log(arr); //原来的数组 });
var arr = [1, 2, 2, 4, 1]; var res = arr.map(function(item, index, input) { return item*10; }); console.log(res); //--> [10,20,20,20,40,10] return出来的是新的数组 console.log(arr); //--> [1,2,2,4,1] 原来的没改变