Unicode

JavaScript dasturlari Unicode belgilar to'plami yordamida yoziladi va siz har qanday Unicode belgilardan satrlar va izohlar ichida foydalanishingiz mumkin. Ko‘chirishga qulayligi (portativlik) va tahrirlash osonligi uchun odatda identifikatorlarda faqat ASCII harflari va raqamlaridan foydalanish keng ommalashgan. Lekin bu shunchaki dasturlashdagi qoida (konvensiya) bo'lib, tilning o'zi identifikatorlarda Unicode harflari, raqamlari va ideograflaridan (lekin emojilardan emas) foydalanishga ruxsat beradi. Bu dasturchilar matematik belgilar va ingliz tilidan boshqa tillardagi so'zlarni konstantalar va o'zgaruvchilar sifatida ishlatishi mumkinligini anglatadi:

Unicode Qochish Ketma-ketliklari (Unicode Escape Sequences)

Ba'zi kompyuter uskunalari va dasturiy ta'minoti Unicode belgilarining to'liq to'plamini ko'rsata olmaydi, kirita olmaydi yoki to'g'ri qayta ishlay olmaydi. Eski texnologiyalardan foydalanadigan dasturchilar va tizimlarni qo'llab-quvvatlash uchun, JavaScript bizga faqat ASCII belgilaridan foydalangan holda Unicode belgilarini yozish imkonini beradigan qochish ketma-ketliklarini taqdim etadi. Bu Unicode qochish ketma-ketliklari \u belgilari bilan boshlanadi va ulardan keyin to'rtta o'n oltilik raqam (katta yoki kichik A-F harflaridan foydalangan holda) yoki jingalak qavslar ichiga olingan birdan oltitagacha o'n oltilik raqamlar keladi. Bu Unicode qochish ketma-ketliklari JavaScript satr literallarida, regular ifoda literallarida va identifikatorlarda ishlatilishi mumkin (lekin til kalit so'zlarida emas). Masalan, é belgisi uchun Unicode qochish ketma-ketligi \u00E9dir; quyida bu belgini o'z ichiga olgan o'zgaruvchi nomini yozishning uch xil usuli keltirilgan:

JavaScript’ning dastlabki versiyalari faqat to'rt raqamli qochish ketma-ketligini qo'llab-quvvatlagan. Jingalak qavsli versiya ES6’da 16 bitdan ko'proq joy talab qiladigan Unicode kod nuqtalarini (codepoints), masalan emoji’larni yaxshiroq qo'llab-quvvatlash uchun kiritilgan:

Unicode qochish ketma-ketliklari izohlarda ham ishlatilishi mumkin, lekin izohlar e'tiborga olinmaganligi sababli, ular bu kontekstda shunchaki ASCII belgilari sifatida qaraladi va Unicode sifatida talqin qilinmaydi.

Unicode normalizatsiyasi

Agar siz JavaScript dasturlaringizda ASCII bo'lmagan belgilardan foydalansangiz, Unicode bir xil belgini kodlashning bir nechta usulini ta'minlashini hisobga olishingiz kerak bo'ladi. Masalan, é satri bitta Unicode belgisi \u00E9 sifatida yoki oddiy ASCII e va undan keyin keladigan o‘tkir urg‘u beruvchi birlashtiruvchi belgi (acute accent combining mark) \u0301 sifatida kodlanishi mumkin. Bu ikki kodlash usuli matn muharririda odatda bir xil ko'rinadi, lekin ularning ikkilik kodlashlari turlicha. Bu shuni anglatadiki, JavaScript ularni har xil deb hisoblaydi, bu esa dasturda juda chalkashliklarga olib kelishi mumkin:

Unicode standarti barcha belgilar uchun afzal ko'rilgan kodlash usulini belgilaydi va matnni taqqoslash uchun mos keladigan kanonikal shaklga o'tkazish uchun normalizatsiya jarayonini aniqlaydi. JavaScript o'zi talqin qilayotgan manba kodi allaqachon normalizatsiya qilingan deb hisoblaydi va o'zi hech qanday normalizatsiyani amalga oshirmaydi. Agar siz JavaScript dasturlaringizda Unicode belgilaridan foydalanmoqchi bo'lsangiz, bir-biridan farqli, lekin vizual jihatdan farqlab bo'lmaydigan identifikatorlarga duch kelmaslik uchun muharriringiz yoki boshqa vosita manba kodingizni Unicode normalizatsiyasidan o‘tkazishini ta’minlashingiz kerak.