JavaScript Simvollarini o'rganing: ulardan ob'ekt kengaytirilishi va xavfsiz metama'lumotlar xotirasi uchun noyob xususiyat kalitlari sifatida qanday foydalanishni bilib oling. Ilg'or dasturlash usullarini oching.
JavaScript Simvollari: Unikal Xususiyat Kalitlari va Metama’lumotlarni Saqlash
ECMAScript 2015 (ES6) da taqdim etilgan JavaScript Simvollari ob'ektlar uchun noyob va o'zgarmas xususiyat kalitlarini yaratish uchun kuchli mexanizmni taklif etadi. Satrlardan farqli o'laroq, Simvollar noyob bo'lishi kafolatlanadi, xususiyat nomlarining tasodifiy to'qnashuvini oldini oladi va shaxsiy xususiyatlarni amalga oshirish va metama'lumotlarni saqlash kabi ilg'or dasturlash usullarini yoqadi. Ushbu maqola JavaScript Simvollariga oid keng qamrovli ma'lumot beradi, ularning yaratilishi, ishlatilishi, mashhur Simvollari va amaliy ilovalarini qamrab oladi.
JavaScript Simvollari nima?
Simvol - bu JavaScript-dagi ibtidoiy ma'lumot turi, xuddi raqamlar, satrlar va booleanlar kabi. Biroq, Simvollarning o'ziga xos xususiyati bor: yaratilgan har bir Simvol boshqa barcha Simvollardan noyob va farqli bo'lishi kafolatlanadi. Ushbu unikalik Simvollarni ob'ektlardagi xususiyat kalitlari sifatida ishlatish uchun ideal qiladi, bu xususiyatlar tasodifan qayta yozilmasligini yoki kodning boshqa qismlari tomonidan kirilmasligini ta'minlaydi. Bu, ayniqsa, ob'ektga qo'shilishi mumkin bo'lgan xususiyatlarni to'liq nazorat qilmasangiz, kutubxonalar yoki freymvorklar bilan ishlashda foydalidir.
Simvollarni ob'ektlarga maxsus, yashirin yorliqlarni qo'shish usuli sifatida o'ylab ko'ring, ularga faqat siz (yoki o'ziga xos Simvolni biladigan kod) kira oladi. Bu amalda shaxsiy bo'lgan xususiyatlarni yaratishga yoki mavjud xususiyatlarga xalaqit bermasdan ob'ektlarga metama'lumotlarni qo'shishga imkon beradi.
Simvollarni Yaratish
Simvollar Symbol() konstruktoridan foydalanib yaratiladi. Konstruktor ixtiyoriy satr argumentini oladi, bu Simvol uchun tavsif bo'lib xizmat qiladi. Ushbu tavsif disk raskadrovka va identifikatsiya uchun foydalidir, ammo Simvolning unikaligiga ta'sir qilmaydi. Bir xil tavsif bilan yaratilgan ikkita Simvol hali ham farqlidir.
Asosiy Simvol Yaratish
Mana, asosiy Simvolni qanday yaratasiz:
const mySymbol = Symbol();
const anotherSymbol = Symbol("Mening Tavsifim");
console.log(mySymbol); // Natija: Symbol()
console.log(anotherSymbol); // Natija: Symbol(Mening Tavsifim)
console.log(typeof mySymbol); // Natija: symbol
Ko'rib turganingizdek, typeof operatori mySymbol va anotherSymbol haqiqatan ham symbol turiga tegishli ekanligini tasdiqlaydi.
Simvollar Unikaldir
Simvollarning unikaligini ta'kidlash uchun ushbu misolni ko'rib chiqing:
const symbol1 = Symbol("misol");
const symbol2 = Symbol("misol");
console.log(symbol1 === symbol2); // Natija: false
Garchi ikkala Simvol ham bir xil ("misol") tavsif bilan yaratilgan bo'lsa ham, ular teng emas. Bu Simvollarning asosiy unikaligini ko'rsatadi.
Simvollarni Xususiyat Kalitlari Sifatida Ishlatish
Simvollarning asosiy qo'llanilishi ob'ektlardagi xususiyat kalitlari sifatida. Simvolni xususiyat kaliti sifatida ishlatganda, Simvolni kvadrat qavslarga olish muhimdir. Buning sababi shundaki, JavaScript Simvollarni ifodalar sifatida qabul qiladi va ifodani baholash uchun kvadrat qavslar yozuvi talab qilinadi.
Ob'ektlarga Simvol Xususiyatlarini Qo'shish
Ob'ektga Simvol xususiyatlarini qanday qo'shishga misol:
const myObject = {};
const symbolA = Symbol("propertyA");
const symbolB = Symbol("propertyB");
myObject[symbolA] = "A qiymati";
myObject[symbolB] = "B qiymati";
console.log(myObject[symbolA]); // Natija: A qiymati
console.log(myObject[symbolB]); // Natija: B qiymati
Ushbu misolda symbolA va symbolB myObject ichida qiymatlarni saqlash uchun noyob kalitlar sifatida ishlatiladi.
Nima uchun Simvollarni Xususiyat Kalitlari Sifatida Ishlatish Kerak?
Simvollarni xususiyat kalitlari sifatida ishlatish bir qator afzalliklarni beradi:
- Xususiyat Nomi To'qnashuvini Oldini Olish: Simvollar xususiyat nomlari noyob bo'lishini kafolatlaydi va tashqi kutubxonalar yoki freymvorklar bilan ishlaganda tasodifiy qayta yozishning oldini oladi.
- Inkapsulyatsiya: Simvollardan amalda shaxsiy bo'lgan xususiyatlarni yaratish uchun foydalanish mumkin, chunki ular sanab bo'lmaydi va ob'ektdan tashqaridan kirish qiyin.
- Metama'lumotlarni Saqlash: Simvollardan mavjud xususiyatlariga xalaqit bermasdan ob'ektlarga metama'lumotlarni biriktirish uchun foydalanish mumkin.
Simvollar va Sanash
Simvol xususiyatlarining muhim xususiyati shundaki, ularni sanab bo'lmaydi. Bu shuni anglatadiki, ular for...in looplar, Object.keys() yoki Object.getOwnPropertyNames() kabi usullardan foydalanib ob'ekt xususiyatlarini takrorlashda kiritilmaydi.
Sanab bo'lmaydigan Simvol Xususiyatlariga Misol
const myObject = {
name: "Misol",
age: 30
};
const symbolC = Symbol("sir");
myObject[symbolC] = "Eng katta sir!";
console.log(Object.keys(myObject)); // Natija: [ 'name', 'age' ]
console.log(Object.getOwnPropertyNames(myObject)); // Natija: [ 'name', 'age' ]
for (let key in myObject) {
console.log(key); // Natija: name, age
}
Ko'rib turganingizdek, symbolC Simvol xususiyati Object.keys(), Object.getOwnPropertyNames() yoki for...in loopining chiqishida kiritilmagan. Bu xatti-harakat Simvollardan foydalanishning inkapsulyatsiya afzalliklariga hissa qo'shadi.
Simvol Xususiyatlariga Kirish
Simvol xususiyatlariga kirish uchun siz Object.getOwnPropertySymbols() dan foydalanishingiz kerak, bu berilgan ob'ektda to'g'ridan-to'g'ri topilgan barcha Simvol xususiyatlarining massivini qaytaradi.
const symbolProperties = Object.getOwnPropertySymbols(myObject);
console.log(symbolProperties); // Natija: [ Symbol(sir) ]
console.log(myObject[symbolProperties[0]]); // Natija: Eng katta sir!
Ushbu usul sizga boshqa vositalar orqali sanab bo'lmaydigan Simvol xususiyatlarini olish va ular bilan ishlashga imkon beradi.
Mashhur Simvollar
JavaScript oldindan belgilab qo'yilgan Simvollar to'plamini taqdim etadi, ular "mashhur Simvollar" deb nomlanadi. Ushbu Simvollar tilning o'ziga xos ichki xatti-harakatlarini ifodalaydi va ob'ektlarning xatti-harakatlarini ma'lum vaziyatlarda sozlash uchun ishlatilishi mumkin. Mashhur Simvollar Symbol konstruktorining xususiyatlari, masalan, Symbol.iterator, Symbol.toStringTag va Symbol.hasInstance.
Umumiy Mashhur Simvollar
Mana eng ko'p ishlatiladigan mashhur Simvollardan ba'zilari:
Symbol.iterator: Ob'ekt uchun sukut bo'yicha iteratorni belgilaydi. U ob'ekt elementlarini takrorlash uchunfor...oflooplar tomonidan ishlatiladi.Symbol.toStringTag:Object.prototype.toString()chaqirilganda ob'ekt uchun maxsus satr tavsifini belgilaydi.Symbol.hasInstance: Ob'ekt sinfning namunasi hisoblanadimi yoki yo'qligini aniqlaydi. Uinstanceofoperatori tomonidan ishlatiladi.Symbol.toPrimitive: Ob'ektni ibtidoiy qiymatga aylantiradigan usulni belgilaydi.Symbol.asyncIterator: Ob'ekt uchun sukut bo'yicha asinxron iteratorni belgilaydi. Ufor await...oflooplar tomonidan ishlatiladi.
Symbol.iterator dan Foydalanish
Symbol.iterator eng foydali mashhur Simvollardan biridir. Bu sizga for...of looplar yordamida ob'ekt qanday takrorlanishi kerakligini belgilashga imkon beradi.
const myIterable = {
data: [1, 2, 3, 4, 5],
[Symbol.iterator]() {
let index = 0;
return {
next: () => {
if (index < this.data.length) {
return { value: this.data[index++], done: false };
} else {
return { value: undefined, done: true };
}
}
};
}
};
for (const value of myIterable) {
console.log(value); // Natija: 1, 2, 3, 4, 5
}
Ushbu misolda biz Symbol.iterator yordamida myIterable uchun maxsus iteratorni belgilaymiz. Iterator data massividagi qiymatlarni massiv oxiriga yetguncha birma-bir qaytaradi.
Symbol.toStringTag dan Foydalanish
Symbol.toStringTag Object.prototype.toString() dan foydalanganda ob'ektning satr ko'rinishini sozlashga imkon beradi.
class MyClass {}
MyClass.prototype[Symbol.toStringTag] = "MyCustomClass";
const instance = new MyClass();
console.log(Object.prototype.toString.call(instance)); // Natija: [object MyCustomClass]
Symbol.toStringTagsiz chiqish [object Object] bo'ladi. Ushbu Simvol sizga batafsilroq satr ko'rinishini taqdim etishga imkon beradi.
Simvollarning Amaliy Ilovalari
Simvollarning JavaScriptni ishlab chiqishda turli amaliy ilovalari mavjud. Mana bir nechta misollar:
Shaxsiy Xususiyatlarni Amalga Oshirish
JavaScriptda boshqa ba'zi tillar singari haqiqiy shaxsiy xususiyatlar bo'lmasa-da, Simvollardan shaxsiy xususiyatlarni simulyatsiya qilish uchun foydalanish mumkin. Simvolni xususiyat kaliti sifatida ishlatish va Simvolni yopilish doirasida saqlash orqali siz xususiyatga tashqi kirishni oldini olasiz.
const createCounter = () => {
const count = Symbol("count");
const obj = {
[count]: 0,
increment() {
this[count]++;
},
getCount() {
return this[count];
}
};
return obj;
};
const counter = createCounter();
counter.increment();
console.log(counter.getCount()); // Natija: 1
console.log(counter[Symbol("count")]); // Natija: undefined (tashqi doirada)
Ushbu misolda count Simvoli createCounter funktsiyasi ichida belgilangan, bu uni yopilishdan tashqarida kirish imkonsiz qiladi. Haqiqatan ham shaxsiy bo'lmasa-da, bu yondashuv yaxshi darajadagi inkapsulyatsiyani ta'minlaydi.
Ob'ektlarga Metama'lumotlarni Biriktirish
Simvollardan mavjud xususiyatlariga xalaqit bermasdan ob'ektlarga metama'lumotlarni biriktirish uchun foydalanish mumkin. Bu ob'ektga standart xususiyatga kirish orqali sanab bo'lmaydigan yoki kirish mumkin bo'lmagan qo'shimcha ma'lumot qo'shishingiz kerak bo'lganda foydalidir.
const myElement = document.createElement("div");
const metadataKey = Symbol("metadata");
myElement[metadataKey] = {
author: "Jon Dou",
timestamp: Date.now()
};
console.log(myElement[metadataKey]); // Natija: { author: 'Jon Dou', timestamp: 1678886400000 }
Bu erda DOM elementiga standart xususiyatlariga yoki atributlariga ta'sir qilmasdan metama'lumotlarni biriktirish uchun Simvol ishlatiladi.
Uchinchi Tomon Ob'ektlarini Kengaytirish
Uchinchi tomon kutubxonalari yoki freymvorklari bilan ishlaganda, Simvollardan xususiyat nomlarining to'qnashuvi xavfisiz ob'ektlarni maxsus funksionallik bilan kengaytirish uchun foydalanish mumkin. Bu sizga asl kodni o'zgartirmasdan ob'ektlarga xususiyatlar yoki xatti-harakatlarni qo'shishga imkon beradi.
// 'libraryObject' tashqi kutubxonadan olingan ob'ekt deb faraz qilaylik
const libraryObject = {
name: "Kutubxona Ob'ekti",
version: "1.0"
};
const customFunction = Symbol("customFunction");
libraryObject[customFunction] = () => {
console.log("Maxsus funktsiya chaqirildi!");
};
libraryObject[customFunction](); // Natija: Maxsus funktsiya chaqirildi!
Ushbu misolda libraryObjectga mavjud xususiyatlar bilan to'qnashmasligini ta'minlab, Simvol yordamida maxsus funktsiya qo'shiladi.
Simvollar va Global Simvol Ro'yxati
Mahalliy Simvollarni yaratishdan tashqari, JavaScript global Simvol ro'yxatini taqdim etadi. Ushbu ro'yxat sizga dasturingizning turli qismlarida yoki hatto turli JavaScript muhitlarida (masalan, brauzerdagi turli xil iframlarda) umumiy bo'lgan Simvollarni yaratish va olishga imkon beradi.
Global Simvol Ro'yxatidan Foydalanish
Global ro'yxatdan Simvolni yaratish yoki olish uchun siz Symbol.for() usulidan foydalanasiz. Ushbu usul Simvol uchun kalit bo'lib xizmat qiladigan satr argumentini oladi. Agar berilgan kalitga ega bo'lgan Simvol ro'yxatda allaqachon mavjud bo'lsa, Symbol.for() mavjud Simvolni qaytaradi. Aks holda, u berilgan kalitga ega yangi Simvolni yaratadi va uni ro'yxatga qo'shadi.
const globalSymbol1 = Symbol.for("myGlobalSymbol");
const globalSymbol2 = Symbol.for("myGlobalSymbol");
console.log(globalSymbol1 === globalSymbol2); // Natija: true
console.log(Symbol.keyFor(globalSymbol1)); // Natija: myGlobalSymbol
Ushbu misolda globalSymbol1 va globalSymbol2 ikkalasi ham global ro'yxatdagi bir xil Simvolga ishora qiladi. Symbol.keyFor() usuli ro'yxatdagi Simvol bilan bog'langan kalitni qaytaradi.
Global Simvol Ro'yxatining Afzalliklari
Global Simvol ro'yxati bir qator afzalliklarni beradi:
- Simvolni Baham Ko'rish: Dasturingizning turli qismlarida yoki hatto turli JavaScript muhitlarida Simvollarni baham ko'rishga imkon beradi.
- Muvofiqlik: Kodning turli qismlarida bir xil Simvolning doimiy ravishda ishlatilishini ta'minlaydi.
- O'zaro Ishlash: Simvollarni baham ko'rishga muhtoj bo'lgan turli kutubxonalar yoki freymvorklar o'rtasida o'zaro ishlashni osonlashtiradi.
Simvollardan Foydalanish Bo'yicha Eng Yaxshi Amaliyotlar
Simvollar bilan ishlaganda, kodingiz aniq, saqlanadigan va samarali bo'lishini ta'minlash uchun ba'zi eng yaxshi amaliyotlarga rioya qilish muhimdir:
- Tavsifli Simvol Tavsiflaridan Foydalaning: Disk raskadrovka va identifikatsiyaga yordam berish uchun Simvollarni yaratishda mazmunli tavsiflarni taqdim eting.
- Global Simvolning Ifloslanishidan Saqlaning: Global Simvol ro'yxatini ifloslantirmaslik uchun iloji boricha mahalliy Simvollardan foydalaning.
- Simvolning Ishlatilishini Hujjatlashtiring: O'qilishi va saqlanishini yaxshilash uchun Simvollarning maqsadini va ishlatilishini kodingizda aniq hujjatlashtiring.
- Ishlash Imkoniyatlarini Ko'rib Chiqing: Simvollar odatda samarali bo'lsa-da, Simvollardan haddan tashqari foydalanish ishlashga potentsial ta'sir qilishi mumkin, ayniqsa keng ko'lamli ilovalarda.
Turli Mamlakatlardan Olingan Haqiqiy Dunyo Misollari
Simvollardan foydalanish butun dunyo bo'ylab turli xil dasturiy ta'minotni ishlab chiqish landshaftlariga tarqaladi. Mana turli mintaqalar va sohalarga moslashtirilgan ba'zi kontseptual misollar:
- Elektron tijorat platformasi (Global): Katta xalqaro elektron tijorat platformasi mahsulot ma'lumotlarini ko'rsatish uchun foydalanuvchi imtiyozlarini saqlash uchun Simvollardan foydalanadi. Bu turli mamlakatlardagi (masalan, Evropadagi GDPR) ma'lumotlar maxfiyligi qoidalariga rioya qilgan holda asosiy mahsulot ma'lumotlar tuzilmalarini o'zgartirmasdan foydalanuvchi tajribasini shaxsiylashtirishga yordam beradi.
- Sog'liqni saqlash tizimi (Evropa): Evropa sog'liqni saqlash tizimi bemor yozuvlarini xavfsizlik darajalari bilan belgilash uchun Simvollardan foydalanadi va shaxsiy tibbiy ma'lumotlarga faqat vakolatli xodimlar kirishini ta'minlaydi. Bu ma'lumotlarning tasodifiy buzilishining oldini olish uchun Simvol unikaligidan foydalanadi va qat'iy sog'liqni saqlash maxfiyligi qonunlariga mos keladi.
- Moliya muassasasi (Shimoliy Amerika): Shimoliy Amerika banki qo'shimcha firibgarlik tahlilini talab qiladigan operatsiyalarni belgilash uchun Simvollardan foydalanadi. Muntazam qayta ishlash tartiblariga kira olmaydigan ushbu Simvollar moliyaviy jinoyatlar bilan bog'liq xavflarni minimallashtirib, xavfsizlikni kuchaytirish uchun ixtisoslashgan algoritmlarni ishga tushiradi.
- Ta'lim platformasi (Osiyo): Osiyo ta'lim platformasi o'quv resurslari haqidagi metama'lumotlarni, masalan, qiyinchilik darajasi va maqsadli auditoriyani saqlash uchun Simvollardan foydalanadi. Bu talabalar uchun moslashtirilgan o'quv yo'nalishlarini yoqadi va asl mazmunni o'zgartirmasdan ularning ta'lim tajribasini optimallashtiradi.
- Ta'minot zanjirini boshqarish (Janubiy Amerika): Janubiy Amerika logistika kompaniyasi yuklarni haroratni nazorat qiluvchi transport yoki xavfli materiallar tartib-qoidalari kabi maxsus ishlov berishni talab qiladigan yuklarni belgilash uchun Simvollardan foydalanadi. Bu sezgir narsalarga tegishli tarzda ishlov berilishini, xavflarni minimallashtirishni va xalqaro yuk tashish qoidalariga rioya qilishni ta'minlaydi.
Xulosa
JavaScript Simvollari - bu kodingizning xavfsizligini, inkapsulyatsiyasini va kengayishini oshirishi mumkin bo'lgan kuchli va ko'p qirrali xususiyatdir. Noyob xususiyat kalitlarini va metama'lumotlarni saqlash mexanizmini taqdim etish orqali Simvollar sizga yanada mustahkam va saqlanadigan ilovalarni yozishga imkon beradi. Ilg'or dasturlash usullarini o'zlashtirishni istagan har qanday JavaScript dasturchisi uchun Simvollardan qanday samarali foydalanishni tushunish muhimdir. Shaxsiy xususiyatlarni amalga oshirishdan tortib ob'ekt xatti-harakatlarini sozlashgacha, Simvollar kodingizni yaxshilash uchun keng imkoniyatlarni taklif etadi.
Siz veb-ilovalar, server tomonidagi ilovalar yoki buyruq satri vositalarini yaratasizmi, JavaScript kodingizning sifati va xavfsizligini oshirish uchun Simvollardan foydalanishni o'ylab ko'ring. Mashhur Simvollarni o'rganing va ushbu kuchli xususiyatning to'liq salohiyatini kashf qilish uchun turli xil foydalanish holatlari bilan tajriba o'tkazing.