for in 可以遍历对象原型上的属性吗 ?

382 阅读1分钟

for in 是芸芸数组方法中的一员 , 这篇简单聊一聊 for in 小朋友的故事

for in 语法

for in ( let key in obj )  {   
     console.log(obj[key])   
}

for in 可以遍历数组和对象

☆ 遍历对象

const object = { a:1 , b:2 }
for in ( let key in object )  {   
     console.log(key)   
}
// 打印输出 1,2

for in 遍历对象时 , key为对象的键 , obj[ key ]为遍历每项的值

☆ 遍历数组

const array = [ 'a' , 'b' ]
for in ( let key in array )  {   
     console.log(key)   
}
// 打印输出 1,2
  • for in 遍历数组时 , key为数组下标 , obj[ key ]为遍历每项的值
  • 使用 for...in 循环遍历数组时, key 变量将会是字符串类型,而不是数字类型。因此,在访问数组元素时,需要将 key 转换为数字类型。

需要注意的是, for...in 循环不仅会遍历数组的元素,还会遍历数组的原型链上的属性

☆ 遍历对象原型

  • for in同样可以遍历对象的原型
  • 我们可以尝试在对象原型上增加属性 , 然后通过for in来进行遍历访问
// 1.定义一个对象有a , b属性
const object = { a:1 , b:2 }
// 2.在对象原型上增加属性
obj.__proto__ = { c:3 , d:4 }
// 3.for in 进行遍历
for(let key in obj) {
    console.log(key)
}
// 打印结果为 a , b , c , d

QQ图片20230804205753.gif

☆ 只遍历对象 , 不遍历原型

如果我们只想访问对象本身的属性 , 为了避免遍历到不必要的属性,可以使用hasOwnProperty()方法来过滤只属于数组自身的属性

for(let key in obj) {
    if(obj.hasOwnProperty(key)){
        console.log(key)
    }
}

完结撒花✿✿ヽ(°▽°)ノ✿