Перечисляемые свойства объекта в JavaScript

В этом руководстве вы узнаете о перечисляемых свойствах объекта в JavaScript.

В JavaScript объект представляет собой неупорядоченный список пар ключ-значение. Ключ обычно представляет собой строку или символ. Значение может быть значением любого примитивного типа(строка, логическое значение, число, неопределенное значение или нуль), объектом или функцией.

В следующем примере создается новый объект с использованием синтаксиса литерала объекта:

const person = {
    firstName: 'John',
    lastName: 'Doe
};

Объект 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);
}

Выход:

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() определяет, является ли свойство перечисляемым.
  • Свойство, созданное с помощью простого присваивания или инициализатора свойства, является перечисляемым.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript