JavaScript-da matnli ma’lumotlar satrlar sifatida saqlanadi. Bitta belgi uchun alohida tip yo’q.
Satrlarning ichki formati har doim UTF-16, u sahifa kodlashiga bog’liq emas.
Qo’shtirnoqlar
Qo’shtirnoq turlarini eslaymiz.
Satrlar bitta qo’shtirnoq, qo’sh qo’shtirnoq yoki teskari qo’shtirnoq ichiga olinishi mumkin:
let single = "bitta qo'shtirnoq";
let double = "qo'sh qo'shtirnoq";
let backticks = `teskari qo'shtirnoqlar`;
Bitta va qo’sh qo’shtirnoqlar aslida bir xil. Teskari qo’shtirnoqlar esa bizga har qanday ifodani ${…} ichiga o’rab satrga kiritish imkonini beradi:
function sum(a, b) {
return a + b;
}
alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.
Teskari qo’shtirnoqlarni ishlatishning yana bir afzalligi – ular satrning bir nechta qatorga cho’zilishiga imkon beradi:
let guestList = `Mehmonlar:
* John
* Pete
* Mary
`;
alert(guestList); // mehmonlar ro'yxati, bir nechta qator
Tabiiy ko’rinadi, to’g’rimi? Lekin bitta yoki qo’sh qo’shtirnoqlar bunday ishlamaydi.
Agar ularni ishlatib, bir nechta qatordan foydalanishga harakat qilsak, xato bo’ladi:
let guestList = "Mehmonlar: // Xato: Unexpected token ILLEGAL
* John";
Bitta va qo’sh qo’shtirnoqlar tilning yaratilishi qadimgi davrlaridan keladi, o’sha paytda ko’p qatorli satrlar ehtiyoji hisobga olinmagan edi. Teskari qo’shtirnoqlar ancha keyinroq paydo bo’lgan va shuning uchun ko’proq imkoniyatlarga ega.
Teskari qo’shtirnoqlar shuningdek birinchi teskari qo’shtirnoqdan oldin “shablon funksiyasini” belgilashga imkon beradi. Sintaksis: func`string`. func funksiyasi avtomatik ravishda chaqiriladi, satr va kiritilgan ifodalarni oladi va ularni qayta ishlashi mumkin. Bu xususiyat “teglangan shablonlar” deb ataladi, u kamdan-kam uchraydi, lekin bu haqda MDN da o’qishingiz mumkin: Template literals.
Maxsus belgilar
Bitta va qo’sh qo’shtirnoqlar bilan ham ko’p qatorli satrlarni “yangi qator belgisi” deb ataladigan \n yordamida yaratish mumkin, bu qator uzilishini bildiradi:
let guestList = "Mehmonlar:\n * John\n * Pete\n * Mary";
alert(guestList); // ko'p qatorli mehmonlar ro'yxati, yuqoridagi bilan bir xil
Oddiy misolda, bu ikki qator teng, shunchaki boshqacha yozilgan:
let str1 = "Salom\nDunyo"; // "yangi qator belgisi" yordamida ikki qator
// teskari qo'shtirnoq va oddiy yangi qator yordamida ikki qator
let str2 = `Salom
Dunyo`;
alert(str1 == str2); // true
Boshqa, kamroq uchraydigan maxsus belgilar ham bor:
| Belgi | Tavsif |
|---|---|
\n |
Yangi qator |
\r |
Windows matn fayllarida ikkita belgining kombinatsiyasi \r\n yangi uzilishni ifodalaydi, Windows bo’lmagan OS da esa shunchaki \n. Bu tarixiy sabablarga ko’ra, ko’pchilik Windows dasturlari ham \n ni tushunadi. |
\', \", \` |
Qo’shtirnoqlar |
\\ |
Teskari chiziq |
\t |
Tab |
\b, \f, \v |
Orqaga qaytarish, Shakl olib berish, Vertikal Tab – to’liqlik uchun eslatilgan, eski zamonlardan kelgan, hozir ishlatilmaydi (ularni hozir unutishingiz mumkin). |
Ko’rib turganingizdek, barcha maxsus belgilar teskari chiziq belgisi \ bilan boshlanadi. U “qochish belgisi” deb ham ataladi.
U shunchalik maxsus bo’lgani uchun, agar satr ichida haqiqiy teskari chiziq \ ko’rsatishimiz kerak bo’lsa, uni ikki marta yozishimiz kerak:
alert(`Teskari chiziq: \\`); // Teskari chiziq: \
“Qochgan” qo’shtirnoqlar \', \", \` bir xil qo’shtirnoqli satrga qo’shtirnoq kiritish uchun ishlatiladi.
Masalan:
alert("Men'm Walrus!"); // Men'm Walrus!
Ko’rib turganingizdek, ichki qo’shtirnoqdan oldin teskari chiziq \' qo’yishimiz kerak, aks holda u satr oxirini bildiradi.
Albatta, faqat o’rab turgan qo’shtirnoqlar bilan bir xil qo’shtirnoqlarni qochirish kerak. Shuning uchun yanada nafis yechim sifatida biz qo’sh qo’shtirnoq yoki teskari qo’shtirnoqga o’tishimiz mumkin:
alert("Men'm Walrus!"); // Men'm Walrus!
Bu maxsus belgilardan tashqari, Unicode kodlari uchun maxsus notation \u… ham bor, u kamdan-kam ishlatiladi va Unicode haqidagi ixtiyoriy bobda yoritilgan.
Satr uzunligi
length xossasi satr uzunligiga ega:
alert(`Men\n`.length); // 3
E’tibor bering, \n bitta “maxsus” belgi, shuning uchun uzunlik haqiqatan ham 3.
length- bu xossaBa’zi boshqa tillar tajribasiga ega odamlar ba’zanstr.lengtho’rnigastr.length() chaqirishda xato qiladi. Bu ishlamaydi.
E’tibor bering, str.length raqamli xossa, funksiya emas. Undan keyin qavs qo’yish shart emas. .length() emas, balki .length.
Belgilarga kirish
pos pozitsiyasidagi belgini olish uchun kvadrat qavslar [pos] ishlatiladi yoki str.at(pos) usulini chaqiriladi. Birinchi belgi nol pozitsiyasidan boshlanadi:
let str = `Salom`;
// birinchi belgi
alert( str[0] ); // S
alert( str.at(0) ); // S
// oxirgi belgi
alert( str[str.length - 1] ); // m
alert( str.at(-1) );
Ko’rib turganingizdek, .at(pos) usuli salbiy pozitsiyaga imkon berishning afzalligiga ega. Agar pos salbiy bo’lsa, u satr oxiridan hisoblanadi.
Demak .at(-1) oxirgi belgini, .at(-2) undan oldingi belgini va hokazo anglatadi.
Kvadrat qavslar salbiy indekslar uchun har doim undefined qaytaradi, masalan:
let str = `Salom`;
alert(str[-2]); // undefined
alert(str.at(-2)); // l
Shuningdek, for..of yordamida belgilar bo’ylab iteratsiya qilishimiz mumkin:
for (let char of "Salom") {
alert(char); // S,a,l,o,m (char "S" bo'ladi, keyin "a", keyin "l" va hokazo)
}
Satrlar o’zgarmas
JavaScript-da satrlarni o’zgartirib bo’lmaydi. Belgini o’zgartirish imkonsiz.
Buni ishlamasligini ko’rsatish uchun sinab ko’raylik:
let str = "Salom";
str[0] = "s"; // xato
alert(str[0]); // ishlamaydi
Odatiy yechim – butunlay yangi satr yaratish va uni eski o’rniga str ga tayinlashdir.
Masalan:
let str = "Salom";
str = "s" + str[1]; // satrni almashtirish
alert(str); // salom
Keyingi bo’limlarda bunga ko’proq misollar ko’ramiz.
Registrni o’zgartirish
toLowerCase() va toUpperCase() usullari registrni o’zgartiradi:
alert("Interface".toUpperCase()); // INTERFACE
alert("Interface".toLowerCase()); // interface
Yoki agar bitta belgini kichik harfga o’tkazmoqchi bo’lsak:
alert("Interface"[0].toLowerCase()); // 'i'
Substring qidirish
Satr ichida substring qidirish uchun bir nechta usul mavjud.
str.indexOf
Birinchi usul str.indexOf(substr, pos).
U berilgan pos pozitsiyasidan boshlab