ES12 中 Object.hasOwn 方法的应用及剖析

在前端开发中,我们经常需要判断一个对象是否拥有某个属性。在 ES6 之前,我们通常使用 in 运算符或者 Object.prototype.hasOwnProperty 方法来实现。而在 ES6 中,新增了 Reflect.has 方法,可以更方便地判断一个对象是否拥有某个属性。而在 ES12 中,又新增了 Object.hasOwn 方法,用于判断一个对象自身是否拥有某个属性。

Object.hasOwn 方法的语法

Object.hasOwn 方法的语法如下:

------------------ -----

其中,obj 表示要判断的对象,prop 表示要判断的属性名称。

Object.hasOwn 方法的返回值

Object.hasOwn 方法返回一个布尔值,表示该对象自身是否拥有该属性。如果该对象自身拥有该属性,则返回 true,否则返回 false

Object.hasOwn 方法的应用

判断对象是否拥有某个属性

使用 Object.hasOwn 方法可以更方便地判断一个对象是否拥有某个属性。例如:

----- --- - -
  ----- -----
  ---- --
-

------------------------------ -------- -- ----
------------------------------ ---------- -- -----

避免出现属性名为 hasOwnProperty 的对象

在使用 Object.prototype.hasOwnProperty 方法时,如果对象本身拥有一个名为 hasOwnProperty 的属性,那么调用该方法会出现问题。而使用 Object.hasOwn 方法则可以避免这个问题。例如:

----- --- - -
  --------------- -----
  ----- -----
  ---- --
-

------------------------------ -------- -- ----
------------------------------ ------------------ -- ----

Object.hasOwn 方法的原理

Object.hasOwn 方法的实现原理与 Object.prototype.hasOwnProperty 方法类似,都是通过检查对象的 [[Prototype]] 链来判断该对象是否拥有某个属性。

具体来说,Object.hasOwn 方法会先将 obj 转换为对象,然后使用 Reflect.ownKeys 方法获取该对象自身的所有属性名(包括不可枚举的属性),最后判断 prop 是否在这些属性名中。如果在,则返回 true,否则返回 false

下面是 Object.hasOwn 方法的简化实现:

-------- ----------- ----- -
  ----- ---- - ----------------------------
  ------ -------------------
-

总结

Object.hasOwn 方法是 ES12 新增的一个方法,用于判断一个对象自身是否拥有某个属性。它的语法简单,返回值为布尔值,应用场景广泛。同时,它的实现原理也很简单,通过检查对象的 [[Prototype]] 链来判断该对象是否拥有某个属性。在实际开发中,我们可以根据需要选择使用 Object.hasOwn 方法、Object.prototype.hasOwnProperty 方法或者 Reflect.has 方法来判断对象是否拥有某个属性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/663c39e1d3423812e4a18060