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

306 阅读1分钟

1、in Operator

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

截屏2022-06-23 11.54.16.png

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

截屏2022-06-23 13.05.08.png

2、Reflect.has()方法

Reflect.has方法允许我们检查属性是否在对象中。它像in Operator一样作为函数工作。

截屏2022-06-23 13.04.17.png

3、hasOwnProperty()方法

hasOwnProperty()方法返回一个布尔值,指示对象是否具有指定的属性作为它自己的属性(而不是继承它)。它可以正确地区分对象的属性和其原型的属性。

截屏2022-06-23 13.10.15.png

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

截屏2022-06-23 13.13.49.png

4、Object.prototype.hasOwnProperty()方法

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

截屏2022-06-23 13.21.15.png

5、Object.hasOwn()方法

由于前面的几种方式都不优雅,ES2022有一个新的提议:Object.hasOwn 如果指定的对象具有指定的属性作为其自己的属性,则Object.hasOwn()静态方法返回true。如果属性被继承或不存在,则该方法返回false

截屏2022-06-23 13.26.20.png