判断对象是否具有属性的 5 种方法

206 阅读1分钟

大图

在编程时,我们经常需要判断一个对象是否具有某种属性。在这里,我们将列出 5 种方法。

1. 在运算符中

如果指定的属性在指定的对象或其原型链中,则in运算符返回。true

用法:

image.png

但是in操作符有一个缺点,那就是:如果属性来自对象的原型,它仍然会返回true

image.png

2. Reflect.has() 方法

Reflect.has方法允许您检查属性是否在对象中。它就像in操作符一样工作。

用法:

image.png

3. hasOwnProperty() 方法

hasOwnProperty() 方法返回一个布尔值,指示对象是否具有指定的属性作为它自己的属性(而不是继承它)。

它可以正确地区分对象本身的属性和其原型的属性。

用法:

image.png

但是这种写法有个缺点,就是如果对象是由 创造的Object.create(null),那么就不能使用这种方法了。

image.png

4. Object.prototype.hasOwnProperty() 方法

解决前面的问题很简单,我们只需要使用Object.prototype.hasOwnProperty. 该方法是直接调用内置的效用函数,跳过原型链。

image.png

5. Object.hasOwn() 方法

由于前面的几种方式都不优雅,ES2022 有一个新的提议Object.hasOwn

如果指定的对象具有指定的属性作为其自己的Object.hasOwn() 属性,则静态方法返回。如果该属性被继承或不存在,则该方法返回。true**false

用法:

image.png

[1]参考链接

[2]参考链接