如何在 JavaScript 中检查对象是否具有键?

IT技术 javascript object
2021-02-04 04:03:10

哪个是正确的做法?

if (myObj['key'] == undefined)

或者

if (myObj['key'] == null)

或者

if (myObj['key'])
2个回答

operator 中尝试JavaScript

if ('key' in myObj)

而相反。

if (!('key' in myObj))

当心!in运营商匹配所有对象键,包括那些在对象的原型链。

使用myObj.hasOwnProperty('key')检查对象的自己的钥匙,将只返回true,如果key可以用myObj直接:

myObj.hasOwnProperty('key')

除非您有使用in运算符的特定原因,否则usingmyObj.hasOwnProperty('key')会产生大多数代码正在寻找的结果。

@reconbot,在普通的面向对象语言中,您经常调用父类中定义的方法。在 js 中做同样的事情有什么错?这是否意味着 js 原型链本身不好?有些人可能真的会使用它们。
2021-03-14 04:03:10
搜索整个原型链有什么问题(除非您知道出于某种原因不想这样做)?
2021-03-21 04:03:10
'in' 被认为不好的原因是它搜索整个原型链。
2021-03-28 04:03:10
可以这样做 Object.keys(ObjectInWhichYouwantTocheckTheKey).includes('keyInObject') :) 欢呼
2021-04-01 04:03:10
甚至更好 - if(myObj && 'key' in myObj)
2021-04-05 04:03:10

你应该使用hasOwnProperty. 例如:

myObj.hasOwnProperty('myKey');

注意:如果您使用的是 ESLint,上述内容可能会因为您违反no-prototype-builtins规则而出现错误,在这种情况下,解决方法如下:

Object.prototype.hasOwnProperty.call(myObj, 'myKey');
ESLint 拒绝了这一点,因为 Do not access Object.prototype method 'hasOwnProperty' from target object.
2021-03-15 04:03:10
我在 firefox 中使用 hasOwnProperty 发现的一个问题是它会为继承的键返回 false
2021-03-23 04:03:10
@CJBrew 这可能是因为你有 eslint 标志no-prototype- builtins在这种情况下你仍然可以通过这样做来使用它{}.hasOwnProperty.call(object, "key")
2021-03-25 04:03:10
我会把这个留在这里给那些想知道为什么 ESLint 抱怨eslint.org/docs/rules/no-prototype-builtins 的人
2021-03-27 04:03:10
@maldy:这不是重点has**Own**Property吗?
2021-04-03 04:03:10