這篇“es6如何判斷對象有沒有某屬性”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“es6如何判斷對象有沒有某屬性”文章吧。
判斷方法:1、用“對象.屬性名 !== undefined”語句判斷,如果返回值為true,則對象上有某屬性;2、用“'屬性名' in 對象”語句,如果返回true則有某屬性;3、用“對象.hasOwnProperty('屬性名')”語句。
本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
es6判斷對象有沒有某屬性
方法1:點( . )+ undefined判斷
我們知道,通過點或者方括號可以獲取對象的屬性值,如果對象上不存在該屬性,則會返回 undefined。這種方式可以判斷指定對象的自有屬性和繼承屬性,如果對象自身沒有檢測的屬性,而原型鏈上有該屬性,則會返回原型鏈上的屬性值。
// 創建對象 let obj = { name: 'Scarlett', age: 37 } console.log(obj.name !== undefined) // true 自身屬性存在 console.log(obj.gender !== undefined) // false gender屬性不存在 // 在原型上添加一個可枚舉屬性 Object.prototype.nationality = 'America' // 在obj對象上添加一個不可枚舉屬性 Object.defineProperty(obj, 'occupation', { value: 'actress', enumerable: false })
簡單的,我們可以通過 Object.propertyName !== undefined 的返回值來判斷對象上是否含有某屬性。但有一種情況,即:屬性名存在,屬性值為 undefined 的情況下,就不能返回想要的結果。
// 新增一個值為undefined的屬性 obj.birthday = undefined console.log(obj.birthday !== undefined) // false
那么,我們可以使用 in 運算符來解決這個問題。
方法2:in 運算符
該方法可以判斷指定對象的自有屬性和繼承屬性中是否存在某屬性,如果存在則返回 true。 in 運算符也能檢測到原型鏈上的屬性。
'name' in obj // true 自身屬性存在 'occupation' in obj // true 不可枚舉屬性存在 'nationality' in obj // true 繼承屬性 'birthday' in obj // true 值為undefined的屬性
in 運算符的語法也很簡單,作用范圍和效果與點( . )或方括號( [ ] )相同,不同的是值為 undefined 的屬性也可以正常判斷。
以上這兩種方法的局限性就是:不能準確區分是自有屬性還是原型鏈上的屬性。如果檢測自身屬性是否存在時,就需要 Object.hasOwnProperty() 了。
方法3:Object.hasOwnProperty()
Object.hasOwnProperty() 用來判斷指定對象自身是否含有某個屬性(非繼承),返回布爾值。
obj.hasOwnProperty('name') // true 自身屬性 obj.hasOwnProperty('occupation') // true 不可枚舉屬性 obj.hasOwnProperty('birthday') // true obj.hasOwnProperty('nationality') // false 原型鏈上繼承的屬性
該方法會過濾掉那些繼承來的屬性,當檢測屬性為自有屬性時返回 true。
以上就是關于“es6如何判斷對象有沒有某屬性”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。