Szukaj…
Składnia
- Symbol()
- Symbol (opis)
- Symbol.toString ()
Uwagi
Specyfikacja ECMAScript 2015 19.4 Symbole
Podstawy pierwotnego typu symbolu
Symbol
to nowy prymitywny typ w ES6. Symbole są używane głównie jako klucze właściwości , a jedną z ich głównych cech jest to, że są unikalne , nawet jeśli mają taki sam opis. Oznacza to, że nigdy nie będą mieli konfliktu nazw z żadnym innym kluczem właściwości, który jest symbol
lub string
.
const MY_PROP_KEY = Symbol();
const obj = {};
obj[MY_PROP_KEY] = "ABC";
console.log(obj[MY_PROP_KEY]);
W tym przykładzie wynikiem console.log
będzie ABC
.
Możesz także nazwać Symbole, takie jak:
const APPLE = Symbol('Apple');
const BANANA = Symbol('Banana');
const GRAPE = Symbol('Grape');
Każda z tych wartości jest unikalna i nie można jej zastąpić.
Podanie opcjonalnego parametru (description)
podczas tworzenia prymitywnych symboli może być użyte do debugowania, ale nie do uzyskania dostępu do samego symbolu (ale zobacz przykład Symbol.for()
aby Symbol.for()
się, jak zarejestrować / wyszukać globalne wspólne symbole).
Konwertowanie symbolu na ciąg
W przeciwieństwie do większości innych obiektów JavaScript, symbole nie są automatycznie konwertowane na ciąg znaków podczas wykonywania konkatenacji.
let apple = Symbol('Apple') + ''; // throws TypeError!
Zamiast tego należy je jawnie przekonwertować na ciąg, gdy jest to konieczne (na przykład, aby uzyskać tekstowy opis symbolu, który może być użyty w komunikacie debugowania) przy użyciu metody toString
lub konstruktora String
.
const APPLE = Symbol('Apple');
let str1 = APPLE.toString(); // "Symbol(Apple)"
let str2 = String(APPLE); // "Symbol(Apple)"
Używanie Symbol.for () do tworzenia globalnych, wspólnych symboli
Metoda Symbol.for
umożliwia rejestrację i wyszukiwanie symboli globalnych według nazwy. Przy pierwszym wywołaniu z danym kluczem tworzy nowy symbol i dodaje go do rejestru.
let a = Symbol.for('A');
Następnym razem, gdy wywołasz Symbol.for('A')
, ten sam symbol zostanie zwrócony zamiast nowego (w przeciwieństwie do Symbol('A')
który utworzyłby nowy, unikalny symbol o takim samym opisie ).
a === Symbol.for('A') // true
ale
a === Symbol('A') // false