hasOwnproperty 判断自身属性是否存在
var a = {a:'a',b:'b'}
a.hasOwnProperty('c') // false
a.hasOwnProperty('b') // true
JavaScript 并没有保护 hasOwnProperty 这个属性名,因此,当某个对象可能自有一个占用该属性名的属性是,就需要使用外部的 hasOwnProperty 获得正确的结果:
var a = {a:'a',b:'b'}
Object.prototype.hasOwnProperty.call(a,'c') // false
Object.prototype.hasOwnProperty.call(a,'b') // true
Object.keys遍历对象所有可枚举属性 不包括原型链上的属性
var a = {a:'1',b:'2'}
Object.keys(a) // ['a','b']
主要场景是for…in遍历对象的时候 会遍历原型链的属性,比较耗性能,所以在之遍历本身属性的时候使用 Object.keys或者Object.prototype.hasOwnProperty.call()限制一下