BLOG

Featured image of post SYMBOL - Tipos de Datos Primitivos

SYMBOL - Tipos de Datos Primitivos

Información y datos interesantes sobre SYMBOL, un tipo de dato primitivo

¿Para qué se usa?

Symbol se usa para crear valores únicos, irrepetibles

Un símbolo solo es igual a si mismo

1
2
3
4
5
6
7
8
9
let s1 = Symbol("descripcion");
let s2 = Symbol("descripcion");
console.log(s1 === s2); //false

let s3 = Symbol();
let s4 = Symbol();
console.log(s3 === s4); //false

console.log(s4 === s4); //true

Al menos que lo creemos de otra manera…

Existe un registro global de símbolos y para crear un símbolo que se guarde ahí:

1
2
3
4
5
let s5 = Symbol.for("descripcion");
console.log(s5); //Symbol(descripcion)

let s6 = Symbol.for("descripcion");
console.log(s5 === s6); //true

Registro global de símbolos

Aquí podremos acceder al mismo símbolo desde distintos lugares de nuestro programa a partir de su descripción.

Es compartido entre nuestra página y los serviceWorkers o iframes que esta pueda llegar a incluir

Para saber la descripción de un símbolo:

1
2
let desc = Symbol.keyFor(s6);
console.log(desc); //descripcion

Ejemplo

Son buenos remplazos para valores constantes que podrian podrían a ser strings

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
const DIRECCIONES = {
  IZQ: "IZQUIERDA",
  DER: "DERECHA",
};

function mover(direccion) {
  switch (direccion) {
    case DIRECCIONES.IZQ:
      console.log("Mover a la izquierda");
      break;
    case DIRECCIONES.DER:
      console.log("Mover a la derecha");
      break;
    default:
      console.log("Direccion desconocida");
  }
}

mover(DIRECCIONES.IZQ); // Mover a la izquierda
mover("IZQUIERDA"); // Mover a la izquierda

Para hacer que solo se usen los del objeto y no strings sueltos nos podría servir symbol.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
const DIRECCIONES2 = {
  IZQ: Symbol("IZQUIERDA"),
  DER: Symbol("DERECHA"),
};

function mover2(direccion) {
  switch (direccion) {
    case DIRECCIONES2.IZQ:
      console.log("Mover a la izquierda");
      break;
    case DIRECCIONES2.DER:
      console.log("Mover a la derecha");
      break;
    default:
      console.log("Direccion desconocida");
  }
}

mover2(DIRECCIONES2.IZQ); // Mover a la izquierda
mover2("IZQUIERDA"); // Direccion desconocida

También las podemos usar como propiedades únicas de los objectos

1
2
3
4
5
6
7
function validarEmail(user) {
  if (!user.valid) {
    if (user.email.endsWith("@gmail.com")) {
      user.valid = true;
    }
  }
}

Si un user ya está marcado como valido, no debe realizar la comprobación del gmail

¿Pero qué pasa si el user ya venía con un atributo valid cualquier otra cosa?

Perderíamos el valor que tenía antes.

1
2
3
4
5
6
7
8
9
let valiedEmail = Symbol("valid email");

function validarEmail(user) {
  if (!user[valiedEmail]) {
    if (user.email.endsWith("@gmail.com")) {
      user[valiedEmail] = true;
    }
  }
}

No existe otro símbolo que lo pueda pisar, incluso tengan la misma descripción

Nos permiten agregar propiedades ocultas dentro de los objetos

Solamente se puede acceder a los símbolos que son propiedades de un objeto, es con Object.getOwnPropertySymbol(user)


Ejemplos obtenidos de La Cocina del Código


Indice

  1. Tipos de Datos Primitivos
  2. String
  3. Number
  4. Boolean
  5. Null y Undefined
  6. Symbol <– Estás aquí