遍历数组
for...of遍历值
- 用途:遍历可迭代对象(Iterable)的值
- 适用对象:数组、字符串、Map、Set、arguments等实现了Symbol.iterator接口的对象
- 遍历内容:对象的值(value)
var arr = ["a","b","c"]
for(let item of arr){
cpnsole.log(item)
}
map、forEach、reducer
遍历对象
for...in循环遍历对象自身和继承的可枚举属性(不含Symnol属性)
- 用途:遍历对象的可枚举属性(包括自身属性和原型链上的属性)
- 适用对象:普通对象(Object)
- 遍历内容:对象的键(key),即属性名
var obj = {a:1,b:2,c:3}
for(var i in obj){
console.log('键名:',i);
console.log('键值:',obj[i])
}
// 键名: a
// 键值: 1
...
Object.keys()返回一个数组,包括对象自身的所有可枚举属性的键名
for...in 和for...of的区别
使用场景不同
- for...in 适用于可枚举属性,例如对象、数组、字符串
- for...of 适用于可迭代对象,例如Array、String、Map、Set、函数的arguments对象、nodeList对象
遍历范围不一样
- for...in 能遍历自身的可枚举属性和原型上的可枚举属性
- for...of 一般只能遍历自身的可枚举属性(具体和迭代器内部的实现有关)
得到的结果不一样
- for...in 得到的是key(并且不能保证顺序)
- for...of 得到的是value(具体和迭代器内部的实现有关)