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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow