首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >if (对象中的键)或if(object.hasOwnProperty(键)

if (对象中的键)或if(object.hasOwnProperty(键)
EN

Stack Overflow用户
提问于 2012-11-30 03:13:53
回答 3查看 67.2K关注 0票数 194

以下两条语句是否产生相同的输出?有理由选择其中一种而不是另一种吗?

代码语言:javascript
复制
 if (key in object)

 if (object.hasOwnProperty(key))
EN

回答 3

Stack Overflow用户

发布于 2012-11-30 03:15:53

in还将检查继承的属性,而hasOwnProperty并非如此。

票数 32
EN

Stack Overflow用户

发布于 2017-09-02 06:36:25

你得到了一些很棒的答案。我只是想提供一些东西,让你在迭代对象时省去检查"hasOwnProperty“的需要。

当创建一个对象时,人们通常会这样创建它:

代码语言:javascript
复制
const someMap = {}
// equivalent to: Object.create(Object.prototype)
// someMap.constructor will yield -> function Object() { [native code] }

现在,如果你想遍历"someMap“,你必须这样做:

代码语言:javascript
复制
const key
for(key in someMap ){
 if (someMap.hasOwnProperty(key)) { 
   // Do something
 }
}

我们这样做是为了避免对继承的属性进行迭代。

如果您打算创建一个仅用作“映射”(即键-值对)的简单对象,您可以这样做:

代码语言:javascript
复制
const newMap = Object.create(null);
// Now, newMap won't have prototype at all.
// newMap.constructor will yield -> undefined

所以现在可以安全地像这样迭代了:

代码语言:javascript
复制
for(key in cleanMap){
 console.log(key + " -> " + newMap [key]);
 // No need to add extra checks, as the object will always be clean
}

我学到了这个很棒的技巧here

票数 10
EN

Stack Overflow用户

发布于 2012-11-30 03:15:58

第一个版本更短(尤其是在变量被重命名的精简代码中)

代码语言:javascript
复制
a in b

vs

代码语言:javascript
复制
b.hasOwnProperty(a)

无论如何,正如@AndreMeinhold所说,它们并不总是产生相同的结果。

票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13632999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档