- Objective:
- Breadcrumb:
# 概念阐释
## 语义
在JavaScript中,可枚举(enumerable)和不可枚举(non-enumerable)是用来描述对象属性的特性之一。可枚举属性是可以通过对象属性遍历方法访问到属性。不可枚举属性不能,这些属性不会出现在遍历结果中。
# 实例
**可枚举:**
- [[js objects forin loop 遍历获取对象属性]]
- [[js objects 标准内置对象 Object.keys()]]
**不可枚举:**
```js
// 创建一个空对象
const obj = {};
// 使用 Object.defineProperty 方法定义一个不可枚举的属性
Object.defineProperty(obj, 'myProperty', {
value: 42,
enumerable: false
});
// 使用 Object.keys 方法来获取对象的所有可枚举属性
const enumerableProps = Object.keys(obj);
console.log(enumerableProps); // 输出:[],因为没有可枚举的属性
// 使用 Reflect.ownKeys 方法来获取对象的所有属性,包括不可枚举属性
const allProps = Reflect.ownKeys(obj);
console.log(allProps); // 输出:['myProperty']
```
# 相关内容
**为什么中文叫做枚举?**
"枚举"一词源自于古代军事用语,最初用来指代对士兵、武器或其他物品进行清点和列举。在计算机科学中,这个词被引申为指代对一组项目进行逐个检查或列举的过程。在JavaScript中,可枚举属性是指可以被逐个列举出来的对象属性。
# 参考资料
- [属性的可枚举性和所有权](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties#traversing_object_properties)