DanLevy.net

Quiz: Symbole & Aufzählbare

Kennst du die weniger bekanntenDetails von ES2015?

Quiz: JavaScript‑Interfaces, Symbole und Enumerierbare Eigenschaften

Wie greifst du auf ein JavaScript‑Objekt‑Property zu, das einen Getter‑Methode verwendet?

const obj = {
get val() {
return 'got it!';
}
};
console.log(obj.val);

In JavaScript kann ein Getter wie ein normales Property verwendet werden. Es muss nicht wie eine Funktion aufgerufen werden. In diesem Beispiel ruft das direkte Zugreifen auf obj.val die Getter‑Methode auf und gibt got it! aus.

Wie erstellt man korrekt einen wirklich eindeutigen Eigenschaftsschlüssel für ein JavaScript‑Objekt?

const uniqueKey = Symbol('myUniqueKey');
const obj = {
[uniqueKey]: 'unique value'
};
console.log(obj[uniqueKey]);

Symbole sind ein eindeutiger und unveränderlicher primitiver Typ, der als Schlüssel für Objekteigenschaften verwendet werden kann. Das verhindert Namenskollisionen, besonders in großen Codebasen oder beim Schreiben wiederverwendbarer Bibliotheken.

Wird die Eigenschaft age bei einer for...in-Iteration aufgelistet?

const person = {};
Object.defineProperty(person, 'age', {
value: 25,
enumerable: true
});
for (let key in person) {
console.log(key);
}

Die enumerable‑Eigenschaft in Object.defineProperty() bestimmt, ob die Eigenschaft in Aufzählungsmethoden wie for...in erscheint. In diesem Beispiel wird, weil enumerable: true, die Eigenschaft age während der Iteration aufgelistet.

Wie ist die Standard‑Enumerierbarkeit einer Eigenschaft, wenn man Object.defineProperty() verwendet, ohne enumerable anzugeben?

const car = {};
Object.defineProperty(car, 'make', {
value: 'Toyota'
});
console.log(Object.keys(car));

Wenn Sie Object.defineProperty() ohne Angabe von enumerable verwenden, ist der Standardwert false. Das bedeutet, dass die Eigenschaft make nicht in Object.keys() oder anderen Enumerationsmethoden erscheint.

Was ist das Ergebnis des folgenden Vergleichs?

const sym1 = Symbol('id');
const sym2 = Symbol('id');
console.log(sym1 === sym2);

Jeder Aufruf von Symbol() erzeugt einen eindeutigen und unveränderlichen Wert, selbst wenn die Beschreibung gleich ist. In diesem Fall sind sym1 und sym2 unterschiedliche Symbole, sodass der Vergleich false zurückgibt.

Wird die Symbol‑gekennzeichnete Eigenschaft bei einer for...in‑Iteration aufgelistet?

const sym = Symbol('uniqueKey');
const obj = {
[sym]: 'symbol value',
regularKey: 'regular value'
};
for (let key in obj) {
console.log(key);
}

Symbol‑gekennzeichnete Eigenschaften können ihr eigenes enumerable‑Flag besitzen, aber for...in und Object.keys() besuchen nur string‑gekennzeichnete aufzählbare Eigenschaften. In diesem Beispiel wird nur regularKey aufgelistet, nicht die Symbol‑gekennzeichnete Eigenschaft.

Welche Methode kann verwendet werden, um alle Symbol‑Schlüssel eines Objekts abzurufen?

Die Methode Object.getOwnPropertySymbols() wird verwendet, um die eigenen Symbol‑Eigenschaftsschlüssel eines Objekts abzurufen.

const sym1 = Symbol('id');
const sym2 = Symbol('name');
const obj = {
[sym1]: 'symbol value',
[sym2]: 'another symbol value'
};
console.log(Object.getOwnPropertySymbols(obj));
// [Symbol(id), Symbol(name)]