js 中判斷對象中是否有某個屬性 keys hasOwnProperty和in的區別

1.keys方法返回對象中所有屬性組成的數組,不包括原型鏈中的屬性.

let obj={x:2,y(){}}
    undefined
obj.__proto__={n:3,m(){}}
    {n: 3, m: ƒ}
Object.keys(obj)
    (2) ["x", "y"]

2.hasOwnProperty判斷對象中是否有某個屬性,只會遍歷當前對象屬性不會判斷原型中的屬性.

let obj={x:2,y(){}}
    undefined
obj.__proto__={n:3,m(){}}
    {n: 3, m: ƒ}
obj.hasOwnProperty('x')
    true
obj.hasOwnProperty('n')
    false

3.in 關鍵字和hasOwnProperty不同就是 in 關鍵字 會通過原型鏈一層層往上找直到找到該屬性或者到原型鏈最頂端.

let obj={x:2,y(){}}
    undefined
obj.__proto__={n:3,m(){}}
    {n: 3, m: ƒ}
"x" in obj
    true
"n" in obj
    true
"m" in obj
    true

總結Object.keys和hasOwnProperty只會查找當前對象,但是in關鍵字會查找整個對象的原型鏈.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章