JavaScript 对象的可枚举属性
在本教程中,您将了解 JavaScript 对象的可枚举属性。
JavaScript 可枚举属性介绍
使用 for...in 循环或 Objects.keys() 方法迭代 JavaScript 对象的可枚举属性。
在 JavaScript ,对象是键值对的无序列表。键通常是一个字符串或一个符号。值可以是任何基本类型包括字符串、布尔值、数字、未定义或空值、对象或函数。
以下示例使用对象字面量语法创建一个新对象:
const person = {
firstName: 'John',
lastName: 'Doe
};person 对象有两个属性:firstName 和 lastName。
一个对象属性有几个内部属性,包括 value、writable、enumerable 和 configurable。更多关于对象属性的详细信息,请阅读对象属性。
当使用 for...in 循环或 Object.keys() 方法枚举对象的属性时,数据属性 enumerable 确定对象属性是否可访问。
默认情况下,所有通过简单赋值或通过属性初始化器创建的属性都是可枚举的。例如:
const person = {
firstName: 'John',
lastName: 'Doe'
};
person.age = 25;
for (const key in person) {
console.log(key);
}
输出:
firstName
lastName
age在这个例子中:
firstName和lastName是可枚举属性,因为它们是通过属性初始化器创建的。age属性也是可枚举的,因为它是通过简单的赋值创建的。
要修改属性的数据属性 enumerable,您可以使用 Object.defineProperty() 方法。例如:
const person = {
firstName: 'John',
lastName: 'Doe'
};
person.age = 25;
Object.defineProperty(person, 'ssn', {
enumerable: false,
value: '123-456-7890'
});
for (const key in person) {
console.log(key);
}
输出:
firstName
lastName
age在此示例中,创建 ssn 属性时将 enumerable 设置为 false,因此它不会出现在for...in 循环中。
ES6 提供 propertyIsEnumerable() 方法来确定属性是否可枚举。如果属性是可枚举的,它返回true,否则false。例如:
const person = {
firstName: 'John',
lastName: 'Doe'
};
person.age = 25;
Object.defineProperty(person, 'ssn', {
enumerable: false,
value: '123-456-7890'
});
console.log(person.propertyIsEnumerable('firstName')); // => true
console.log(person.propertyIsEnumerable('lastName')); // => true
console.log(person.propertyIsEnumerable('age')); // => true
console.log(person.propertyIsEnumerable('ssn')); // => false
结论
- 如果一个属性的数据属性
enumerable设置为true,则属性是可枚举的。obj.propertyIsEnumerable()确定属性是否可枚举。 - 通过简单赋值或属性初始化器创建的属性是可枚举的。