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