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關鍵字會查找整個對象的原型鏈.