JavaScript метод propertyIsEnumerable()

JavaScript Object

Определение и применение

JavaScript метод propertyIsEnumerable() возвращает логическое значение, которое определяет является ли указанное свойство или метод целевого объекта перечислимым. Метод не учитывает свойства унаследованные из цепочки прототипов.

Метод propertyIsEnumerable() возвращает значение true, если свойство или метод существует в объекте и является перечислимым, в обратном случае возвращает значение false (если объект не имеет свойства или метода с указанным именем, или если указанное свойство или метод не является перечислимым).

Под перечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение true, вследствие чего они будут перечислимы в циклах, например в цикле for...in. Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.

Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
propertyIsEnumerable()ДаДаДаДаДаДа

JavaScript синтаксис:

obj.propertyIsEnumerable( property );

Версия JavaScript

ECMAScript 3 (реализовано в JavaScript 1.0)

Значения параметров

ПараметрОписание
propertyСтроковое значение имени проверяемого свойства. Обязательное значение.

Пример использования

let obj = {  // инициализируем переменную, содержащую объект
    a: 1,
    b: 2,
    c: () => (this.a + this.b)
};
// определяем является ли указанное свойство или метод целевого объекта перечислимым
obj.propertyIsEnumerable( "a" ); // true
obj.propertyIsEnumerable( "b" ); // true
obj.propertyIsEnumerable( "c" ); // true
obj.propertyIsEnumerable( "d" ); // false (элемент не существует)
// выводим в цикле все перечисляемые свойства и методы
for( let key in obj ) {
    console.log( key );
}
// a
// b
// c
// изменяем в объекте существующее свойство, описывая его дескриптором
Object.defineProperty( obj, "c", {
    enumerable: false
})
// определяем является ли указанное свойство или метод целевого объекта перечислимым
obj.propertyIsEnumerable( "a" ); // true
obj.propertyIsEnumerable( "b" ); // true
obj.propertyIsEnumerable( "c" ); // false
// выводим в цикле все перечисляемые свойства и методы
for( let key in obj ) {
    console.log( key );
}
// a
// b

В этом примере мы инициализировали переменную, содержащую объект. С помощью метода propertyIsEnumerable() мы определяем являются ли указанные свойства или методы целевого объекта перечислимыми. По умолчанию свойства, которые определены пользователем, являются перечислимыми. После этого мы выводим в консоль, используя цикл все перечисляемые свойства и методы.

С использованием метода defineProperty() мы изменили существующее свойство объекта, описывая его дескриптором в котором указали, что метод объекта "c" неперечислим.

После этого мы снова с помощью метода propertyIsEnumerable() определяем являются ли указанные свойства или методы целевого объекта перечислимыми. Как вы можете заметить свойство "c" в этом случае не перечислимо и оно не будет выведено в консоль в цикле.

В следующем примере мы используем метод propertyIsEnumerable() на массиве:

let arr = ["a", "b", "c"];  // инициализируем переменную, содержащую массив
    
// определяем является ли указанный элемент перечислимым

arr.propertyIsEnumerable( 0 ); // true
arr.propertyIsEnumerable( 1 ); // true
arr.propertyIsEnumerable( 2 ); // true
arr.propertyIsEnumerable( 3 ); // false (элемент не существует)

arr.length; // 3

arr.propertyIsEnumerable( "length" ); // false
JavaScript Object