Símbolos en JavaScript
Claves únicas que nunca chocan, y los símbolos bien conocidos con significado.
const INTERNAL = Symbol("internal");
const tour = { slug: "patterns", [INTERNAL]: { cached: true } };
console.log(Object.keys(tour), JSON.stringify(tour));
console.log(tour[INTERNAL].cached, Object.getOwnPropertySymbols(tour).length);
console.log(Symbol("a") === Symbol("a"), Symbol.for("a") === Symbol.for("a"));
class Range {
constructor(to) { this.to = to; }
*[Symbol.iterator]() { for (let i = 1; i <= this.to; i += 1) yield i; }
get [Symbol.toStringTag]() { return "Range"; }
[Symbol.toPrimitive](hint) { return hint === "number" ? this.to : "range"; }
}
const range = new Range(3);
console.log([...range], `${range}`, +range, Object.prototype.toString
.call(range));
Cómo funciona
Symbol("x")es único; la descripción es solo una etiqueta.- Una clave símbolo la saltan JSON y Object.keys.
- Los símbolos bien conocidos se enganchan al comportamiento del lenguaje.
Palabras clave y builtins usados aquí
JSONObjectSymbolclassconstconstructorforletreturnthisyield
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 676
- Tokens
- 215
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 117 segundos.
Paso 2 de 4 en Objetos por dentro; paso 13 de 16 en Funciones y patrones.