JavaScript 对象的可枚举属性
在本教程中,您将了解 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()
确定属性是否可枚举。 - 通过简单赋值或属性初始化器创建的属性是可枚举的。