Object.prototype.propertyIsEnumerable()
Die propertyIsEnumerable()
-Methode von Object
-Instanzen gibt einen boolean zurück, um anzuzeigen, ob die angegebene Eigenschaft eine aufzählbare eigene Eigenschaft dieses Objekts ist.
Probieren Sie es aus
Syntax
propertyIsEnumerable(prop)
Parameter
Rückgabewert
Ein boolean, 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 Objekte mit null
-Prototyp) 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 gleichwertig mit 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 benutzererstellte Objekteigenschaften oft aufzählbar sind, es sei denn, es wird ausdrücklich anders bestimmt.
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 Symbol-Eigenschaften
Symbol
-Eigenschaften werden ebenfalls von propertyIsEnumerable()
unterstützt. Beachten Sie, dass die meisten Enumerationsmethoden nur String-Eigenschaften besuchen; die Aufzählbarkeit von Symbol-Eigenschaften ist nur nützlich beim Verwenden von Object.assign()
oder Spread-Syntax. Für weiterführende Informationen siehe Aufzählbarkeit und Besitz 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 auch 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 Object.getOwnPropertyDescriptor()
verwenden, was auch hilft, zwischen nicht existierenden 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 Language Specification # sec-object.prototype.propertyisenumerable |
Browser-Kompatibilität
BCD tables only load in the browser