Object.prototype.propertyIsEnumerable()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die propertyIsEnumerable()
Methode von Object
Instanzen gibt einen booleschen Wert zurück, der anzeigt, ob die angegebene Eigenschaft eine eigene aufzählbare Eigenschaft dieses Objekts ist.
Probieren Sie es aus
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
Syntax
propertyIsEnumerable(prop)
Parameter
Rückgabewert
Ein boolescher Wert, der anzeigt, ob die angegebene Eigenschaft aufzählbar und eine eigene Eigenschaft des Objekts ist.
Beschreibung
Alle Objekte, die von Object.prototype
erben (das heißt, alle außer null
-Prototyp-Objekten), erben die propertyIsEnumerable()
Methode. Diese Methode bestimmt, ob die angegebene Eigenschaft, String oder Symbol, eine aufzählbare eigene Eigenschaft des Objekts ist. Wenn das Objekt die angegebene Eigenschaft nicht besitzt, gibt diese Methode false
zurück.
Diese Methode ist äquivalent zu Object.getOwnPropertyDescriptor(obj, prop)?.enumerable ?? false
.
Beispiele
Verwendung von propertyIsEnumerable()
Das folgende Beispiel zeigt die Verwendung von propertyIsEnumerable()
bei Objekten und Arrays.
const o = {};
const a = [];
o.prop = "is enumerable";
a[0] = "is enumerable";
o.propertyIsEnumerable("prop"); // true
a.propertyIsEnumerable(0); // true
Benutzerdefinierte vs. eingebaute Objekte
Die meisten eingebauten Eigenschaften sind standardmäßig nicht aufzählbar, während benutzerdefinierte Objekteigenschaften oft aufzählbar sind, es sei denn, sie werden ausdrücklich anders definiert.
const a = ["is enumerable"];
a.propertyIsEnumerable(0); // true
a.propertyIsEnumerable("length"); // false
Math.propertyIsEnumerable("random"); // false
globalThis.propertyIsEnumerable("Math"); // false
Direkte vs. geerbte Eigenschaften
Nur aufzählbare eigene Eigenschaften führen dazu, dass propertyIsEnumerable()
true
zurückgibt, obwohl alle aufzählbaren Eigenschaften, einschließlich der geerbten, von der for...in
Schleife besucht werden.
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
Testen von Symboleigenschaften
Symbol
Eigenschaften werden ebenfalls von propertyIsEnumerable()
unterstützt. Beachten Sie, dass die meisten Enumerationsmethoden nur String-Eigenschaften besuchen; die Aufzählbarkeit von Symboleigenschaften ist nur nützlich, wenn Object.assign()
oder Spread-Syntax verwendet wird. Weitere Informationen finden Sie unter Enumerierbarkeit und Eigentum von Eigenschaften.
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
Verwendung mit null-Prototyp-Objekten
Da null
-Prototyp-Objekte nicht von Object.prototype
erben, erben sie nicht die propertyIsEnumerable()
Methode. Sie müssen Object.prototype.propertyIsEnumerable
mit dem Objekt als this
aufrufen.
const o = {
__proto__: null,
enumerableOwn: "is enumerable",
};
o.propertyIsEnumerable("enumerableOwn"); // TypeError: o.propertyIsEnumerable is not a function
Object.prototype.propertyIsEnumerable.call(o, "enumerableOwn"); // true
Alternativ können Sie auch Object.getOwnPropertyDescriptor()
verwenden, was ebenfalls hilft, zwischen nicht existenten Eigenschaften und tatsächlich nicht aufzählbaren Eigenschaften zu unterscheiden.
const o = {
__proto__: null,
enumerableOwn: "is enumerable",
};
Object.getOwnPropertyDescriptor(o, "enumerableOwn")?.enumerable; // true
Object.getOwnPropertyDescriptor(o, "nonExistent")?.enumerable; // undefined
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-object.prototype.propertyisenumerable |