Strings

...

Strings

JavaScript'da matnli ma'lumotlar string (matn) sifatida saqlanadi. Yagona belgi uchun alohida tur mavjud emas.

String'larning ichki formati doimo UTF-16, bu sahifa kodlashiga bog'liq emas.

Quotes

Qavslarning turlari haqida eslaylik.

String'lar ikkita tilda — bir yoki ikki qavsda yoki backticks (`) ichida joylashishi mumkin:

let single = 'single-quoted';
let double = "double-quoted";
 
let backticks = `backticks`;

Yagona va ikki qavslar asosan bir xil. Biroq, backticks bizga string ichiga istalgan ifodani joylashtirish imkonini beradi, uni ${…} ichida o'rab olamiz:

function sum(a, b) {
  return a + b;
}
 
alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.

Backticks'larning yana bir afzalligi shundaki, ular string'ni bir nechta qatorlarga bo'lish imkonini beradi:

let guestList = `Guests:
 * John
 * Pete
 * Mary
`;
 
alert(guestList); // mehmonlar ro'yxati, bir nechta qatorlar

Yagona yoki ikki qavslar bu tarzda ishlamaydi.

Agar biz ularni ishlatishga harakat qilsak va bir nechta qatorlarni ishlatmoqchi bo'lsak, xato bo'ladi:

let guestList = "Guests: // Xato: Unexpected token ILLEGAL
  * John";

Yagona va ikki qavslar dasturiy tillar yaratishning qadimgi davridan kelib chiqadi, ularning ko'p qatorda string'larni qo'llash ehtiyoji ko'zda tutilmagan. Backticks keyinchalik paydo bo'lib, shuning uchun ular ko'proq moslashuvchan.

Backticks shuningdek, string'dan oldin "shablon funksiyasini" belgilashga imkon beradi. Sintaksis: func\string`. Funksiya func` avtomatik ravishda chaqiriladi, string va o'rnatilgan ifodalarni qabul qiladi va ularni qayta ishlaydi. Ushbu xususiyat "tagged templates" deb ataladi, u kamdan-kam uchraydi, ammo MDN'da o'qishingiz mumkin: Template literals.

Special characters

Birinchi va ikki qavslar bilan ko'p qatorli string'larni yaratish hali ham mumkin, buni yangi qator belgisini (\n) ishlatish orqali amalga oshiramiz, bu qatorni ajratishni bildiradi:

let guestList = "Guests:\n * John\n * Pete\n * Mary";
 
alert(guestList); // mehmonlar ro'yxati, yuqoridagi kabi

Oddiy misol sifatida, bu ikki qator bir xil, faqat turli xil yozilgan:

let str1 = "Hello\nWorld"; // ikki qator "newline symbol" yordamida
 
// ikki qator normal yangi qator va backticks yordamida
let str2 = `Hello
World`;
 
alert(str1 == str2); // true

Boshqa kamdan-kam uchraydigan maxsus belgilar mavjud:

BelgiTavsif
\nYangi qator
\rWindows matn fayllarida \r\n kombinatsiyasi yangi qatorni ifodalaydi, ammo non-Windows OSlarda faqat \n. Tarixiy sabablarga ko'ra, ko'p Windows dasturlari ham \n'ni tushunadi.
', ", `Qavslar
\Backslash
\tTab
\b, \f, \vBackspace, Form Feed, Vertical Tab – ular eski vaqtlar kelib chiqadi, hozirgi kunda ishlatilmaydi (ularni hozirgi kunda unutishingiz mumkin).

Ko'rib turganingizdek, barcha maxsus belgilar orqaga qaratilgan belgi \ bilan boshlanadi. U "escape character" deb ataladi.

Uni shunchaki ko'rsatishimiz kerak bo'lsa, biz asl backslash \ ni ko'rsatishimiz kerak:

alert( `The backslash: \\` ); // The backslash: \

Shuningdek, so-called "escaped" quotes \', \", ``` string ichidagi qavsni kiritish uchun ishlatiladi.

Masalan:

alert( 'I\'m the Walrus!' ); // I'm the Walrus!

Ko'rib turganingizdek, biz ichki qavsni orqaga qaratilgan belgi \' bilan oldindan qo'shishimiz kerak, aks holda bu string oxirini ko'rsatadi.

Albatta, faqat ichki qavslar qavsni o'rnatilgan qavslar bilan qo'shilishi kerak. Shunday qilib, yanada estetik yechim sifatida biz ikki qavs yoki backticks'ni ishlatishimiz mumkin:

alert( "I'm the Walrus!" ); // I'm the Walrus!

Bu maxsus belgilar tashqarisida Unicode kodlari uchun maxsus notatsiya mavjud \u…, bu kamdan-kam ishlatiladi va Unicode haqida optional bo'limda qamrab olingan.

String length

length xususiyati string uzunligini ko'rsatadi:

alert( `My\n`.length ); // 3

Eslatib o'tamiz, \n bitta "maxsus" belgi bo'lib, uzunlik haqiqatan ham 3.

length xususiyati

Boshqa tillar bo'yicha tajribasi bor odamlar ba'zida str.length() deb yozishadi, lekin bu to'g'ri emas. Bu ishlamaydi.

Iltimos, str.length raqamli xususiyatdir, u funktsiya emas. Unga qo'shimcha qavslar qo'shishga hojat yo'q. str.length() emas, balki str.length.

Accessing characters

Pozitsiya pos dagi belgini olish uchun kvadrat qavslar [pos] yoki str.at(pos) metodini chaqiring. Birinchi belgi nol pozitsiyasidan boshlanadi:

let str = `Hello`;
 
// birinchi belgi
alert( str[0] ); // H
alert( str.at(0) ); // H
 
// oxirgi belgi
alert( str[str.length - 1] ); // o
alert( str.at(-1) );

at(pos) metodining afzalligi shundaki, u manfiy pozitsiyalarga ruxsat beradi. Agar pos manfiy bo'lsa, u stringning oxiridan hisoblanadi.

Shunday qilib, .at(-1) oxirgi belgi, .at(-2) undan oldingi belgi va hokazo.

Kvadrat qavslar har doim manfiy indekslar uchun undefined qaytaradi, masalan:

let str = `Hello`;
 
alert( str[-2] ); // undefined
alert( str.at(-2) ); // l

Biz shuningdek for..of orqali belgilarni takrorlashimiz mumkin:

for (let char of "Hello") {
  alert(char); // H,e,l,l,o (char "H" bo'ladi, keyin "e", keyin "l" va hokazo)
}

Strings are immutable

String'lar JavaScript'da o'zgarmaydi. Belgi o'zgartirilishi mumkin emas.

Bu ishlamayotganini ko'rsatish uchun sinab ko'raylik:

let str = 'Hi';
 
str[0] = 'h'; // xato
alert( str[0] ); // ishlamaydi

Odatda ishlatiladigan yechim - eski string o'rniga yangi string yaratish va uni str ga tayinlash.

Masalan:

let str = 'Hi';
 
str = 'h' + str[1]; // stringni almashtirish
 
alert( str ); // hi

Keyingi bo'limlarda bu haqida ko'proq misollarni ko'rib chiqamiz.

Changing the case

toLowerCase() va toUpperCase() metodlari yozuvni o'zgartiradi:

alert( 'Interface'.toUpperCase() ); // INTERFACE
alert( 'Interface'.toLowerCase() ); // interface

Yagona belgini kichik qilish uchun:

alert( 'Interface'[0].toLowerCase() ); // 'i'

Searching for a substring

Substringni string ichida qidirishning bir nechta usullari mavjud.

str.indexOf

Birinchi metod str.indexOf(substr, pos).

U substr ni str ich

ida qidiradi va uning birinchi topilgan joyini qaytaradi. Agar substr topilmasa, -1 qaytariladi.

Masalan:

let str = 'Widget with id';
 
alert( str.indexOf('Widget') ); // 0
alert( str.indexOf('widget') ); // -1 (kichik va katta harflar farq qiladi)
 
alert( str.indexOf('id', 5) ); // 12 (qidiruv pozitsiyasi 5'dir)

str.includes

Yana bir metod — str.includes(substr, pos).

Bu ham qidiradi, lekin natijada faqat true yoki false qaytaradi:

let str = 'Widget with id';
 
alert( str.includes('Widget') ); // true
alert( str.includes('widget') ); // false
 
alert( str.includes('id', 12) ); // true
alert( str.includes('id', 13) ); // false

str.startsWith va str.endsWith

Agar siz stringning boshida yoki oxirida ma'lum bir substring bo'lishini tekshirmoqchi bo'lsangiz, bu metodlarni ishlatishingiz mumkin:

let str = 'Widget with id';
 
alert( str.startsWith('Widget') ); // true
alert( str.startsWith('widget') ); // false
 
alert( str.endsWith('id') ); // true
alert( str.endsWith('Widget') ); // false

Getting a substring

str.slice(start, end) metodini foydalanib substringni olish mumkin:

let str = 'Hello, world!';
 
alert( str.slice(7, 12) ); // world
alert( str.slice(-6, -1) ); // world (manfiy indekslar bilan)

str.slice() metodini so'rov qilishda, agar end bo'sh qoldirilsa, start dan oxirigacha bo'lgan substring qaytariladi:

let str = 'Hello, world!';
 
alert( str.slice(7) ); // world!

str.substring(start, end) metodining o'xshashligi mavjud. str.slice'dan farqi shundaki, substring() metodida manfiy indekslar ishlatilmaydi.

let str = 'Hello, world!';
 
alert( str.substring(7, 12) ); // world
alert( str.substring(7) ); // world!

Agar start kattaroq bo'lsa, end qiymatidan, ularni almashadi.

str.substr(start, length)

str.substr(start, length) metodini ham ishlatishingiz mumkin.

Bunda length substring uzunligini bildiradi:

let str = 'Hello, world!';
 
alert( str.substr(7, 5) ); // world
alert( str.substr(-6, 5) ); // world (manfiy indekslar bilan)

Strings in JavaScript

JavaScript'da string'lar butunlay o'zgarmas. Har qanday o'zgartirish string'ni yaratadi, eski stringni saqlab qolmaydi. Masalan, str[0] yozishda Hi'ni h bilan o'zgartirib bo'lmaydi. Yangi string yaratish kerak:

let str = 'Hi';
 
str = 'h' + str[1]; // yangi string

String trimming

Stringni boshlanish va oxiridagi bo'shliqlardan tozalash uchun trim(), trimStart(), va trimEnd() metodlari mavjud:

let str = ' \n\tHello, World!\n ';
 
alert(str.trim()); // Hello, World!
alert(str.trimStart()); // Hello, World!\n
alert(str.trimEnd()); // \nHello, World!

Ushbu sahifada

GitHubda tahrirlash