当前位置:  开发笔记 > 编程语言 > 正文

如何检查对象是否在JavaScript中有密钥?

如何解决《如何检查对象是否在JavaScript中有密钥?》经验,为你挑选了2个好方法。

哪个是正确的做法?

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

要么

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

要么

if (myObj['key'])

ForYourOwnGo.. 1848

尝试的JavaScript 运营商.

if ('key' in myObj)

和逆.

if (!('key' in myObj))

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

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

myObj.hasOwnProperty('key')

除非您有特定的理由使用in运算符,否则使用myObj.hasOwnProperty('key')生成大多数代码正在查找的结果.



1> ForYourOwnGo..:

尝试的JavaScript 运营商.

if ('key' in myObj)

和逆.

if (!('key' in myObj))

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

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

myObj.hasOwnProperty('key')

除非您有特定的理由使用in运算符,否则使用myObj.hasOwnProperty('key')生成大多数代码正在查找的结果.


'in'被认为不好的原因是因为它搜索整个原型链.
搜索整个原型链有什么问题(除非你知道你不想出于某种原因)?
可以做到这样Object.keys(ObjectInWhichYouwantTocheckTheKey).includes('keyInObject'):)欢呼

2> typeoneerror..:

你应该用hasOwnProperty.例如:

myObj.hasOwnProperty('myKey');


@maldy:这不是'拥有**自己的**财产'的全部意义吗?
@CJBrew可能是因为你有eslint标志[no-prototype-builtins](http://eslint.org/docs/rules/no-prototype-builtins)在这种情况下你仍然可以通过`{}来使用它.hasOwnProperty.call(object,"key")`
ESLint将此拒绝为"不要从目标对象访问Object.prototype方法'hasOwnProperty'
我要把这个留给任何想知道为什么ESLint抱怨https://eslint.org/docs/rules/no-prototype-builtins的人
我在firefox中使用hasOwnProperty找到的一个问题是它将为继承密钥返回false
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有