JavaScript метод propertyIsEnumerable()
JavaScript ObjectОпределение и применение
JavaScript метод propertyIsEnumerable() возвращает логическое значение, которое определяет является ли указанное свойство или метод целевого объекта перечислимым. Метод не учитывает свойства унаследованные из цепочки прототипов.
Метод propertyIsEnumerable() возвращает значение true, если свойство или метод существует в объекте и является перечислимым, в обратном случае возвращает значение false (если объект не имеет свойства или метода с указанным именем, или если указанное свойство или метод не является перечислимым).
Под перечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение true, вследствие чего они будут перечислимы в циклах, например в цикле for...in. Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | 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" ); // falseJavaScript Object