1、in Operator
如果指定屬性在指定對(duì)象或其原型鏈中,則 in Operator 返回 true。
用法:
但是 in Operator有個(gè)缺點(diǎn),那就是:如果屬性來自對(duì)象得原型,它仍然會(huì)返回 true。
2、Reflect.has() 方法
Reflect.has 方法允許我們檢查屬性是否在對(duì)象中。它像 in Operator 一樣作為函數(shù)工作。
用法:
3、 hasOwnProperty() 方法
hasOwnProperty() 方法返回一個(gè)布爾值,指示對(duì)象是否具有指定得屬性作為它自己得屬性(而不是繼承它)。
它可以正確地區(qū)分對(duì)象本身得屬性和其原型得屬性。
用法:
但是這種寫法有個(gè)缺點(diǎn),就是如果對(duì)象是用Object.create(null)創(chuàng)建得話,那么就不能用這個(gè)方法了。
4、Object.prototype.hasOwnProperty() 方法
解決前面得問題很簡單,我們只需要使用Object.prototype.hasOwnProperty。該方法是直接調(diào)用內(nèi)置得有效用函數(shù),跳過原型鏈。
5、Object.hasOwn() 方法
由于前面得幾種方式都不優(yōu)雅,ES2022有一個(gè)新得提議:Object.hasOwn
如果指定得對(duì)象具有指定得屬性作為其自己得屬性,則 Object.hasOwn() 靜態(tài)方法返回 true。如果屬性被繼承或不存在,則該方法返回 false。
用法: