for of 与for in 的区别
1、遍历数组
在遍历数组时,for...in便利的是数组中每项元素对应的索引,二for..of 遍历时是每一项元素的值
// for in 遍历数组
const arr = [1,3,5]
for (const key in arr ){
console.log(key) //0 1 2 便利的是数组中的索引,并不是数组中的内容
}
//for in 遍历数组
for ( const key of arr){
console.log(key) //1 3 5 比哪里的是数组中的内容
}
2、遍历对象
在遍历对象时,for in 可以遍历对象,for of 不能遍历对象,只能遍历带有iterator接口的,例如Set,Map,String,Array,如果想要使用for..of遍历对象,可以使用Object.keys()方法
const obj = {name:'zs',age:18,sex:'男'}
//for..in 遍历对象
for(const key in obj){
console.log(key) // name age sex 遍历的结果是对象的键名
}
//for..of 遍历对象
for( const key of obj){
console.log(key) //报错 Uncaught TypeError: obj is not iterable
}
//Object.keys()方法
for(const key of Object.keys(obj)){
console.log(key)
}
3、for..in在遍历时不仅可以遍历数字键名,还可以遍历手动添加上的键,也可以遍历原型上的键,但是for..of只可以遍历原生的
// for in 遍历数组
const arr = [1,3,5];
//手动添加上的键
arr.set='red';
//在原型上添加
Array.prototype.name='hello '
for (const key in arr ){
console.log(key) //0 1 2 便利的是数组中的索引,并不是数组中的内容
}
//for in 遍历数组
for ( const key of arr){
console.log(key) //1 3 5 比哪里的是数组中的内容
}
4、for...of 和 for..in 都不能遍历Symbol类型的值,需要使用Objext.getOwnPropertySymbol()方法
5、for..in 是ES5的语法 for..of 是ES6的语法
6、for ..of for ...in遍历 set
7、for..of语句遍历可迭代对象定义要迭代的数据,for..in语句以任意谁徐迭代对象可枚举的属性