En este tutorial, aprenderá sobre JavaScript Symbol con la ayuda de ejemplos.
Símbolo de JavaScript
El JavaScript ES6 introdujo un nuevo tipo de datos primitivo llamado Symbol
. Los símbolos son inmutables (no se pueden cambiar) y son únicos. Por ejemplo,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Aunque value1 y value2 contienen la misma descripción, son diferentes.
Crear símbolo
Utiliza la Symbol()
función para crear un Symbol
. Por ejemplo,
// creating symbol const x = Symbol() typeof x; // symbol
Puede pasar una cadena opcional como descripción. Por ejemplo,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Descripción del símbolo de acceso
Para acceder a la descripción de un símbolo, usamos el .
operador. Por ejemplo,
const x = Symbol('hey'); console.log(x.description); // hey
Agregar símbolo como clave de objeto
Puede agregar símbolos como clave en un objeto usando corchetes ()
. Por ejemplo,
let id = Symbol("id"); let person = ( name: "Jack", // adding symbol as a key (id): 123 // not "id": 123 ); console.log(person); // (name: "Jack", Symbol(id): 123)
Los símbolos no están incluidos en for … in Loop
El for… in
bucle no itera sobre las propiedades simbólicas. Por ejemplo,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Salida
nombre Edad
Beneficio de usar símbolos en un objeto
Si se usa el mismo fragmento de código en varios programas, entonces es mejor usarlo Symbols
en la clave del objeto. Es porque puede usar el mismo nombre de clave en diferentes códigos y evitar problemas de duplicación. Por ejemplo,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
En el programa anterior, si el person
objeto también es utilizado por otro programa, entonces no querrá agregar una propiedad a la que otro programa pueda acceder o cambiar. Por lo tanto, al usar Symbol
, crea una propiedad única que puede usar.
Ahora, si el otro programa también necesita usar una propiedad llamada id , simplemente agregue un símbolo llamado id
y no habrá problemas de duplicación. Por ejemplo,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
En el programa anterior, incluso si se usa el mismo nombre para almacenar valores, el Symbol
tipo de datos tendrá un valor único.
En el programa anterior, si se usó la clave de cadena, entonces el programa posterior habría cambiado el valor de la propiedad. Por ejemplo,
let person = ( name: "Jack" ); // using string as key person.id = 12; console.log(person.id); // 12 // Another program overwrites value person.id = 'Another value'; console.log(person.id); // Another value
En el programa anterior, el segundo user.id
sobrescribe el valor anterior.
Métodos de símbolo
Hay varios métodos disponibles con Symbol.
Método | Descripción |
---|---|
for() | Busca símbolos existentes |
keyFor() | Devuelve una clave de símbolo compartida del registro de símbolos global. |
toSource() | Devuelve una cadena que contiene el origen del objeto Símbolo. |
toString() | Devuelve una cadena que contiene la descripción del símbolo. |
valueOf() | Devuelve el valor primitivo del objeto Symbol. |
Ejemplo: métodos de símbolo
// get symbol by name let sym = Symbol.for('hello'); let sym1 = Symbol.for('id'); // get name by symbol console.log( Symbol.keyFor(sym) ); // hello console.log( Symbol.keyFor(sym1) ); // id
Propiedades del símbolo
Propiedades | Descripción |
---|---|
asyncIterator | Devuelve el AsyncIterator predeterminado para un objeto |
hasInstance | Determina si un objeto constructor reconoce un objeto como su instancia |
isConcatSpreadable | Indica si un objeto debe acoplarse a sus elementos de matriz |
iterator | Devuelve el iterador predeterminado para un objeto. |
match | Partidos contra una cuerda |
matchAll | Devuelve un iterador que produce coincidencias de la expresión regular con una cadena. |
replace | Reemplaza subcadenas coincidentes de una cadena |
search | Devuelve el índice dentro de una cadena que coincide con la expresión regular. |
split | Divide una cadena en los índices que coinciden con una expresión regular |
species | Crea objetos derivados |
toPrimitive | Convierte un objeto en un valor primitivo |
toStringTag | Da la descripción predeterminada de un objeto |
description | Devuelve una cadena que contiene la descripción del símbolo. |
Ejemplo: Ejemplo de propiedades de símbolo
const x = Symbol('hey'); // description property console.log(x.description); // hey const stringArray = ('a', 'b', 'c'); const numberArray = (1, 2, 3); // isConcatSpreadable property numberArray(Symbol.isConcatSpreadable) = false; let result = stringArray.concat(numberArray); console.log(result); // ("a", "b", "c", (1, 2, 3))