一般for in遍历的是对象或者数组的索引(键名),而for of遍历的是数组的元素值,不包括数组的原型
-
for of
-
for of适合遍历循环数组/字符串/map/set等拥有迭代器对象的集合,但是不能遍历普通的对象,因为没有迭代器,会报错
obj is not iterablelet arr=["a","b","c"]; let obj={ name:"张三", age:18, job:"IT" }; for (let value of arr){ console.log(value);//a b c } //for of不能遍历普通的对象,因为没有迭代器,会报错 for (let value of obj){ console.log(value)//obj is not iterable } -
for of遍历不能获取index索引值,可以先将数组转成map结构,再用for of遍历这个map,就可以获取索引index,值valuelet arr=["a","b","c"]; for (let [key,value] of new Map(arr.map((item,index)=> [index,item]))){ console.log(key,value) } for of与forEach不同的是,它可以正确的响应break,continue,return
-
for of适合遍历循环数组/字符串/map/set等拥有迭代器对象的集合,但是不能遍历普通的对象,因为没有迭代器,会报错
-
for in有三个缺点,所以for in不适合遍历数组,适合遍历对象- 顺序可能不会按照实际数组的内部顺序
for in会遍历数组所有的可枚举性,包括原型index索引值是字符串的数字,不能直接进行集合运算
