ES6 - Símbolo
Introducción a Symbol
ES6 introduce un nuevo tipo primitivo llamado Símbolo. Son útiles para implementar la metaprogramación en programas JavaScript.
Sintaxis
const mySymbol = Symbol()
const mySymbol = Symbol(stringDescription)
Un símbolo es solo una parte de la memoria en la que puede almacenar algunos datos. Cada símbolo apuntará a una ubicación de memoria diferente. Los valores devueltos por un constructor de Symbol () son únicos e inmutables.
Ejemplo
Entendamos esto con un ejemplo. Inicialmente, creamos dos símbolos sin descripción seguidos de símbolos con la misma descripción. En ambos casos, el operador de igualdad devolverá falso cuando se comparen los símbolos.
<script>
const s1 = Symbol();
const s2 = Symbol();
console.log(typeof s1)
console.log(s1===s2)
const s3 = Symbol("hello");//description
const s4 = Symbol("hello");
console.log(s3)
console.log(s4)
console.log(s3==s4)
</script>
La salida del código anterior será la que se menciona a continuación:
symbol
false
Symbol(hello)
Symbol(hello)
false
No Señor | Descripción de propiedad |
---|---|
1 | Símbolo. Para (tecla) busca símbolos existentes en un registro de símbolos con la clave dada y los devuelve, si los encuentra. De lo contrario, se crea un nuevo símbolo en el registro de símbolos global con esta clave. |
2 | Symbol.keyFor (sym) Recupera una clave de símbolo compartida del registro de símbolo global para el símbolo dado. |
Símbolo y clases
Se puede usar un símbolo con clases para definir las propiedades en la clase. La ventaja es que si la propiedad es un símbolo como se muestra a continuación, se puede acceder a la propiedad fuera del paquete solo si se conoce el nombre del símbolo. Por tanto, los datos se encapsulan mucho cuando se utilizan símbolos como propiedades.
Ejemplo
<script>
const COLOR = Symbol()
const MODEL = Symbol()
const MAKE = Symbol()
class Bike {
constructor(color ,make,model){
this[COLOR] = color;
this[MAKE] = make;
this[MODEL] = model;
}
}
let bike = new Bike('red','honda','cbr')
console.log(bike)
//property can be accessed ony if symbol name is known
console.log(bike[COLOR])
</script>
La salida del código anterior será como se indica a continuación:
Bike {Symbol(): "red", Symbol(): "honda", Symbol(): "cbr"}
red