Ebben az oktatóanyagban példák segítségével megismerheti a JavaScript-szimbólumot.
JavaScript szimbólum
A JavaScript ES6 új primitív adattípust vezetett be Symbol
. A szimbólumok változhatatlanok (nem változtathatók meg) és egyediek. Például,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Bár az 1. és 2. érték ugyanazt a leírást tartalmazza, különböznek egymástól.
Szimbólum létrehozása
A Symbol()
függvény segítségével létrehozhatja a Symbol
. Például,
// creating symbol const x = Symbol() typeof x; // symbol
Adhat át egy opcionális karakterláncot leírásként. Például,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Hozzáférési szimbólum leírása
A szimbólum leírásához az .
operátort használjuk . Például,
const x = Symbol('hey'); console.log(x.description); // hey
A szimbólum hozzáadása objektumkulcsként
Szimbólumokat hozzáadhat kulcsként egy objektumhoz szögletes zárójelben ()
. Például,
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)
A szimbólumok nem szerepelnek a… hurokban
A for… in
ciklus nem ismétli a szimbolikus tulajdonságokat. Például,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Kimenet
név életkor
A szimbólumok objektumban történő használatának előnyei
Ha ugyanazt a kódrészletet használják különféle programokban, akkor jobb Symbols
az objektumkulcsban használni . Ez azért van, mert ugyanazt a kulcsnevet különböző kódokban használhatja, és elkerülheti az ismétlődési problémákat. Például,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
A fenti programban, ha az person
objektumot egy másik program is használja, akkor nem szeretne olyan tulajdonságot hozzáadni, amelyhez egy másik program hozzáférhet vagy módosíthatja. Ezért a használatával Symbol
létrehoz egy egyedi tulajdonságot, amelyet felhasználhat.
Most, ha a másik programnak szintén egy id nevű tulajdonságot kell használnia , csak adjon hozzá egy nevű szimbólumot, id
és nem lesznek másolási problémák. Például,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
A fenti programban még akkor is, ha ugyanazt a nevet használják értékek tárolására, az Symbol
adattípusnak egyedi értéke lesz.
A fenti programban, ha a string kulcsot használták, akkor a későbbi program megváltoztatta a tulajdonság értékét. Például,
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
A fenti programban a második user.id
felülírja az előző értéket.
Szimbólum módszerek
A Symbol különféle módszerek állnak rendelkezésre.
Módszer | Leírás |
---|---|
for() | Meglévő szimbólumok keresése |
keyFor() | Visszaad egy megosztott szimbólumkulcsot a globális szimbólumregiszterből. |
toSource() | A Symbol objektum forrását tartalmazó karakterláncot ad vissza |
toString() | A szimbólum leírását tartalmazó karakterláncot ad vissza |
valueOf() | Visszaadja a Symbol objektum primitív értékét. |
Példa: Szimbólum módszerek
// 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
Szimbólum tulajdonságai
Tulajdonságok | Leírás |
---|---|
asyncIterator | Visszaadja az objektum alapértelmezett AsyncIterator-ját |
hasInstance | Meghatározza, hogy egy konstruktor objektum felismer-e egy objektumot példányaként |
isConcatSpreadable | Jelzi, hogy egy objektumot el kell-e lapítani a tömbelemeihez |
iterator | Visszaadja az objektum alapértelmezett iterátorát |
match | Mérkőzések egy húr ellen |
matchAll | Visszaad egy olyan iterátort, amely a reguláris kifejezés egy karakterlánchoz való egyezését adja |
replace | A karakterlánc egyeztetett alszövegeit helyettesíti |
search | Az indexet adja vissza a karakterláncban, amely megfelel a reguláris kifejezésnek |
split | Hasít egy karakterláncot a szabályos kifejezésnek megfelelő indexeken |
species | Létrehozott objektumokat hoz létre |
toPrimitive | Az objektumot primitív értékgé alakítja |
toStringTag | Megadja az objektum alapértelmezett leírását |
description | Karakterláncot ad vissza, amely a szimbólum leírását tartalmazza |
Példa: Szimbólum tulajdonságok példa
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))