Vorwort:
- Objekteigenschaften können sein eigene (die Eigenschaft bezieht sich auf das Objekt selbst) oder vererbt (nicht auf dem Objekt selbst, sondern auf einem seiner Prototypen).
- Objekteigenschaften können sein aufzählbar o nicht abzählbar . Nicht aufzählbare Eigenschaften werden bei vielen Eigenschaftsaufzählungen/-arrays ausgelassen.
- Eigenschaftsnamen können Strings oder Symbole sein. Eigenschaften, deren Namen Symbole sind, werden bei vielen Eigenschaftsaufzählungen/-arrays ausgelassen.
Hier im Jahr 2018 haben Sie folgende Möglichkeiten, die Eigenschaften eines Objekts in einer Schleife zu durchlaufen (einige Beispiele folgen der Liste):
for-in
[ MDN , spec ] - Eine Schleifenstruktur, die die Namen der Objekte in einer Schleife durchläuft. aufzählbar Eigenschaften, einschließlich geerbter Eigenschaften, deren Namen Strings sind
Object.keys
[ MDN , spec ] - Eine Funktion, die ein Array mit den Namen eines Objekts bereitstellt eigene , aufzählbar Eigenschaften, deren Namen Strings sind.
Object.values
[ MDN , spec ] - Eine Funktion, die ein Array mit den Werte eines Objekts eigene , aufzählbar Eigenschaften.
Object.entries
[ MDN , spec ] - Eine Funktion, die ein Array mit den Namen liefert y Werte eines Objekts eigene , aufzählbar Eigenschaften (jeder Eintrag im Array ist ein [name, value]
Array).
Object.getOwnPropertyNames
[ MDN , spec ] - Eine Funktion, die ein Array mit den Namen eines Objekts bereitstellt eigene Eigenschaften (auch nicht aufzählbare), deren Namen Strings sind.
Object.getOwnPropertySymbols
[ MDN , spec ] - Eine Funktion, die ein Array mit den Namen eines Objekts bereitstellt eigene Eigenschaften (auch nicht aufzählbare), deren Namen Symbols sind.
Reflect.ownKeys
[ MDN , spec ] - Eine Funktion, die ein Array mit den Namen eines Objekts bereitstellt eigene Eigenschaften (auch nicht aufzählbare), unabhängig davon, ob diese Namen Strings oder Symbole sind.
- Wenn Sie wollen tous der Eigenschaften eines Objekts, einschließlich der nicht aufzählbaren vererbten Eigenschaften, müssen Sie eine Schleife verwenden und
Object.getPrototypeOf
[ MDN , spec ] und verwenden Object.getOwnPropertyNames
, Object.getOwnPropertySymbols
, oder Reflect.ownKeys
für jedes Objekt in der Prototypenkette (Beispiel am Ende dieser Antwort).
Mit allen außer for-in
würden Sie eine Art Schleifenkonstrukt für das Array verwenden ( for
, for-of
, forEach
etc.).
Beispiele:
for-in
:
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name in o) {
const value = o[name];
console.log(`${name} = ${value}`);
}
Object.keys
(mit einem for-of
Schleife, aber Sie können jedes Schleifenkonstrukt verwenden) :
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Object.keys(o)) {
const value = o[name];
console.log(`${name} = ${value}`);
}
Object.values
:
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const value of Object.values(o)) {
console.log(`${value}`);
}
Object.entries
:
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const [name, value] of Object.entries(o)) {
console.log(`${name} = ${value}`);
}
Object.getOwnPropertyNames
:
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Object.getOwnPropertyNames(o)) {
const value = o[name];
console.log(`${name} = ${value}`);
}
Object.getOwnPropertySymbols
:
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Object.getOwnPropertySymbols(o)) {
const value = o[name];
console.log(`${String(name)} = ${value}`);
}
Reflect.ownKeys
:
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (const name of Reflect.ownKeys(o)) {
const value = o[name];
console.log(`${String(name)} = ${value}`);
}
Alle Eigenschaften einschließlich der vererbten nicht aufzählbaren:
// A prototype object to inherit from, with a string-named property
const p = {answer: 42};
// The object we'll look at, which inherits from `p`
const o = Object.create(p);
// A string-named property
o.question = "Life, the Universe, and Everything";
// A symbol-named property
o[Symbol("author")] = "Douglas Adams";
for (let depth = 0, current = o; current; ++depth, current = Object.getPrototypeOf(current)) {
for (const name of Reflect.ownKeys(current)) {
const value = o[name];
console.log(`[${depth}] ${String(name)} = ${String(value)}`);
}
}
.as-console-wrapper {
max-height: 100% !important;
}