摘要: 本教程将介绍 JavaScript 对象的可枚举属性。
JavaScript 可枚举属性简介
可枚举属性可以使用 for...in
循环或 Objects.keys()
方法进行迭代。
在 JavaScript 中,对象 是一个无序的键值对列表。键通常是 字符串 或 符号。值可以是任何基本类型的值(字符串、布尔值、数字、未定义或空值)、对象或 函数。
以下示例使用 对象字面量语法 创建一个新对象
const person = {
firstName: 'John',
lastName: 'Doe
};
Code language: PHP (php)
person
对象有两个属性:firstName
和 lastName
。
对象属性具有多个内部属性,包括 value
、writable
、enumerable
和 configurable
。有关更多详细信息,请参见 对象属性。
enumerable
属性决定使用 for...in
循环或 Object.keys()
方法枚举对象属性时,属性是否可访问。
默认情况下,通过简单赋值或属性初始化器创建的所有属性都是可枚举的。例如
const person = {
firstName: 'John',
lastName: 'Doe'
};
person.age = 25;
for (const key in person) {
console.log(key);
}
Code language: JavaScript (javascript)
输出
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);
}
Code language: JavaScript (javascript)
输出
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
Code language: JavaScript (javascript)
总结
- 如果属性的
enumerable
属性设置为true
,则该属性是可枚举的。obj.propertyIsEnumerable()
用于确定属性是否可枚举。 - 通过简单赋值或属性初始化器创建的属性是可枚举的。
本教程对您有帮助吗?