浏览一些我们的应用程序代码,我发现了以下内容:
for (prop in aBunchOfData.properties) {
if (!aBunchOfData.properties.hasOwnProperty(prop)) continue;
doABunchOfProcessing(aBunchOfData.properties[prop]);
}
据我了解,for ... in
仅循环遍历对象的“自己”属性。 这里的hasOwnProperty
支票能有所作为吗?如果是这样,在什么条件下?
谢谢!
答案 0 :(得分:3)
不。 in
运算符将提升原型链,而.hasOwnProperty()
则不会。使用该if
语句可确保仅包含对象本身的属性。为了避免使用检查,可以使用Object.keys()
,它不会提升原型链。
答案 1 :(得分:0)
这很有用,因为for in
循环将检查所有对象属性,包括原型道具。这效率低下,因此检查hasOwnProperty
会将循环限制为该对象唯一的属性。循环的首选方式是:
Object.keys(myObject).forEach(()=> // do stuff)
map
在这里也可以用作迭代器。