Сводка
Метод propertyIsEnumerable()
возвращает логическое значение, указывающее, является ли указанное свойство перечисляемым.
Синтаксис
obj.propertyIsEnumerable(prop)
Параметры
prop
- Имя проверяемого свойства.
Описание
Каждый объект имеет метод propertyIsEnumerable
. Этот метод может определять, является ли указанное свойство в объекте перечисляемым в цикле for...in
, за исключением свойств, унаследованных из цепочки прототипов. Если объект не имеет указанного свойства, метод вернёт false
.
Примеры
Пример: базовое использование propertyIsEnumerable
Следующий пример показывает использование метода propertyIsEnumerable
на объектах и массивах:
var o = {}; var a = []; o.prop = 'перечисляемое'; a[0] = 'перечисляемое'; o.propertyIsEnumerable('prop'); // вернёт true a.propertyIsEnumerable(0); // вернёт true
Пример: определённые пользователем и встроенные объекты
Следующий пример демонстрирует перечисляемость свойств, определённых пользователем и встроенных свойств:
var a = ['перечисляемое']; a.propertyIsEnumerable(0); // вернёт true a.propertyIsEnumerable('length'); // вернёт false Math.propertyIsEnumerable('random'); // вернёт false this.propertyIsEnumerable('Math'); // вернёт false
Пример: собственные и унаследованные свойства
var a = []; a.propertyIsEnumerable('constructor'); // вернёт false function firstConstructor() { this.property = 'не перечисляемое'; } firstConstructor.prototype.firstMethod = function() {}; function secondConstructor() { this.method = function method() { return 'перечисляемый'; }; } secondConstructor.prototype = new firstConstructor; secondConstructor.prototype.constructor = secondConstructor; var o = new secondConstructor(); o.arbitraryProperty = 'перечисляемое'; o.propertyIsEnumerable('arbitraryProperty'); // вернёт true o.propertyIsEnumerable('method'); // вернёт true o.propertyIsEnumerable('property'); // вернёт false o.property = 'перечисляемое'; o.propertyIsEnumerable('property'); // вернёт true // Эти вызовы вернут false, поскольку все свойства находятся в прототипе, // который метод propertyIsEnumerable не просматривает (даже несмотря на то, // что последние два свойства перечисляются через цикл for...in) o.propertyIsEnumerable('prototype'); // вернёт false (в JS 1.8.1/FF3.6) o.propertyIsEnumerable('constructor'); // вернёт false o.propertyIsEnumerable('firstMethod'); // вернёт false
Спецификации
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 3-е издание. | Стандарт | Изначальное определение. |
ECMAScript 5.1 (ECMA-262) Определение 'Object.prototype.propertyIsEnumerable' в этой спецификации. |
Стандарт | |
ECMAScript 6 (ECMA-262) Определение 'Object.prototype.propertyIsEnumerable' в этой спецификации. |
Кандидат в рекомендации |
Совместимость с браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |
Особый случай с Gecko
Начиная с JavaScript 1.8.1 (в Firefox 3.6), метод propertyIsEnumerable('prototype')
возвращает false
вместо true
; это делает результат совместимым с ECMAScript 5.