В этом руководстве вы узнаете о перечисляемых свойствах объекта в 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()
определяет, является ли свойство перечисляемым. - Свойство, созданное с помощью простого присваивания или инициализатора свойства, является перечисляемым.