【问题标题】:How do I check if an object has a key in JavaScript? [duplicate]如何检查对象是否在 JavaScript 中有键? [复制]
【发布时间】:2010-10-02 02:30:32
【问题描述】:

什么是正确的做法?

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

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

if (myObj['key'])

【问题讨论】:

  • 你可以试试!!myObj.key,它返回true(如果有)和false(如果没有)。
  • @Anh-ThiDINH 小心,这不适用于布尔值。 const user = { name: "John", admin: false }; !!user.name 将返回 true。但是!!user.admin 将返回 false,即使 'admin' 密钥存在

标签: javascript object


【解决方案1】:

您应该使用hasOwnProperty。例如:

myObj.hasOwnProperty('myKey');

注意:如果您使用的是 ESLint,上面可能会给您一个违反 no-prototype-builtins 规则的错误,在这种情况下,解决方法如下:

Object.prototype.hasOwnProperty.call(myObj, 'myKey');

【讨论】:

  • 我在 Firefox 中使用 hasOwnProperty 发现的一个问题是它会为继承的密钥返回 false
  • @maldy:这不是has**Own**Property 的重点吗?
  • ESLint 拒绝此为Do not access Object.prototype method 'hasOwnProperty' from target object.
  • @CJBrew 可能是因为你有 eslint 标志 no-prototype-builtins 在这种情况下你仍然可以通过 {}.hasOwnProperty.call(object, "key") 来使用它
  • 我会把这个留给任何想知道为什么 ESLint 会抱怨 eslint.org/docs/rules/no-prototype-builtins 的人
【解决方案2】:

试试JavaScript in operator

if ('key' in myObj)

反之亦然。

if (!('key' in myObj))

小心!in 运算符匹配所有对象键,包括对象原型链中的键。

使用myObj.hasOwnProperty('key') 来检查对象自己的键,如果key 直接在myObj 上可用,则只会返回true

myObj.hasOwnProperty('key')

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

【讨论】:

  • “in”被认为不好的原因是它搜索了整个原型链。
  • 甚至更好 - if(myObj && 'key' in myObj)
  • 搜索整个原型链有什么问题(除非您知道出于某种原因不想这样做)?
  • @reconbot,在普通的 OO 语言中,您经常调用父类中定义的方法。在 js 中做同样的事情有什么问题?这是否意味着 js 原型链本身不好?有些人可能会实际使用它们。
  • 可以这样做 Object.keys(ObjectInWhichYouwantTocheckTheKey).includes('keyInObject') :) 干杯
猜你喜欢
  • 2018-03-08
  • 2017-12-10
  • 2012-06-05
  • 1970-01-01
  • 2017-01-09
  • 2016-10-29
  • 2019-04-14
  • 2020-06-18
  • 2021-11-25
相关资源
最近更新 更多