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… inciclo 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 Symbolsnella 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' personoggetto 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 ide 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 Symboltipo 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.idsovrascrive 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))








