In questo tutorial imparerai a conoscere JavaScript Symbol con l'aiuto di esempi.
Simbolo JavaScript
JavaScript ES6 ha introdotto un nuovo tipo di dati primitivo chiamato Symbol
. I simboli sono immutabili (non possono essere modificati) e sono unici. Per esempio,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Sebbene valore1 e valore2 contengano entrambi la stessa descrizione, sono diversi.
Creazione di simboli
Si utilizza la Symbol()
funzione per creare un file Symbol
. Per esempio,
// creating symbol const x = Symbol() typeof x; // symbol
Puoi passare una stringa opzionale come descrizione. Per esempio,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Descrizione del simbolo di accesso
Per accedere alla descrizione di un simbolo utilizziamo l' .
operatore. Per esempio,
const x = Symbol('hey'); console.log(x.description); // hey
Aggiungi simbolo come chiave oggetto
Puoi aggiungere simboli come chiave in un oggetto utilizzando le parentesi quadre ()
. Per esempio,
let id = Symbol("id"); let person = ( name: "Jack", // adding symbol as a key (id): 123 // not "id": 123 ); console.log(person); // (name: "Jack", Symbol(id): 123)
I simboli non sono inclusi in for … in Loop
Il for… in
ciclo non itera sulle proprietà simboliche. Per esempio,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Produzione
nome età
Vantaggio dell'utilizzo di simboli nell'oggetto
Se lo stesso frammento di codice viene utilizzato in vari programmi, è meglio utilizzarlo Symbols
nella chiave dell'oggetto. È perché puoi utilizzare lo stesso nome chiave in codici diversi ed evitare problemi di duplicazione. Per esempio,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Nel programma precedente, se l' person
oggetto viene utilizzato anche da un altro programma, non si desidera aggiungere una proprietà a cui è possibile accedere o modificare da un altro programma. Quindi Symbol
, usando , crei una proprietà unica che puoi usare.
Ora, se anche l'altro programma deve utilizzare una proprietà denominata id , è sufficiente aggiungere un simbolo denominato id
e non ci saranno problemi di duplicazione. Per esempio,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Nel programma precedente, anche se viene utilizzato lo stesso nome per memorizzare i valori, il Symbol
tipo di dati avrà un valore univoco.
Nel programma precedente, se fosse stata utilizzata la chiave stringa, il programma successivo avrebbe modificato il valore della proprietà. Per esempio,
let person = ( name: "Jack" ); // using string as key person.id = 12; console.log(person.id); // 12 // Another program overwrites value person.id = 'Another value'; console.log(person.id); // Another value
Nel programma sopra, il secondo user.id
sovrascrive il valore precedente.
Metodi dei simboli
Sono disponibili vari metodi con Symbol.
Metodo | Descrizione |
---|---|
for() | Cerca simboli esistenti |
keyFor() | Restituisce una chiave di simboli condivisa dal registro dei simboli globale. |
toSource() | Restituisce una stringa contenente l'origine dell'oggetto Symbol |
toString() | Restituisce una stringa contenente la descrizione del simbolo |
valueOf() | Restituisce il valore primitivo dell'oggetto Symbol. |
Esempio: metodi di simboli
// get symbol by name let sym = Symbol.for('hello'); let sym1 = Symbol.for('id'); // get name by symbol console.log( Symbol.keyFor(sym) ); // hello console.log( Symbol.keyFor(sym1) ); // id
Proprietà dei simboli
Proprietà | Descrizione |
---|---|
asyncIterator | Restituisce il AsyncIterator predefinito per un oggetto |
hasInstance | Determina se un oggetto costruttore riconosce un oggetto come sua istanza |
isConcatSpreadable | Indica se un oggetto deve essere appiattito ai suoi elementi dell'array |
iterator | Restituisce l'iteratore predefinito per un oggetto |
match | Corrisponde a una stringa |
matchAll | Restituisce un iteratore che restituisce corrispondenze dell'espressione regolare su una stringa |
replace | Sostituisce le sottostringhe corrispondenti di una stringa |
search | Restituisce l'indice all'interno di una stringa che corrisponde all'espressione regolare |
split | Divide una stringa in corrispondenza degli indici che corrispondono a un'espressione regolare |
species | Crea oggetti derivati |
toPrimitive | Converte un oggetto in un valore primitivo |
toStringTag | Fornisce la descrizione predefinita di un oggetto |
description | Restituisce una stringa contenente la descrizione del simbolo |
Esempio: Esempio di proprietà del simbolo
const x = Symbol('hey'); // description property console.log(x.description); // hey const stringArray = ('a', 'b', 'c'); const numberArray = (1, 2, 3); // isConcatSpreadable property numberArray(Symbol.isConcatSpreadable) = false; let result = stringArray.concat(numberArray); console.log(result); // ("a", "b", "c", (1, 2, 3))