for in和for of

1 in遍历的结果是 key,而
of遍历的结果是 value

let a = [1,'qwe',{
  name : 'Frank',
  age : 26
}]
let b = {
  name : 'Jerry',
  age : 15
}
Object.prototype.arr = [1,2]
Object.prototype.it = 'it'
Object.prototype.obj = {o : 'o'}
Object.prototype.getIt = function(){
  return 
}
//创建一个对象,一个数组,再在原型上添加一个属性,用来验证两者的区别。

首先对两者使用of,对对象直接使用of会报错,所以要配合使用Object.keys()
,来获取对象的键组成的数组。

for(value of a){
  console.log(value);
}

for(value of Object.keys(b)){
  console.log(value+':'+b[value]);
}
a:
1
qwe
{ name: 'Frank', age: 26 }

b:
name:Jerry
age:15

由此可见,of不会遍历到原型上的属性,并且数组里的对象属性也会原样打印出来,而不是[Object Object]。

  1. of 不会遍历到原型上的属性,Object.keys()也不会获取到原型上的键。

    接下来测试in

for(index in a){
  console.log(a[index]);
}
for(key in b){
  console.log(key +':'+b[key]);
}

a:
1
qwe
{ name: 'Frank', age: 26 }
[1,2]
{ o: 'o' }
it
[Function]

b:
name:Jerry
age:15
arr:1,2
obj:[object Object]
it:it
getIt:function(){
  return it
}

有结果可得,in会遍历到原型上,并且对于数组和对象而言,不同的数据类型打印出来的结果也不尽相同。

原型上的属性打印结果:(有时间再补全)

in(原型上的属性)数组对象
数组[1,2]1,2
对象{o : ‘o’}[object Object]
函数[Function]function(){}

总结:

最核心的差别还是遍历的属性不同
in遍历的是 key
of遍历的是 value
其次是in会遍历到原型上,of不会。

of更适合遍历数组,in适合遍历对象,遍历到原型上可以使用hasOwnProperty过滤掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值