在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。
可枚举性决定了这个属性能否被for…in查找遍历到。
判断对象是否可枚举:
Object 对象的 propertyIsEnumerable() 方法可以判断此对象是否包含某个属性,并且这个属性是否可枚举。
1. 如果判断的属性存在于Object对象的原型内,不管它是否可枚举都会返回false。
2. 这个属性必须属于实例的,并且不属于原型.
3. 这个属性必须是可枚举的,也就是自定义的属性,可以通过for..in循环出来的。
注意:
1. js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等
hasOwnProperty(property)
判断对象是否有某个特定的实例属性。必须用字符串指定该属性
Object.defineProperty定义属性,enumerable描述是否可枚举
enumerable => false 标识不可枚举
enumerable => true 标识可枚举
语法:
Object.defineProperty(obj, prop, descriptor)
obj 待修改的对象
prop 带修改的属性名称
descriptor 待修改属性的相关描述
实例:
const obj = {}
Object.defineProperty(obj, 'name', {value: 'mike', enumerable: false})