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