for...in遍历obj的key后,hasOwnProperty再判断key

读公司源码的时候看到了这一段

for (let key in style) {
        if (style.hasOwnProperty(key))

一开始我很纳闷,key是从style里面遍历出来的,为什么后面还要再判断obj里面是否有这个key呢?

特地上网搜了一下

参考:https://blog.csdn.net/u013970232/article/details/109530938

总结来说for...in遍历的不单只是obj一层的属性,还会往原型上继续挖。hasOwnProperty就是为了判断当前遍历到的key是否是在当前obj的身上,而不是原型上。

var arr = {
    a: "lv1",
    __proto__: {
        b: "lv2",
        __proto__: {
            c: "lv3",
            __proto__: {
                c: "lv4",
            }
        }
    }
}

for(const key in arr) {
    console.log(key, arr[key])
};

// a lv1
// b lv2
// c lv3
for(const key in arr) {
    if(arr.hasOwnProperty(key)) {
        console.log(key, arr[key])
    }
};

// a lv1

 

posted @ 2022-05-31 14:28  Jacky02  阅读(108)  评论(0编辑  收藏  举报