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