Object.prototype.propertyIsEnumerable()
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и версий браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод propertyIsEnumerable() экземпляров Object возвращает булево значение, указывающее, является ли указанное свойство перечисляемым собственным свойством этого объекта.
Попробуйте
const object = {};
const array = [];
object.foo = 42;
array[0] = 42;
console.log(object.propertyIsEnumerable("foo"));
// Expected output: true
console.log(array.propertyIsEnumerable(0));
// Expected output: true
console.log(array.propertyIsEnumerable("length"));
// Expected output: false
Синтаксис
propertyIsEnumerable(prop)
Параметры
-
prop - Имя проверяемого свойства. Может быть строкой или
Symbol.
Возвращаемое значение
Булево значение, указывающее, является ли указанное свойство перечисляемым и собственным свойством объекта.
Описание
Все объекты, унаследованные от Object.prototype (то есть все, кроме объектов null-прототипа), наследуют метод propertyIsEnumerable(). Этот метод определяет, является ли указанное свойство (строка или символ) перечисляемым собственным свойством объекта. Если у объекта нет указанного свойства, этот метод возвращает false.
Этот метод эквивалентен Object.getOwnPropertyDescriptor(obj, prop)?.enumerable ?? false.
Примеры
Использование propertyIsEnumerable()
Следующий пример демонстрирует использование propertyIsEnumerable() на объектах и массивах.
const o = {};
const a = [];
o.prop = "is enumerable";
a[0] = "is enumerable";
o.propertyIsEnumerable("prop"); // true
a.propertyIsEnumerable(0); // true
Пользовательские vs. встроенные объекты
Большинство встроенных свойств по умолчанию не перечисляются, в то время как пользовательские свойства объектов часто перечисляются, если явно не указано иное.
const a = ["is enumerable"];
a.propertyIsEnumerable(0); // true
a.propertyIsEnumerable("length"); // false
Math.propertyIsEnumerable("random"); // false
globalThis.propertyIsEnumerable("Math"); // false
Прямые vs. унаследованные свойства
Только перечисляемые собственные свойства заставляют propertyIsEnumerable() возвращать true, хотя все перечисляемые свойства, включая унаследованные, посещаются циклом for...in.
const o1 = {
enumerableInherited: "is enumerable",
};
Object.defineProperty(o1, "nonEnumerableInherited", {
value: "is non-enumerable",
enumerable: false,
});
const o2 = {
// o1 is the prototype of o2
__proto__: o1,
enumerableOwn: "is enumerable",
};
Object.defineProperty(o2, "nonEnumerableOwn", {
value: "is non-enumerable",
enumerable: false,
});
o2.propertyIsEnumerable("enumerableInherited"); // false
o2.propertyIsEnumerable("nonEnumerableInherited"); // false
o2.propertyIsEnumerable("enumerableOwn"); // true
o2.propertyIsEnumerable("nonEnumerableOwn"); // false
Тестирование свойств символов
Свойства Symbol также поддерживаются propertyIsEnumerable(). Обратите внимание, что большинство методов перечисления посещают только строковые свойства; перечисляемость свойств символов полезна только при использовании Object.assign() или оператора расширения. Дополнительную информацию см. в разделе Перечисляемость и владение свойствами.
const sym = Symbol("enumerable");
const sym2 = Symbol("non-enumerable");
const o = {
[sym]: "is enumerable",
};
Object.defineProperty(o, sym2, {
value: "is non-enumerable",
enumerable: false,
});
o.propertyIsEnumerable(sym); // true
o.propertyIsEnumerable(sym2); // false
Использование с объектами null-prototype
Поскольку объекты null-прототипа не наследуются от Object.prototype, они не наследуют метод propertyIsEnumerable(). Вместо этого вы должны вызывать Object.prototype.propertyIsEnumerable, передавая объект как this.
const o = {
__proto__: null,
enumerableOwn: "is enumerable",
};
o.propertyIsEnumerable("enumerableOwn"); // TypeError: o.propertyIsEnumerable is not a function
Object.prototype.propertyIsEnumerable.call(o, "enumerableOwn"); // true
Альтернативно, вы можете использовать Object.getOwnPropertyDescriptor(), который также помогает различать несуществующие свойства и реально неперечисляемые свойства.
const o = {
__proto__: null,
enumerableOwn: "is enumerable",
};
Object.getOwnPropertyDescriptor(o, "enumerableOwn")?.enumerable; // true
Object.getOwnPropertyDescriptor(o, "nonExistent")?.enumerable; // undefined
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
propertyIsEnumerable |
1 |
12 |
1 |
4 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
1 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable