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… inPę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 Symbolsw 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 personobiekt 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 idi 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, Symboltyp 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.idnadpisuje 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))








