Buscar..
Sintaxis
- Símbolo()
- Símbolo (descripción)
- Symbol.toString ()
Observaciones
ECMAScript 2015 Especificación 19.4 Símbolos
Fundamentos del tipo de símbolo primitivo.
Symbol
es un nuevo tipo primitivo en ES6. Los símbolos se utilizan principalmente como claves de propiedades , y una de sus principales características es que son únicas , incluso si tienen la misma descripción. Esto significa que nunca tendrán un conflicto de nombres con ninguna otra clave de propiedad que sea un symbol
o una string
.
const MY_PROP_KEY = Symbol();
const obj = {};
obj[MY_PROP_KEY] = "ABC";
console.log(obj[MY_PROP_KEY]);
En este ejemplo, el resultado de console.log
sería ABC
.
También puede haber nombrado símbolos como:
const APPLE = Symbol('Apple');
const BANANA = Symbol('Banana');
const GRAPE = Symbol('Grape');
Cada uno de estos valores es único y no se puede anular.
Proporcionar un parámetro opcional (description)
al crear símbolos primitivos se puede usar para la depuración pero no para acceder al símbolo en sí (pero vea el ejemplo de Symbol.for()
para ver / registrar símbolos globales compartidos).
Convertir un símbolo en una cadena
A diferencia de la mayoría de los otros objetos de JavaScript, los símbolos no se convierten automáticamente en una cadena al realizar la concatenación.
let apple = Symbol('Apple') + ''; // throws TypeError!
En su lugar, tienen que convertirse explícitamente en una cadena cuando sea necesario (por ejemplo, para obtener una descripción textual del símbolo que se puede usar en un mensaje de depuración) utilizando el método toString
o el constructor String
.
const APPLE = Symbol('Apple');
let str1 = APPLE.toString(); // "Symbol(Apple)"
let str2 = String(APPLE); // "Symbol(Apple)"
Usando Symbol.for () para crear símbolos globales compartidos
El método Symbol.for
permite registrarse y buscar símbolos globales por nombre. La primera vez que se llama con una clave dada, crea un nuevo símbolo y lo agrega al registro.
let a = Symbol.for('A');
La próxima vez que llame a Symbol.for('A')
, se devolverá el mismo símbolo en lugar de uno nuevo (en contraste con el Symbol('A')
que creará un nuevo símbolo único que tiene la misma descripción ).
a === Symbol.for('A') // true
pero
a === Symbol('A') // false