JS Symbol tipi

ULASHISH

Noyob qiymatlar

Symbol noyob identifikatorni ifodalaydi.

Har bir Symbol qiymati bir xil tavsifga ega bo‘lsa ham, noyobdir.

Symbol - bu yashirin identifikator bo‘lib, unga hech qanday kod tasodifan kira olmaydi.

Symbol’lar yaratish

Symbol yaratish uchun Symbol()’dan foydalaning:

Misol

const id1 = Symbol();
const id2 = Symbol();

Ikkala Symbol bir-biridan farq qiladi:

Misol

const id1 = Symbol();
const id2 = Symbol();

let result = (id1 === id2);
O‘zingiz sinab ko‘ring »

Natija false bo‘ladi.

Har bir ramzning o‘ziga xos qiymati bor.


Symbol tavsiflari

Belgiga tavsif qo‘shishingiz mumkin:

Misol

const id = Symbol("id");

Tavsif faqat debug va o‘qish uchun mo‘ljallangan.

Bu Symbolni noyob qilmaydi.

Misol

const id1 = Symbol("id");
const id2 = Symbol("id");

let result = (id1 === id2);
O‘zingiz sinab ko‘ring »

Natija baribir false bo‘ladi.

Symbols are always unique.

Agar siz bir xil tavsifga ega ikkita belgi yaratsangiz, ular turli qiymatlarga ega bo‘ladi:

Symbol("id") == Symbol("id"); // false

Symbol’larni obyekt kalitlari sifatida ishlatish

Symbol’lar ko‘pincha obyekt xususiyatlarining kalitlari sifatida ishlatiladi.

Bu sizga yashirin yoki noyob xususiyatlarni yaratish imkonini beradi.

Misol

const id = Symbol("id");

const person = {
  firstName: "John",
  lastName: "Doe"
};

person[id] = 123;

O‘zingiz sinab ko‘ring »

Symbol tipi

JavaScript Symbol — Number, String yoki Boolean kabi primitiv ma’lumot tipi.

Belgining JavaScript turi symbol:

Misol

const id = Symbol("id");

let type = typeof id;
O‘zingiz sinab ko‘ring »

Yashirin identifikatorlar

Symbol hech qanday kod tasodifan murojaat qila olmaydigan noyob "yashirin" identifikatorni ifodalaydi.

Misol uchun, agar turli dasturchilar uchinchi tomon kodiga tegishli shaxs obyektiga person.id xususiyatini qo‘shishni xohlasalar, ular bir-birining qiymatlarini aralashtirishlari mumkin.

Symbol() yordamida noyob identifikatorlar yaratish bu muammoni hal qiladi:

Misol

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  eyeColor: "blue"
};

let id = Symbol('id');
person[id] = 140353;

// Now person[id] = 140353
// but person.id is still undefined
O‘zingiz sinab ko‘ring »

Belgilar uchun...da kiritilmagan

Symbol xususiyatlari for...in sikllarida e’tiborga olinmaydi:

Misol

const id = Symbol("id");

const person = {
  firstName: "John",
  lastName: "Doe"
};

person[id] = 123;

let text = "";

for (let x in person) {
  text += x + "<br>";
}

// Display text
O‘zingiz sinab ko‘ring »
Symbol xususiyati ko‘rsatilmaydi.

Belgilar JSON tarkibiga kiritilmagan

Belgilar xususiyatlari JSON.stringify() tomonidan e’tiborga olinmaydi:

Misol

const id = Symbol("id");

const person = {
  name: "John"
};

person[id] = 123;

let text = JSON.stringify(person);
O‘zingiz sinab ko‘ring »


Global Symbol’lar

JavaScript’da global Symbol reyestri mavjud.

Global Symbol yaratish yoki qayta ishlatish uchun Symbol.for()’dan foydalaning:

Misol

const id1 = Symbol.for("id");
const id2 = Symbol.for("id");

let result = (id1 === id2);
O‘zingiz sinab ko‘ring »

Natija true bo‘ladi.


Taniqli (well-known) Symbol’lar

JavaScript well-known Symbols (taniqli Symbol’lar) deb ataladigan o‘rnatilgan Symbol’larni taqdim etadi.

Ushbu belgilar JavaScript xatti-harakatlarini boshqaradi.

Misollar:

  • Symbol.iterator
  • Symbol.asyncIterator
  • Symbol.toStringTag
  • Symbol.toPrimitive

Symbol.iterator

Symbol.iterator Belgisi takrorlanadigan obyektni belgilaydi.

Bu obyektlarni for...of kabi sikllar bilan ishlashiga imkon beradi.

Misol

const myObject = {
  data: ["A", "B", "C"],

  [Symbol.iterator]() {
    let index = 0;
    let data = this.data;

    return {
      next() {
        if (index < data.length) {
          return {value:data[index++], done:false};
        } else {
          return {done:true};
        }
      }
    };
  }
};

let text = "";
for (const x of myObject) {
  text += x + "<br>";
}

// Display text
O‘zingiz sinab ko‘ring »

Symbol’lardan qachon foydalanish kerak

Symbol’lardan quyidagi hollarda foydalaning:

  • Unique object property names
  • Hidden object properties
  • Custom iterable objects
  • Special object behavior

Qachon ramzlardan foydalanmaslik kerak

Kundalik JavaScript kodida belgilar odatda ishlatilmaydi.

Noyob xususiyat kalitlari yoki ilg‘or obyekt harakati kerak bo‘lmasa, Symbollardan foydalanmang.

Oddiy obyekt xususiyatlari uchun esa string nomlardan foydalaning.


Brauzerlarda qo‘llab-quvvatlash

Symbol — ES6 imkoniyati.

ES6 2017 yil iyun oyidan boshlab barcha zamonaviy brauzerlarda to‘liq qo‘llab-quvvatlanadi:

Chrome
51
Edge
15
Firefox
54
Safari
10
Opera
38
May 2016 Apr 2017 Jun 2017 Sep 2016 Jun 2016


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!