for in
可以用在可枚举数据 => 对象
可枚举数据
属性描述符 => enumerable
示例
1、可以用来遍历对象 => 属性名
如:
上面有个enumerable属性,就是它来控制属性是否可枚举
同时也会枚举对象原型上的可枚举的属性名
let obj = {
name: "lihegui",
gender: "nan",
age: "22"
}
for (let item in obj) {
console.log(item);
}
// name
// gender
// age
2、可以用来遍历数组 => 数组下标
let arr = ["lihegui", "fxp", "shuzu"]
for (let item in arr) {
console.log(item);
}
// 0
// 1
// 2
3、遍历字符串 => 字符所处的位置下标
let str = "lihegui"
for (let item in str) {
console.log(item);
}
// 0
// 1
// 2
// 3
// 4
// 5
// 6
for of
可以用在可迭代数据 => 数组、字符串、Map、Set
for in 遍历map set会是undefined
可迭代数据
只要一个数据实现Iterator接口,这个数据就会有一个叫做[Symbol.iterator]的属性
例如数组有个Synbol.iterator的属性
示例
1、遍历数组 => 数组每一项
let arr = ["lihegui", ["and", "lihegui"], "fxp", "shuzu"]
for (let item of arr) {
console.log(item);
}
// lihegui
// ['and','lihegui']
// fxp
// shuzu
2、遍历字符串 => 字符每一项
let str = "lihegui"
for (let item of str) {
console.log(item);
}
// l
// i
// h
// e
// g
// u
// i
3、遍历map => 每一项
let map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three']
])
for (let item of map) {
console.log(item);
}
// [ 1, 'one' ]
// [ 2, 'two' ]
// [ 3, 'three' ]
4、遍历set => 每一项
let set = new Set(["lihegui", "fxp"])
for (let item of set) {
console.log(item);
}
// lihegui
// fxp