Tipo Symbol en JavaScript
Los objetos en JavaScript pueden tener claves de propiedad que generalmente son cadenas de texto o Symbols. Estos últimos son identificadores únicos que se crean utilizando la función Symbol():
let id = Symbol();
También es posible añadir una descripción opcional al crear un Symbol, lo que puede ser útil para la depuración:
let id = Symbol("identificador");
A diferencia de otros valores primitivos, cada Symbol es único. Incluso si dos Symbols tienen la misma descripción, son distintos:
let id1 = Symbol("identificador");
let id2 = Symbol("identificador");
alert(id1 === id2); // false
Los Symbols no se convierten automáticamente a cadenas de texto. Intentar mostrar un Symbol directamente provocará un error, pero podemos usar el método .toString() para obtener su representación como string:
let id = Symbol("identificador");
alert(id.toString()); // Symbol(identificador)
Una característica útil de los Symbols es su capacidad para crear propiedades «ocultas» en objetos. Estas propiedades no son accesibles mediante iteraciones normales como for..in o con Object.keys():
let user = {
name: "John"
};
let id = Symbol("id");
user[id] = 1;
alert(user[id]); // 1
Usar Symbols como claves protege estas propiedades de ser sobrescritas accidentalmente por otras partes del código que no son conscientes de su existencia.
Para integrar un Symbol en un objeto literal, debemos usar corchetes:
let id = Symbol("id");
let user = {
name: "John",
[id]: 123 // no se usa "id": 123
};
Es importante destacar que las claves de Symbols no participan en operaciones como for..in ni en Object.keys(), manteniéndose fuera de la visibilidad de iteraciones estándar.
Además, existe un registro global de Symbols que permite crear Symbols globales con Symbol.for(«nombre»). Este registro garantiza que cada Symbol creado con el mismo nombre sea el mismo en toda la aplicación:
let id = Symbol.for("id");
let idAgain = Symbol.for("id");
alert(id === idAgain); // true
Es importante destacar que las claves de Symbols no participan en operaciones como for..in ni en Object.keys(), manteniéndose fuera de la visibilidad de iteraciones estándar.
Además, existe un registro global de Symbols que permite crear Symbols globales con Symbol.for(«nombre»). Este registro garantiza que cada Symbol creado con el mismo nombre sea el mismo en toda la aplicación:
let id = Symbol.for("id");
let idAgain = Symbol.for("id");
alert(id === idAgain); // true
Este registro global es útil cuando necesitamos asegurarnos de que ciertos Symbols sean consistentes y únicos en toda la aplicación.
En resumen, los Symbols en JavaScript son útiles para crear identificadores únicos y propiedades protegidas en objetos, proporcionando una manera segura de agregar funcionalidad sin interferir con otros partes del código.