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关键字会查找整个对象的原型链.