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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow