JS Symbol tipi
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:
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 »
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.iteratorSymbol.asyncIteratorSymbol.toStringTagSymbol.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!
