Sök…
Syntax
- Symbol()
- Symbolen (beskrivning)
- Symbol.toString ()
Anmärkningar
ECMAScript 2015-specifikation 19.4 Symboler
Grunderna i primitiv symbol
Symbol
är en ny primitiv typ i ES6. Symboler används huvudsakligen som egenskapsknappar , och en av dess huvudsakliga egenskaper är att de är unika , även om de har samma beskrivning. Det betyder att de aldrig kommer att ha ett namnkollision med någon annan egendomsknapp som är en symbol
eller string
.
const MY_PROP_KEY = Symbol();
const obj = {};
obj[MY_PROP_KEY] = "ABC";
console.log(obj[MY_PROP_KEY]);
I det här exemplet skulle resultatet av console.log
vara ABC
.
Du kan också ha namngivna symboler som:
const APPLE = Symbol('Apple');
const BANANA = Symbol('Banana');
const GRAPE = Symbol('Grape');
Var och en av dessa värden är unika och kan inte åsidosättas.
Att tillhandahålla en valfri parameter (description)
när du skapar primitiva symboler kan användas för felsökning men inte för att få åtkomst till själva symbolen (men se Symbol.for()
exempel för ett sätt att registrera / leta upp globala delade symboler).
Konvertera en symbol till en sträng
Till skillnad från de flesta andra JavaScript-objekt konverteras inte symboler automatiskt till en sträng när du utför sammankoppling.
let apple = Symbol('Apple') + ''; // throws TypeError!
Istället måste de uttryckligen omvandlas till en sträng vid behov (till exempel för att få en textbeskrivning av den symbol som kan användas i en debug-meddelande) med toString
metoden eller String
konstruktören.
const APPLE = Symbol('Apple');
let str1 = APPLE.toString(); // "Symbol(Apple)"
let str2 = String(APPLE); // "Symbol(Apple)"
Använd Symbol.for () för att skapa globala, delade symboler
Metoden Symbol.for
låter dig registrera och slå upp globala symboler efter namn. Första gången den kallas med en given nyckel skapar den en ny symbol och lägger till den i registret.
let a = Symbol.for('A');
Nästa gång du ringer Symbol.for('A')
kommer samma symbol att returneras istället för en ny (i motsats till Symbol('A')
som skulle skapa en ny, unik symbol som råkar ha samma beskrivning ).
a === Symbol.for('A') // true
men
a === Symbol('A') // false