for…in用于循环访问对象的所有可枚举属性.
可以用于数组、字符串、对象一起使用,
Map、Set不能使用
for(let prop in ['a','b','c']){
console.log(prop) //0、1、2
}
string类型循环的是index下标
for(let prop in 'congjiyong'){
console.log(prop) //0、1、2、3、4、5、6、7、8、9
}
循环的是对象的键,访问键值时使用:对象[键]
var abc = {a:1,b:2,c:3}
for(let prop in abc){
console.log(prop); //键 a、b、c
console.log(abc[prop]); //键值 1、2、3
}
for…of
用于迭代可迭代对象,迭代其值而不是属性。
可用于数组、字符串,Map、Set可以使用
对象不能用
for(let val of ['a','b','c']){
console.log(val) //a、b、c
}
string类型循环的是value值
for(let val of 'congjiyong'){
console.log(val) //c、o、n、g、j、i、y、o、n、g
}
对象类型不能用
> Uncaught TypeError: {(intermediate value)(intermediate value)(intermediate value)} is not iterable
Set、Map可以使用
for (let val of new Set(['a', 'b', 'a', 'd'])){
console.log(val); //Set不能用重复的值,所以为 a、b、d
}
iterator
因为对象不能使用for…of所以使用iterator,下面的固定格式
let obj = {
a: 1,
b: 2,
c: 3
}
obj[Symbol.iterator] = function () {
//迭代协议
let values = Object.values(obj) //1、Object.keys() 2、Object.values()
console.log(values)
let index = 0;
return {
next() {
if (index >= values.length) {
return {
done: true //结束循环,循环已经完成
}
}
else {
return {
value:values[index++],
done: false, //继续循环,循环未完成
}
}
}
}
}
for (let val of obj) {
console.log(val)
}
arr.forEach
forEach可以循环访问数组的值value和下标index
var arr = ['a','b','c']
arr.forEach((value,index,arr)=>{
console.log(value);
console.log(index)
})
const s5 = new Set(['a', 'b', 'c']);
s5.forEach(value => {
console.log(value);
})
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)