DanLevy.net

Quiz: símbolos y propiedades enumerables

¿Conoces los rincones menos famosos de ES2015?

Quiz: interfaces, símbolos y propiedades enumerables de JavaScript

  • ¡Demuestra lo que sabes de JavaScript! 🚀
  • No hace falta que inicies sesión ni te registres. ✨
  • Opción múltiple. 🤖 … ¿Qué tan difícil puede ser, eh?

¿Cómo deberías acceder a una propiedad de un objeto JavaScript que usa un método getter?

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

En JavaScript, puedes leer una propiedad con getter como cualquier otra. No hace falta llamar al getter como si fuera una función. En este ejemplo, acceder a obj.val invoca directamente el método getter y muestra got it!.

¿Cuál es la forma correcta de crear una clave de propiedad verdaderamente única para un objeto JavaScript?

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

Los valores de tipo Symbol son primitivos únicos e inmutables que pueden usarse como claves de propiedades de objetos. Esto ayuda a evitar colisiones de nombres, especialmente en bases de código grandes o al escribir bibliotecas reutilizables.

¿Se listará la propiedad age durante una iteración for...in?

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

La propiedad enumerable en Object.defineProperty() controla si la propiedad aparecerá en métodos de enumeración como for...in. En este ejemplo, como enumerable: true, la propiedad age se listará durante la iteración.

¿Cuál es la enumerabilidad predeterminada de una propiedad al usar Object.defineProperty() sin especificar enumerable?

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

Cuando usas Object.defineProperty() sin especificar enumerable, su valor predeterminado es false. Esto significa que la propiedad make no aparecerá en Object.keys() ni en otros métodos de enumeración.

¿Cuál será el resultado de la siguiente comparación?

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

Cada llamada a Symbol() crea un valor único e inmutable, incluso si la descripción es la misma. En este caso, sym1 y sym2 son símbolos diferentes, por lo que la comparación devuelve false.

¿Se listará la propiedad con clave Symbol durante una iteración for...in?

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

Las propiedades con clave Symbol pueden tener su propio atributo enumerable, pero for...in y Object.keys() solo recorren propiedades enumerables con clave de tipo cadena. En este ejemplo, solo se listará regularKey, no la propiedad con clave Symbol.

¿Qué método se puede usar para obtener todas las claves Symbol de un objeto?

El método Object.getOwnPropertySymbols() se usa para obtener las claves de propiedades Symbol propias de un objeto.

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)]