Ricerca…
Sintassi
- Simbolo()
- Simbolo (descrizione)
- Symbol.toString ()
Osservazioni
Specifica ECMAScript 2015 19.4 Simboli
Nozioni di base sul tipo di simbolo primitivo
Symbol
è un nuovo tipo primitivo in ES6. I simboli sono usati principalmente come chiavi di proprietà e una delle sue caratteristiche principali è che sono unici , anche se hanno la stessa descrizione. Ciò significa che non avranno mai un nome in conflitto con qualsiasi altra chiave di proprietà che sia un symbol
o una string
.
const MY_PROP_KEY = Symbol();
const obj = {};
obj[MY_PROP_KEY] = "ABC";
console.log(obj[MY_PROP_KEY]);
In questo esempio, il risultato di console.log
sarebbe ABC
.
Puoi anche avere simboli con nome come:
const APPLE = Symbol('Apple');
const BANANA = Symbol('Banana');
const GRAPE = Symbol('Grape');
Ciascuno di questi valori è univoco e non può essere sovrascritto.
Fornire un parametro facoltativo (description)
durante la creazione di simboli primitivi può essere utilizzato per il debug ma non per accedere al simbolo stesso (ma vedere l'esempio Symbol.for()
per un modo di registrare / cercare simboli globali condivisi).
Convertire un simbolo in una stringa
A differenza della maggior parte degli altri oggetti JavaScript, i simboli non vengono convertiti automaticamente in una stringa quando si esegue la concatenazione.
let apple = Symbol('Apple') + ''; // throws TypeError!
Al contrario, devono essere esplicitamente convertiti in una stringa quando necessario (ad esempio, per ottenere una descrizione testuale del simbolo che può essere utilizzata in un messaggio di debug) utilizzando il metodo toString
o il costruttore String
.
const APPLE = Symbol('Apple');
let str1 = APPLE.toString(); // "Symbol(Apple)"
let str2 = String(APPLE); // "Symbol(Apple)"
Utilizzare Symbol.for () per creare simboli globali condivisi
Il metodo Symbol.for
ti consente di registrare e cercare simboli globali per nome. La prima volta che viene chiamato con una determinata chiave, crea un nuovo simbolo e lo aggiunge al registro.
let a = Symbol.for('A');
La prossima volta che chiami Symbol.for('A')
, verrà restituito lo stesso simbolo invece di uno nuovo (a differenza di Symbol('A')
che creerebbe un nuovo simbolo univoco che ha la stessa descrizione ).
a === Symbol.for('A') // true
ma
a === Symbol('A') // false