W tym samouczku nauczysz się o symbolu JavaScript przy pomocy przykładów.
Symbol JavaScript
JavaScript ES6 wprowadził nowy prymitywny typ danych o nazwie Symbol
. Symbole są niezmienne (nie można ich zmienić) i są niepowtarzalne. Na przykład,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Chociaż wartość1 i wartość2 zawierają ten sam opis, są różne.
Tworzenie symbolu
Używasz Symbol()
funkcji do tworzenia pliku Symbol
. Na przykład,
// creating symbol const x = Symbol() typeof x; // symbol
Jako opis można przekazać opcjonalny ciąg. Na przykład,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Opis symbolu dostępu
Aby uzyskać dostęp do opisu symbolu, używamy .
operatora. Na przykład,
const x = Symbol('hey'); console.log(x.description); // hey
Dodaj symbol jako klucz obiektu
Możesz dodać symbole jako klucz w obiekcie za pomocą nawiasów kwadratowych ()
. Na przykład,
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)
Symbole nie są zawarte w for… in Loop
for… in
Pętli nie iteracyjnego właściwości symbolicznych. Na przykład,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Wynik
imię Wiek
Korzyści z używania symboli w obiekcie
Jeśli ten sam fragment kodu jest używany w różnych programach, lepiej jest użyć go Symbols
w kluczu obiektu. Dzieje się tak, ponieważ możesz użyć tej samej nazwy klucza w różnych kodach i uniknąć problemów z powielaniem. Na przykład,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
W powyższym programie, jeśli person
obiekt jest również używany przez inny program, nie chciałbyś dodawać właściwości, do której inny program może uzyskać dostęp lub zmienić. Dlatego używając Symbol
, tworzysz unikalną właściwość, której możesz użyć.
Teraz, jeśli inny program również musi używać właściwości o nazwie id , po prostu dodaj symbol o nazwie id
i nie będzie problemów z powielaniem. Na przykład,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
W powyższym programie, nawet jeśli ta sama nazwa jest używana do przechowywania wartości, Symbol
typ danych będzie miał unikalną wartość.
W powyższym programie, gdyby został użyty klucz łańcuchowy, to późniejszy program zmieniłby wartość właściwości. Na przykład,
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
W powyższym programie druga user.id
nadpisuje poprzednią wartość.
Metody symboli
W programie Symbol dostępne są różne metody.
metoda | Opis |
---|---|
for() | Wyszukuje istniejące symbole |
keyFor() | Zwraca współużytkowany klucz symbolu z globalnego rejestru symboli. |
toSource() | Zwraca ciąg zawierający źródło obiektu Symbol |
toString() | Zwraca ciąg zawierający opis symbolu |
valueOf() | Zwraca pierwotną wartość obiektu Symbol. |
Przykład: metody symboli
// 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
Właściwości symbolu
Nieruchomości | Opis |
---|---|
asyncIterator | Zwraca domyślny AsyncIterator dla obiektu |
hasInstance | Określa, czy obiekt konstruktora rozpoznaje obiekt jako jego wystąpienie |
isConcatSpreadable | Wskazuje, czy obiekt powinien zostać spłaszczony do elementów tablicy |
iterator | Zwraca domyślny iterator dla obiektu |
match | Dopasowuje do ciągu |
matchAll | Zwraca iterator, który zwraca wyniki wyrażenia regularnego względem ciągu |
replace | Zastępuje dopasowane podciągi ciągu |
search | Zwraca indeks w ciągu, który pasuje do wyrażenia regularnego |
split | Dzieli ciąg według indeksów pasujących do wyrażenia regularnego |
species | Tworzy obiekty pochodne |
toPrimitive | Konwertuje obiekt na wartość pierwotną |
toStringTag | Podaje domyślny opis obiektu |
description | Zwraca ciąg zawierający opis symbolu |
Przykład: Przykład właściwości symbolu
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))