提问人: 提问时间:1/18/2009 最后编辑:Zanon 更新时间:1/9/2020 访问量:2067175
如何在 JavaScript 中检查对象是否有键?[复制]
How do I check if an object has a key in JavaScript? [duplicate]
问:
哪个是正确的做法?
if (myObj['key'] == undefined)
或
if (myObj['key'] == null)
或
if (myObj['key'])
答:
861赞
typeoneerror
1/18/2009
#1
应使用 hasOwnProperty
。例如:
myObj.hasOwnProperty('myKey');
注意:如果您使用的是 ESLint,上述情况可能会因违反 no-prototype-builtins 规则而出现错误,在这种情况下,解决方法如下:
Object.prototype.hasOwnProperty.call(myObj, 'myKey');
评论
3赞
Keval Malde
10/17/2013
我在firefox中发现hasOwnProperty的一个问题是它将返回继承的密钥的false。
301赞
huysentruitw
1/8/2014
@maldy:这难道不是重点吗?has**Own**Property
17赞
CJBrew
9/28/2016
ESLint 拒绝了这一点,因为Do not access Object.prototype method 'hasOwnProperty' from target object.
18赞
aug
3/3/2017
@CJBrew这可能是因为您有 eslint 标志 no-prototype-builtins,在这种情况下,您仍然可以通过执行以下操作来使用它{}.hasOwnProperty.call(object, "key")
24赞
JanithaR
5/16/2019
我将把这个留给任何想知道为什么 ESLint 抱怨 eslint.org/docs/rules/no-prototype-builtins 的人
3339赞
ForYourOwnGood
1/19/2009
#2
if ('key' in myObj)
反之亦然。
if (!('key' in myObj))
小心!运算符匹配所有对象键,包括对象原型链中的键。in
用于检查对象自己的键,并且仅当 可用时才会返回:myObj.hasOwnProperty('key')
true
key
myObj
myObj.hasOwnProperty('key')
除非您有使用运算符的特定原因,否则 using 将生成大多数代码所寻找的结果。in
myObj.hasOwnProperty('key')
评论
96赞
Nishant
12/29/2014
“in”之所以被认为不好,是因为它搜索了整个原型链。
6赞
pkdkk
9/3/2015
甚至更好 - if(myObj & myObj 中的 'key')
33赞
tadasajon
11/7/2015
搜索整个原型链有什么问题(除非您知道出于某种原因不想这样做)?
4赞
Gherman
12/26/2015
@reconbot,在普通的面向对象语言中,您经常调用父类中定义的方法。在 js 中做同样的事情有什么问题?这是否意味着 js 原型链本身是坏的?有些人可能真的会使用它们。
14赞
Usman Iqbal
8/16/2018
可以像这样做 Object.keys(ObjectInWhichYouwantTocheckTheKey).includes('keyInObject') :)干杯
上一个:如何检查对象是否有属性?
评论
!!myObj.key
true
false
const user = { name: "John", admin: false }; !!user.name
!!user.admin