JavaScript 对象可枚举属性基础指南

摘要: 本教程将介绍 JavaScript 对象的可枚举属性。

JavaScript 可枚举属性简介

可枚举属性可以使用 for...in 循环或 Objects.keys() 方法进行迭代。

在 JavaScript 中,对象 是一个无序的键值对列表。键通常是 字符串符号。值可以是任何基本类型的值(字符串、布尔值、数字、未定义或空值)、对象或 函数

以下示例使用 对象字面量语法 创建一个新对象

const person = {
    firstName: 'John',
    lastName: 'Doe
};Code language: PHP (php)

person 对象有两个属性:firstNamelastName

对象属性具有多个内部属性,包括 valuewritableenumerableconfigurable。有关更多详细信息,请参见 对象属性

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

在此示例中

  • firstNamelastName 是可枚举属性,因为它们是通过属性初始化器创建的。
  • 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() 用于确定属性是否可枚举。
  • 通过简单赋值或属性初始化器创建的属性是可枚举的。
本教程对您有帮助吗?