for...in 和for...of的区别

① for of 可以遍历数组里的每一项(for of 遍历数组的值);一般不建议for in 遍历数组(for in 是遍历循环数组的索引(键值))

var arr = ['haha','heihei'];
for(var item of arr){
	console.log(item);
}
打印结果:'haha','heihei'
----------------------------------
var arr = ['haha','heihei'];
for(var item in arr){
	console.log(item);
}
打印结果:0,1
----------------------------------
var arr1 = [
	{name: 'one',age: 11},
	{name: 'two',age:22},
	{name: 'three',age: 33},
]
for(var item of arr1){
	console.log(item.name,item.age);
}
打印结果:
'one' 11
'two' 22
'three' 33

② for of 不适合遍历对象

var obj = {
	0: 'one',
	1: 'two'
}
for(var key in obj) {
	console.log(key,obj[key])
}
打印结果:
0 'one',
1 'two'
-------------------------------
for(var item of obj) {
	console.log(item)
}
打印结果:报错

如果想让对象可以使用for of循环,那就先使用Object.keys()获取对象的key值集合后,再使用for of

let obj = {a: '1', b: '2', c: '3', d: '4'}
for (let o of Object.keys(obj)) {
    console.log(o) // a,b,c,d
}

或者使用内置的Object.values()方法获取对象的value值再使用for of

let obj = {a: '1', b: '2', c: '3', d: '4'}
for (let o of Object.values(obj)) {
    console.log(o) // 1,2,3,4
}

③ for in 会遍历自定义属性,for of不会;给数组添加一个自定义属性,然后赋值给数组,遍历,for in 会把自定义属性输出,for of 不会。

var arr = ['one', 'two', 'three'];
arr.name = 'andy';
for(var key in arr) {
	console.log(key+':'+arr[key]);
}
打印结果:
0:'one'
1:'two'
2:'three'
name:'andy'
--------------------------------
for(var item in arr) {
	console.log(item);
}
打印结果:
'one'
'two'
'three'

拓展:
for of 还可以循环一个字符串:

let str = 'love';
for(let o of str){
	console.log(o);
}
打印结果:
l,o,v,e

循环一个Map:

let iterable = new Map([['a',1],['b',2],['c',3]]);
for(let [key, value] of iterable){
	console.log(value)
}
打印结果:
1
2
3
---------------------------
for(let entity of iterable){
	console.log(entity)
}
打印结果:
[a,1]
[b,2]
[c,3]

循环一个set:

let iterable = new Set([1,1,2,2,3,3]);
for(let value of iterable){
	console.log(value)
}
打印结果:
1
2
3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值