Quiz : Symboles et énumérables
Connaissez‑vous les aspects moins connus d’ES2015 ?
Quiz : Interfaces JavaScript, Symboles et Énumérables
- Prouvez votre maîtrise de JavaScript ! 🚀
- Aucun login ou inscription requis. ✨
- Choix multiples. 🤖 … À quel point cela peut‑il être difficile, hein ?
Comment devez‑vous accéder à une propriété d’un objet JavaScript qui utilise un accesseur ?
const obj = { get val() { return 'got it!'; }};console.log(obj.val);En JavaScript, un accesseur peut être accédé comme une propriété normale. Il n’est pas nécessaire de l’appeler comme une fonction.
Dans cet exemple, accéder à obj.val invoque directement la méthode d’accesseur et affiche got it!.
Quelle est la bonne façon de créer une clé de propriété réellement unique pour un objet JavaScript ?
const uniqueKey = Symbol('myUniqueKey');const obj = { [uniqueKey]: 'unique value'};console.log(obj[uniqueKey]);Les Symboles sont un type primitif unique et immuable qui peut être utilisé comme clés pour les propriétés d’un objet. Cela permet d’éviter les collisions de noms, notamment dans les grands bases de code ou lors de l’écriture de bibliothèques réutilisables.
La propriété age sera-t-elle listée lors d’une itération for...in ?
const person = {};Object.defineProperty(person, 'age', { value: 25, enumerable: true});for (let key in person) { console.log(key);}La propriété enumerable dans Object.defineProperty() détermine si la propriété apparaîtra dans les méthodes d’énumération comme for...in. Dans cet exemple, comme enumerable: true, la propriété age sera listée lors de l’itération.
Quelle est l’énumérabilité par défaut d’une propriété lorsqu’on utilise Object.defineProperty() sans spécifier enumerable ?
const car = {};Object.defineProperty(car, 'make', { value: 'Toyota'});console.log(Object.keys(car));Lorsque vous utilisez Object.defineProperty() sans spécifier enumerable, sa valeur par défaut est false. Cela signifie que la propriété make n’apparaîtra pas dans Object.keys() ni dans d’autres méthodes d’énumération.
Quel sera le résultat de la comparaison suivante ?
const sym1 = Symbol('id');const sym2 = Symbol('id');console.log(sym1 === sym2);Chaque appel à Symbol() crée une valeur unique et immuable, même si la description est identique. Dans ce cas, sym1 et sym2 sont des symboles différents, donc la comparaison renvoie false.
La propriété à clé Symbol sera‑t‑elle listée lors d’une itération for...in ?
const sym = Symbol('uniqueKey');const obj = { [sym]: 'symbol value', regularKey: 'regular value'};for (let key in obj) { console.log(key);}Les propriétés à clé Symbol peuvent posséder leur propre drapeau enumerable, mais for...in et Object.keys() ne parcourent que les propriétés énumérables à clé chaîne. Dans cet exemple, seule regularKey sera listée, pas la propriété à clé Symbol.
Quelle méthode peut être utilisée pour récupérer toutes les clés Symbol d’un objet ?
La méthode Object.getOwnPropertySymbols() est utilisée pour récupérer les clés de propriétés Symbol propres à un objet.
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)]