Die simbool in Javascript

Leer simbole ken: Die unieke datatipe vir voorwerpeienskappe

In JavaScript is simbole unieke datatipes wat gebruik kan word om identifiseerders vir voorwerpeienskappe te skep. Simbole is nie soos stringe of getalle nie, en hulle kan nie na daardie datatipes omgeskakel word nie. Dit is wat hulle ideaal maak om identifiseerders te skep.

Gebruik van simbole in Javascript

Wanneer jy 'n simbool skep, kan jy dit opsioneel 'n beskrywing gee. Dit is nuttig vir ontfouting, maar dit is nie nodig nie.

Die skep van 'n simbool is eenvoudig.

const mySymbol = Symbol();

Jy kan ook 'n simbool met 'n beskrywing skep.

const mySymbol = Symbol("my description");

As jy veelvuldige simbole met dieselfde beskrywing skep, sal hulle verskillende waardes wees.

const sym1 = Symbol("foo");
const sym2 = Symbol("foo");

// false
console.log(sym1 === sym2);

Wat maak Simbole uniek

Simbole word dikwels as identifiseerders vir voorwerpeienskappe gebruik. Dit is omdat simbole gewaarborg is om uniek te wees, en hulle word nie na snare omgeskakel nie.

const obj = {};
obj[mySymbol] = "bar";

// "bar"
console.log(obj[mySymbol]);

Jy kan simbole as sleutels vir voorwerpeienskappe gebruik, maar jy kan dit nie as eiendomsname (sleutels) in JSON gebruik nie.

const sym = Symbol("foo");
const obj = { [sym]: "bar" };

// {}
console.log(JSON.stringify(obj));

Simbole is nie optelbaar nie, so hulle sal nie verskyn wanneer jy 'n for-in lus op 'n voorwerp gebruik nie.

const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";

for (var key in obj) {
  // undefined
  console.log(key);
}

Jy kan Object.getOwnPropertySymbols gebruik om 'n verskeidenheid van alle simbole op 'n voorwerp te kry.

const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";

const symbols = Object.getOwnPropertySymbols(obj);

// [Symbol(a), Symbol(b)]
console.log(symbols);

Gebruik 'n simbool as 'n iterator

Jy kan die bekende Symbol.iterator gebruik om 'n simbool te kry wat as 'n iterator gebruik kan word.

const arr = [1, 2, 3];
const it = arr[Symbol.iterator]();

// { value: 1, done: false }
console.log(it.next());

// { value: 2, done: false }
console.log(it.next());

// { value: 3, done: false }
console.log(it.next()); 

// { value: undefined, done: true }
console.log(it.next());

'n Meer werklike voorbeeld

Jy kan jou eie simbole skep, maar daar is geen manier om te waarborg dat hulle uniek is nie. As jy 'n unieke simbool benodig, moet jy Symbol() gebruik.

Gestel jy het 'n voorwerp wat 'n persoon verteenwoordig. Jy wil 'n eiendom by hierdie voorwerp voeg wat die persoon se geboortejaar stoor, maar jy wil nie hê dat hierdie eienskap optelbaar moet wees nie. Jy kan dit doen met 'n simbool:

const person = {
  name: "John Doe"
};
const birthYear = Symbol("birth year");
person[birthYear] = "1955";

for (var key in person) {
  // name
  console.log(key); 
}

// 1955
console.log(person[birthYear]);