3 Ways to Check If an Object Has a Property

栏目: IT技术 · 发布时间: 3年前

内容简介:Due to the dynamic nature of JavaScript, you might need to verify if a specific property exists in an object.In this post, you’ll read about the 3 common ways to check whether a property exists in an object.The JavaScript object has a special method

Due to the dynamic nature of JavaScript, you might need to verify if a specific property exists in an object.

In this post, you’ll read about the 3 common ways to check whether a property exists in an object.

1. hasOwnProperty() method

The JavaScript object has a special method object.hasOwnProperty(propName) that returns a boolean that indicates whether object has a property propName .

In the following example hasOwnProperty() determines the presence of properties:

const hero = {
  name: 'Batman'
};

hero.hasOwnProperty('name');     // => true
hero.hasOwnProperty('realName'); // => false

The property name exists in the object hero : thus hero.hasOwnProperty('name') returns true .

On the other side, realName property doesn’t exist in the object hero . As expected, hero.hasOwnProperty('realName') returns false — denoting a missing property.

The method name hasOwnProperty() suggests that it looks for properties in theown properties of the object. In simple words, the own properties are those defined directly upon the object.

Even if every JavaScript object has an inherited property toString (which is a method inherited from the object’s prototype), hasOwnProperty() doesn’t detect it as a property:

const hero = {
  name: 'Batman'
};

hero.toString; // => function() {...}

hero.hasOwnProperty('toString'); // => false

2. in operator

The in operator propName in object also determines whether propName property exists in object .

Let’s use in operator to detect the existence of a property:

const hero = {
  name: 'Batman'
};

'name' in hero;     // => true
'realName' in hero; // => false

'name' in hero evaluates as expected to true because hero has a property name .

However, hero doesn’t have a property named 'realName' . As a result, 'realName' in hero evaluates to false .

in operator has a short syntax, and I prefer it over hasOwnProperty() method in most of the cases.

Here’s the main difference between hasOwnProperty() method and in operator: the latter checks within the own properties, but also in the list of inherited properties.

That’s why, in contrast to hasOwnProperty() , the in operator detects that the inherited property toString exists inside hero object:

const hero = {
  name: 'Batman'
};

hero.toString; // => function() {...}

'toString' in hero; // => true

3. Comparing with undefined

If you access a non-existing property from an object, the result is undefined . Let’s try an example:

const hero = {
  name: 'Batman'
};

hero.name;     // => 'Batman'
hero.realName; // => undefined

hero.realName evaluates to undefined because realName property is missing.

Now you can see the idea: let’s compare against undefined to determine the existence of the property.

const hero = {
  name: 'Batman'
};

hero.name !== undefined;     // => true
hero.realName !== undefined; // => false

hero.name !== undefined evaluates to true , which shows the existence of property.

On the other side, hero.realName !== undefined is false , which indicates the realName is missing.

I’ve been comparing with undefined to detect the existence of property for quite some time. It’s a cheap and dirty approach.

Note that this approach can generate a false-negative. If the property exists, but has undefined value (case, however, rarely happening), comparing against undefined evaluates incorrectly to false :

const hero = {
  name: undefined
};

hero.name !== undefined; // => false

Even if the property name exists (but has undefined value), hero.name !== undefined evaluates to false : which incorrectly indicates a missing property.

4. Summary

There are mainly 3 ways to check if the property exists.

The first way is to invoke object.hasOwnProperty(propName) . The method returns true if the propName exists inside object , and false otherwise.

Note that hasOwnProperty() searches only within theown properties of the object.

The second approach makes use of propName in object operator. As well, the operator evaluates to true for an existing property, and false otherwise.

in operator looks for properties existence in bothown andinherited object properties.

Finally, you can simply use object.propName !== undefined and compare against undefined directly.

What’s your preferred way to check for properties existence?


以上所述就是小编给大家介绍的《3 Ways to Check If an Object Has a Property》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First Servlets & JSP(中文版)

Head First Servlets & JSP(中文版)

(美)巴萨姆、(美)塞若、(美)贝茨 / 苏钰函、林剑 / 中国电力出版社 / 2006-10 / 98.00元

《Head First Servlets·JSP》(中文版)结合SCWCD考试大纲讲述了关于如何编写servlets和JSP代码,如何使用JSP表达式语言,如何部署Web应用,如何开发定制标记,以及会话状态、包装器、过滤器、企业设计模式等方面的知识,以一种轻松、幽默而又形象的方式让你了解、掌握servlets和JSP,并将其运用到你的项目中去。《Head First Servlets·JSP》(中......一起来看看 《Head First Servlets & JSP(中文版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具