以下两条语句是否产生相同的输出?有理由选择其中一种而不是另一种吗?
if (key in object)
if (object.hasOwnProperty(key))
发布于 2012-11-30 03:15:53
in
还将检查继承的属性,而hasOwnProperty
并非如此。
发布于 2017-09-02 06:36:25
你得到了一些很棒的答案。我只是想提供一些东西,让你在迭代对象时省去检查"hasOwnProperty“的需要。
当创建一个对象时,人们通常会这样创建它:
const someMap = {}
// equivalent to: Object.create(Object.prototype)
// someMap.constructor will yield -> function Object() { [native code] }
现在,如果你想遍历"someMap“,你必须这样做:
const key
for(key in someMap ){
if (someMap.hasOwnProperty(key)) {
// Do something
}
}
我们这样做是为了避免对继承的属性进行迭代。
如果您打算创建一个仅用作“映射”(即键-值对)的简单对象,您可以这样做:
const newMap = Object.create(null);
// Now, newMap won't have prototype at all.
// newMap.constructor will yield -> undefined
所以现在可以安全地像这样迭代了:
for(key in cleanMap){
console.log(key + " -> " + newMap [key]);
// No need to add extra checks, as the object will always be clean
}
我学到了这个很棒的技巧here
发布于 2012-11-30 03:15:58
第一个版本更短(尤其是在变量被重命名的精简代码中)
a in b
vs
b.hasOwnProperty(a)
无论如何,正如@AndreMeinhold所说,它们并不总是产生相同的结果。
https://stackoverflow.com/questions/13632999
复制相似问题