Tipo Symbol de JavaScript
Introducción a los símbolos de JavaScript
Los símbolos, introducidos en ECMAScript 2015 (ES6), son un tipo de dato único e inmutable que se utiliza principalmente para añadir claves de propiedad únicas a los objetos. Esta guía explora los símbolos, sus aplicaciones prácticas y cómo mejoran el desarrollo en JavaScript mediante identificadores únicos y capacidades de metaprogramación.
Comprender los símbolos
Un Symbol es un valor primitivo único e inmutable que puede usarse como clave de una propiedad de un objeto. Cada valor Symbol devuelto por Symbol() es distinto de todos los demás, lo que garantiza su unicidad.
Ejemplo: crear y usar símbolos
sym1 se crea sin descripción, mientras que sym2 y sym3 se crean con la misma descripción. A pesar de tener la misma descripción, sym2 y sym3 son símbolos únicos.
Ten en cuenta que en este ejemplo se usa la función String() para convertir los símbolos en una cadena de texto y registrarlos de forma segura.
Símbolos como claves de propiedades
Usar símbolos como claves de propiedades te permite añadir propiedades que quedan ocultas para métodos de enumeración estándar como Object.keys() y for...in. De forma predeterminada, las propiedades símbolo son enumerables, pero quedan excluidas de estos bucles estándar. Puedes modificar su enumerabilidad usando Object.defineProperty(). Además, JSON.stringify() ignora las propiedades con clave símbolo, lo que ayuda a evitar que datos sensibles se serialicen. Para recuperar propiedades con clave símbolo, puedes usar Object.getOwnPropertySymbols() o Reflect.ownKeys().
Ejemplo: usar símbolos en objetos
El objeto user usa un Symbol id como clave para una propiedad oculta a la que solo se puede acceder mediante el Symbol id. Esta propiedad no aparece en los listados estándar de propiedades de objetos.
Compartir símbolos con Symbol.for y Symbol.keyFor
Los símbolos creados con Symbol.for se almacenan en el registro global de símbolos y pueden accederse desde cualquier parte de tu código, lo que garantiza referencias coherentes mediante los métodos Symbol.for y Symbol.keyFor.
Ejemplo: compartir símbolos
globalSym y sameGlobalSym hacen referencia exactamente al mismo Symbol, que se almacena globalmente. Symbol.keyFor recupera la clave asociada a un Symbol global.
Uso en el mundo real
Aquí tienes algunos ejemplos prácticos de cómo se pueden usar los símbolos en escenarios reales:
1. Gestionar el acceso a propiedades de objetos
Los símbolos son especialmente útiles cuando quieres controlar el acceso a ciertas propiedades de un objeto, asegurando que no se alteren accidentalmente ni se acceda a ellas mediante métodos comunes de acceso a propiedades de objetos.
Ejemplo: miembros privados en clases
Al crear clases en JavaScript, puede que quieras tener propiedades privadas a las que no se pueda acceder directamente desde fuera de los métodos de la clase. Usar símbolos puede ofrecer una forma de lograr una especie de privacidad.
2. Evitar colisiones de propiedades
Cuando trabajas con mixins o amplías objetos en los que no controlas todos los nombres de propiedad, los símbolos pueden ayudar a evitar colisiones de nombres de propiedades.
Ejemplo: mixins seguros
Si amplías un objeto con funcionalidad adicional procedente de varias fuentes, los símbolos pueden garantizar que no haya colisiones de claves que sobrescriban propiedades existentes.
3. Metaprogramación
Los símbolos son una parte fundamental de las capacidades de metaprogramación de JavaScript. Ciertos símbolos conocidos se usan para modificar o personalizar el comportamiento de instancias de objetos. Más allá de Symbol.iterator, otros como Symbol.toStringTag (personaliza la salida de Object.prototype.toString) y Symbol.hasInstance (personaliza el comportamiento de instanceof) proporcionan una integración profunda con el lenguaje.
Ejemplo: iteradores personalizados
Puedes usar símbolos para definir un comportamiento personalizado de iteración en objetos mediante la propiedad Symbol.iterator.
4. Símbolos para depuración
Los símbolos también pueden ser útiles para depurar, ya que puedes adjuntar metainformación a los objetos sin afectar su comportamiento operativo.
Ejemplo: añadir información de depuración
Estos ejemplos ilustran cómo los símbolos pueden aprovecharse en escenarios prácticos para gestionar propiedades de objetos de forma más segura, ampliar funcionalidades sin interferencias y facilitar técnicas avanzadas de programación en JavaScript.
Conclusión
Los símbolos en JavaScript ofrecen una forma robusta de manejar identificadores únicos y permiten a los desarrolladores gestionar propiedades de objetos con un alto grado de control y privacidad. Al usar símbolos, puedes asegurarte de que las propiedades se utilicen de forma adecuada, evitando efectos secundarios no deseados.
Práctica
What are some characteristics of JavaScript Symbol type?