Saltar al contenido

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


Output appears here after Run.

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


Output appears here after Run.

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


Output appears here after Run.

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.


Output appears here after Run.

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.


Output appears here after Run.

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.


Output appears here after Run.

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


Output appears here after Run.

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?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.