3种方法判断JS对象是否具有某一属性
作者:admin 时间:2022-5-11 15:33:5 浏览:在程序编写中,当你要使用某个属性时,你可能要首先判断该属性是否存在,以免抛出错误。在本文中,将介绍3种方法,判断JS对象是否具有某一属性。
1、hasOwnProperty()方法
每个 JavaScript 对象都有一个特殊的方法 object.hasOwnProperty('myProp')
,它返回一个布尔值,指示是否object
有一个属性myProp
。
在以下示例中,hasOwnProperty()
确定属性name
和realName
的存在:
const webkaka = {
name: '卡卡网'
};
webkaka.hasOwnProperty('name'); // => true
webkaka.hasOwnProperty('realName'); // => false
webkaka.hasOwnProperty('name')
返回true
,因为属性name
存在于webkaka
对象中。
另一方面,webkaka
没有realName
属性,因此webkaka.hasOwnProperty('realName')
返回false
。
方法名称hasOwnProperty()
表明它查看对象自身的属性,自己的属性是直接在对象上定义的属性,而没有检测到继承的属性:
const webkaka = {
name: '卡卡网'
};
webkaka.toString; // => function() {...}
webkaka.hasOwnProperty('toString'); // => false
2、in运算符
'myProp' in object
还确定myProp
属性是否存在于object
。
我们可以使用in
运算符来检测webkaka
对象中的name
和realName
的存在:
const webkaka = {
name: '卡卡网'
};
'name' in webkaka; // => true
'realName' in webkaka; // => false
'name' in webkaka
为true
,因为webkaka
有一个属性name
。
另一方面,'realName' in webkaka
结果为false
,因为webkaka
没有名为'realName
'的属性。
in
运算符的语法很短,我更喜欢它而不是hasOwnProperty()
方法。
hasOwnProperty()
方法和in
操作符之间的主要区别在于后者能检查对象自身和继承的属性:
const webkaka = {
name: '卡卡网'
};
webkaka.toString; // => function() {...}
'toString' in webkaka; // => true
webkaka.hasOwnProperty('toString'); // => false
3、与undefined比较
从对象访问不存在的属性会导致undefined
:
const webkaka = {
name: '卡卡网'
};
webkaka.name; // => '卡卡网'
webkaka.realName; // => undefined
webkaka.realName
为undefined
是因为webkaka
缺少realName
属性。
现在可以看到一个思路:可以通过比较undefined
来判断属性的存在:
const webkaka = {
name: '卡卡网'
};
webkaka.name !== undefined; // => true
webkaka.realName !== undefined; // => false
webkaka.name !== undefined
结果为true
,这表明属性是存在的。
另一方面,webkaka.realName !== undefined
是 false
,表示realName
属性是不存在的。
如果某属性存在,但具有undefined
(这种情况很少发生),则比较undefined
就会错误地认为为false
:
const webkaka = {
name: undefined
};
webkaka.name !== undefined; // => false
即使属性name
存在(但有undefined
值),webkaka.name !== undefined
判断为false
,错误地认为缺少name
属性。
4、总结
本文介绍了3种方法来检查属性是否存在。
第一种方法是调用 object.hasOwnProperty(propName)
,如果propName
存在于object
对象中,则该方法返回true
,否则返回false
。
hasOwnProperty()
仅在对象自身的属性内搜索。
第二种方法使用propName in object
运算符,存在属性则运算符判断结果为true
,否则为false
。
in
运算符在自己的和继承的属性中查找属性是否存在。
最后,可以直接使用object.propName !== undefined
和undefined
比较,但这种方法有误判断的可能。
您可能对以下文章也感兴趣
- 站长推荐