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]。
-
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过滤掉。