JavaScript中的in 、hasOwnProperty、propertyIsEnumerable

在工作中,经常遇到需要确定属性是否存在于、属于某个对象
此时可以选择使用in、hasOwnPropertyOf、propertyIsEnumerable
而这三种方法的区别是怎样的呢?

// 初始化一些数据
var o = {o: 'o'}
var a = Object.create(o)
a.a = 'a'
Object.defineProperty(a, 'b', {
    value: 'b'
})
// 此时我们拥有一个对象a,在它身上可以获取到三个属性,分别是来自原型的“o“、来自自身并且可枚举的“a”、来自自身并且不可枚举的“b”  


// in:包括自有属性(可枚举、不可枚举)、继承来的属性
'o' in a //true
'a' in a //true
'b' in a //true


// hasOwnPropertyOf:包括自有属性(可枚举、不可枚举)
a.hasOwnPropertyOf('o') //false
a.hasOwnPropertyOf('a') //true
a.hasOwnPropertyOf('b') //true


// propertyIsEnumerable:包括自有属性(可枚举)、继承来的属性
a.propertyIsEnumerable('o') //false
a.propertyIsEnumerable('a') //true
a.propertyIsEnumerable('b') //false

你可能感兴趣的:(JavaScript中的in 、hasOwnProperty、propertyIsEnumerable)