Mundarija (28)
- Bu darsda
- 1. Nega bu kerak?
- 2. Ma'lumot turi nima?
- 2.1 Tur o'zgaruvchida emas, qiymatda
- 3. Yetti primitiv tur
- 3.1 string — satr
- 3.2 number — son
- 3.3 bigint — juda katta butun son
- 3.4 boolean — ha yoki yo'q
- 3.5 undefined va null — ikki xil "yo'qlik"
- 3.6 symbol — takrorlanmas belgi
- 4. Primitiv qiymat o'zgarmaydi
- 5. Murakkab tur: object
- 6. Qiymat va havola: eng muhim farq
- 6.1 Primitiv — qiymat bo'yicha nusxalanadi
- 6.2 Obyekt — havola bo'yicha uzatiladi
- 6.3 Nega bu muhim?
- 7. Ko'p uchraydigan xatolar
- 7.1 Son o'rniga satr
- 7.2 true, false, null ni katta harf bilan yozish
- 7.3 Obyektni "nusxaladim" deb o'ylash
- 7.4 Juda katta son "buzilib" qolishi
- 8. Mashqlar
- 1-mashq (oson): Turni aniqlang
- 2-mashq (o'rta): Taksi buyurtmasi
- 3-mashq (qiyin): Nima chiqadi?
- 9. Real ishda
- Xulosa
JavaScript ma'lumot turlari: primitivlar va obyektlar xaritasi
Qisqacha: JavaScript'da har bir qiymatning turi bor. Jami 8 ta tur: 7 ta primitiv —
string,number,bigint,boolean,undefined,null,symbol— va bitta murakkab tur —object. Primitiv qiymat nusxalanganda alohida nusxa paydo bo'ladi. Obyekt esa havola bo'yicha uzatiladi: ikki o'zgaruvchi bitta obyektga qarab turishi mumkin.
Bu darsda
- Ma'lumot turi nima ekanini va nega muhimligini tushunasiz.
- JavaScript'dagi 8 ta turni nomi va misoli bilan sanab bera olasiz.
- Primitiv tur bilan murakkab tur (obyekt) farqini tushuntira olasiz.
- Primitiv "qiymat bo'yicha", obyekt "havola bo'yicha" nusxalanishini kod bilan ko'rsata olasiz.
"25"va25kabi chalkashliklarni oldindan taniysiz.
Oldin bilishingiz kerak: let va const bilan o'zgaruvchilar, console API.
1. Nega bu kerak?
Siz do'kon uchun kichik dastur yozyapsiz. Mijoz 25 000 so'mlik non oldi, yana 5 000 so'mlik choy qo'shdi. Kodda ikki narxni qo'shasiz:
console.log(25000 + 5000); // 30000
console.log("25000" + 5000); // 250005000Birinchi qator to'g'ri: 30 000. Ikkinchisida esa 250 005 000 chiqdi — 250 million so'm! Mijoz bunday chekni ko'rsa, do'kondan qochib ketadi.
Farq bitta narsada: birinchi qatorda 25000 — son, ikkinchisida "25000" — qo'shtirnoq ichidagi matn. JavaScript son bilan sonni qo'shadi. Matn bilan sonni esa yonma-yon "yopishtiradi".
Demak, kompyuter uchun 25000 va "25000" — ikki xil narsa. Bu farqni ma'lumot turi deyiladi. Turlarni bilmasangiz, bunday xatolarni sezmay qolasiz.
2. Ma'lumot turi nima?
Ma'lumot turi (data type) — qiymatning "xili". Tur qiymat bilan nima qilish mumkinligini belgilaydi.
Hayotdan o'xshatish: oshxonadagi mahsulotlar. Unni kilogrammda o'lchaysiz, tuxumni donalab sanaysiz, sutni litrda. "3 kilogramm + 2 dona" deb qo'shmaysiz — ular boshqa-boshqa xil. JavaScript ham har bir qiymatning xilini biladi va unga qarab ishlaydi.
Siz allaqachon uch xil qiymatni ko'rgansiz:
const ism = "Malika"; // matn
const yosh = 19; // son
const talaba = true; // ha/yo'q qiymati
console.log(ism); // Malika
console.log(yosh); // 19
console.log(talaba); // trueUchalasi ham const bilan e'lon qilingan o'zgaruvchi. Lekin ulardagi qiymatlar uch xil turda.
2.1 Tur o'zgaruvchida emas, qiymatda
JavaScript'da o'zgaruvchi — shunchaki yorliq. Turni esa qiymat o'zi olib yuradi. Shuning uchun let o'zgaruvchisiga avval son, keyin matn berish mumkin:
let narx = 5000;
console.log(narx); // 5000
narx = "besh ming";
console.log(narx); // besh mingBunday tillarni dinamik turli til deyiladi. Bu qulay, lekin xavfli ham: xato bilan son o'rniga matn yozib qo'ysangiz, JavaScript sizni to'xtatmaydi.
Maslahat: Real loyihalarda bu xavfni kamaytirish uchun ko'pincha TypeScript ishlatiladi. U — JavaScript'ning turlarni qat'iy tekshiradigan "kengaytmasi". Kursda unga alohida qism bor, hozir bilish shart emas.
Tekshirib ko'ring:
10va"10"— bir xil qiymatmi?
Javob
Yo'q. 10 — son, "10" — qo'shtirnoq ichidagi matn. Ekranda ikkalasi bir xil ko'rinadi, lekin JavaScript ular bilan turlicha ishlaydi. Masalan, 10 + 1 natijasi 11, "10" + 1 esa "101".
3. Yetti primitiv tur
Primitiv (primitive) — eng oddiy, bo'linmaydigan qiymat. U bitta narsani saqlaydi: bitta matn, bitta son yoki bitta "ha/yo'q".
O'xshatish: g'isht. G'ishtni bo'laklarga ajratib, ichidan boshqa g'ishtlar chiqarib bo'lmaydi. Undan esa katta uy qurish mumkin — bu keyingi bo'limdagi "murakkab tur".
JavaScript'da primitiv tur yettita:
| Tur | Misol | Nima uchun |
|---|---|---|
string |
"Toshkent" |
Matn |
number |
42, 3.5, -7 |
Oddiy son |
bigint |
9007199254740993n |
Juda katta butun son |
boolean |
true, false |
Ha yoki yo'q |
undefined |
undefined |
Qiymat hali berilmagan |
null |
null |
Ataylab "bo'sh" |
symbol |
Symbol("id") |
Takrorlanmas belgi |
Yettalasini birma-bir ko'ramiz. Har biriga kursda alohida dars bor — bu yerda faqat "tanishuv".
3.1 string — satr
Satr (string) — matn. U qo'shtirnoq "...", apostrof '...' yoki teskari tirnoq (backtick) `...` ichida yoziladi:
const shahar = "Toshkent";
const taom = 'palov';
const xabar = `Xush kelibsiz`;
console.log(shahar); // Toshkent
console.log(taom); // palov
console.log(xabar); // Xush kelibsizUchala usul ham satr yaratadi. Teskari tirnoqning maxsus imkoniyati bor — uni Template literals darsida ko'ramiz.
Esda tuting: tirnoq ichidagi har qanday narsa satr. "2026" — son emas, to'rtta belgidan iborat matn.
3.2 number — son
Son (number) — butun ham, kasr ham, manfiy ham bitta turda:
const non = 4000; // butun son
const vazn = 1.5; // kasr son (nuqta bilan!)
const harorat = -12; // manfiy son
console.log(non); // 4000
console.log(vazn); // 1.5
console.log(harorat); // -12Kasr son vergul bilan emas, nuqta bilan yoziladi: 1.5, 1,5 emas.
number turida ikki g'alati qiymat ham bor: Infinity (cheksizlik) va NaN ("son emas" degan maxsus son). Ular bilan sonlar darsida tanishamiz.
3.3 bigint — juda katta butun son
Oddiy number juda katta butun sonlarni aniq saqlay olmaydi. Chegara — taxminan 9 kvadrillion (16 xonali son). Undan oshsa, oxirgi raqamlar "yeyilib" ketadi:
console.log(9007199254740993); // 9007199254740992
console.log(9007199254740993n); // 9007199254740993nBirinchi qatorda oxirgi raqam 3 emas, 2 bo'lib chiqdi. Ikkinchi qatorda son oxiriga n harfi qo'shilgan. Bu xato emas: n — "bu BigInt" degan maxsus belgi. BigInt — juda katta butun sonlar uchun alohida tur. U istalgan uzunlikdagi butun sonni aniq saqlaydi.
Kundalik hisob-kitobda BigInt kerak bo'lmaydi. U juda katta ID raqamlar yoki kriptografiya kabi joylarda uchraydi. Batafsil — BigInt darsida.
3.4 boolean — ha yoki yo'q
Mantiqiy qiymat (boolean) — faqat ikki qiymatdan biri: true (rost, ha) yoki false (yolg'on, yo'q).
const tolandi = true;
const yetkazildi = false;
console.log(tolandi); // true
console.log(yetkazildi); // falseBuyurtma to'landimi? Foydalanuvchi tizimga kirganmi? Bunday savollarning javobi boolean bo'ladi. true va false kichik harf bilan va tirnoqsiz yoziladi. "true" — bu satr, boolean emas. Batafsil — Boolean darsida.
3.5 undefined va null — ikki xil "yo'qlik"
Ikkalasi ham "bu yerda qiymat yo'q" degani, lekin ma'nosi farq qiladi:
let manzil;
const chegirma = null;
console.log(manzil); // undefined
console.log(chegirma); // nullundefined— qiymat hali berilmagan.manzile'lon qilindi, lekin unga hech narsa yozilmadi. JavaScript uni o'ziundefinedbilan to'ldirdi.null— dasturchi ataylab "bo'sh" deb qo'ygan qiymat. "Chegirma yo'q" — biz buni bilib turib yozdik.
Bu ikkalasining farqi shu qadar muhimki, ularga alohida dars ajratilgan.
3.6 symbol — takrorlanmas belgi
Symbol — har safar yaratilganda mutlaqo yangi, boshqasiga hech qachon teng bo'lmaydigan qiymat:
const id = Symbol("id");
console.log(id); // Symbol(id)Boshqa turlarning qiymatini to'g'ridan-to'g'ri yozamiz ("Ali", 25). Symbol'ni esa bunday yozib bo'lmaydi — uni Symbol(...) deb chaqirib yaratamiz. Bu yozuv shakli funksiyalar darsida tanish bo'ladi. Qavs ichidagi "id" — faqat tavsif, dasturchi uchun eslatma. Symbol'lar asosan kutubxonalar ichida ishlatiladi. Boshlang'ich bosqichda ularni deyarli uchratmaysiz. Batafsil — Symbol darsida.
Tekshirib ko'ring: Quyidagilarning turi qaysi?
"Samarqand",7.5,false,"false",null.
Javob
"Samarqand"—string(tirnoq ichida).7.5—number(kasr son hamnumber).false—boolean."false"—string! Tirnoq ichida bo'lgani uchun bu shunchaki 5 ta harfli matn.null—nullturi.
4. Primitiv qiymat o'zgarmaydi
Primitivlarning yana bir xususiyati bor: ular o'zgarmas (immutable). Ya'ni "Toshkent" satrining o'zini, masalan bitta harfini, o'zgartirib bo'lmaydi.
Lekin o'zgaruvchiga yangi qiymat berish mumkin:
let shahar = "Toshkent";
shahar = "Buxoro";
console.log(shahar); // BuxoroBu yerda "Toshkent" satri o'zgarmadi. shahar yorlig'i shunchaki boshqa satrga — "Buxoro" ga — yopishtirildi. Farq hozir mayda tuyulishi mumkin. U satrlar bilan ishlaganda muhim bo'ladi: String asoslari darsida qaytamiz.
5. Murakkab tur: object
Primitiv bitta narsani saqlaydi. Lekin ko'pincha bir nechta qiymatni birga saqlash kerak bo'ladi. Masalan, talaba haqida: ismi, yoshi, shahri.
Buning uchun sakkizinchi tur bor — obyekt (object). Obyekt — bir nechta qiymatni bitta "quti"ga yig'adigan murakkab tur. G'isht o'xshatishiga qaytsak: primitiv — g'isht, obyekt — g'ishtlardan qurilgan uy.
Obyektning bir necha ko'rinishi bor. Hozir faqat ular bilan salomlashamiz — har biriga keyin alohida qism bor.
Obyekt — nomlangan qiymatlar to'plami. Jingalak qavs {} ichida yoziladi:
const talaba = { ism: "Ali", yosh: 20 };
console.log(talaba); // { ism: 'Ali', yosh: 20 }Massiv (array) — tartiblangan qiymatlar ro'yxati. Kvadrat qavs [] ichida yoziladi:
const narxlar = [5000, 12000, 3000];
console.log(narxlar); // [ 5000, 12000, 3000 ]Funksiya (function) — nom berilgan, qayta ishlatiladigan kod bo'lagi. console.log ning o'zi ham funksiya. JavaScript'da funksiya ham obyektning bir turi hisoblanadi.
Sanalar (Date) va boshqa ko'plab tayyor narsalar ham obyekt. Qisqasi: primitiv bo'lmagan hamma narsa — obyekt.
Maslahat: Node obyekt ichidagi satrlarni apostrof bilan ko'rsatadi:
{ ism: 'Ali', yosh: 20 }. Siz qo'shtirnoq bilan yozgan bo'lsangiz ham shunday chiqadi — ma'nosi bir xil. Brauzer konsolida esa obyekt ustiga bosib ochiladigan ro'yxat ko'rinishida chiqadi.
Obyekt bilan qanday ishlash — Obyekt: kalit-qiymat juftliklari darsida. Massiv — Massiv: yaratish va elementga murojaat darsida. Funksiya — Funksiya e'lon qilish va chaqirish darsida. Hozir faqat bitta narsani bilish kifoya: ular primitiv emas.
Umumiy xarita:
| Guruh | Turlar | Nechta qiymat saqlaydi |
|---|---|---|
| Primitiv | string, number, bigint, boolean, undefined, null, symbol |
Bitta |
| Murakkab | object (obyekt, massiv, funksiya, sana...) |
Istalgancha |
Tekshirib ko'ring: JavaScript'da jami nechta ma'lumot turi bor? Massiv alohida turmi?
Javob
8 ta: 7 ta primitiv va object. Massiv alohida tur emas — u obyektning bir ko'rinishi. Funksiya ham shunday. Bu savol intervyularda ko'p beriladi.
6. Qiymat va havola: eng muhim farq
Primitiv va obyektning eng katta amaliy farqi — ular nusxalanganda ko'rinadi. Keling, sekin ko'ramiz.
6.1 Primitiv — qiymat bo'yicha nusxalanadi
let a = 10;
let b = a; // b ga 10 ning nusxasi yozildi
b = 99;
console.log(a); // 10
console.log(b); // 99let b = a qatorida b ga a dagi qiymatning nusxasi yozildi. Endi a va b — bir-biridan butunlay mustaqil. b ni o'zgartirsak, a ga ta'sir qilmaydi.
Hayotdan o'xshatish: pasportingizning ksero-nusxasi. Nusxaga ruchka bilan nimadir yozsangiz, asl pasportingiz toza qoladi.
Buni qiymat bo'yicha nusxalash (copy by value) deyiladi.
6.2 Obyekt — havola bo'yicha uzatiladi
Endi xuddi shu ishni obyekt bilan qilamiz. Bitta yangi yozuv bor: x.ball — "x obyekti ichidagi ball qiymati" degani. Uni obyektlar darsida batafsil o'rganamiz.
const x = { ball: 10 };
const y = x; // y ga obyekt emas, unga havola yozildi
y.ball = 99;
console.log(x.ball); // 99
console.log(y.ball); // 99Kutilmagan natija! Biz faqat y ni o'zgartirdik, lekin x.ball ham 99 bo'ldi.
Sababi: obyekt o'zgaruvchida to'g'ridan-to'g'ri saqlanmaydi. O'zgaruvchida obyektga havola (reference) saqlanadi — "obyekt qayerda turibdi" degan manzil. const y = x qatori obyektni emas, shu manzilni nusxaladi. Endi x ham, y ham bitta obyektga qarab turibdi.
Hayotdan o'xshatish: Telegram guruhiga havola. Siz do'stingizga guruh havolasini yubordingiz. Endi ikkalangiz bitta guruhga kirasiz. Do'stingiz guruhga xabar yozsa, siz ham uni ko'rasiz — chunki guruh bitta, havola ikkita.
Buni havola bo'yicha uzatish (copy by reference) deyiladi.
Diqqat:
xvayconstbilan e'lon qilingan, lekin obyekt ichidagiballbaribir o'zgardi.letvaconstdarsida ko'rganingizdek,constfaqat yorliqni boshqa qiymatga ko'chirishni taqiqlaydi. Obyektning ichini "muzlatmaydi".
6.3 Nega bu muhim?
Real loyihada obyektlar dasturning bir qismidan boshqasiga uzatiladi. Kimdir "nusxa oldim" deb o'ylab, obyektni o'zgartiradi. Natijada dasturning boshqa joyidagi ma'lumot ham "o'z-o'zidan" o'zgarib qoladi. Bunday xatoni topish juda qiyin.
Hozircha qoidani eslab qoling:
| Primitiv | Obyekt | |
|---|---|---|
b = a nima qiladi |
Qiymat nusxasini oladi | Havolani nusxalaydi |
b o'zgarsa, a ga ta'siri |
Yo'q | Bor — obyekt bitta |
Obyektning haqiqiy nusxasini qanday olish — Havola semantikasi va Sayoz va chuqur nusxalash darslarida.
Tekshirib ko'ring: Konsolda nima chiqadi?
jslet narx = 5000; let yangiNarx = narx; yangiNarx = 7000; console.log(narx);
Javob
5000. narx — son, ya'ni primitiv. let yangiNarx = narx qatorida yangiNarx ga 5000 ning alohida nusxasi yozildi. Keyin yangiNarx ni o'zgartirish narx ga ta'sir qilmaydi.
7. Ko'p uchraydigan xatolar
7.1 Son o'rniga satr
const narx = "25";
console.log(narx + 5); // 255Natija 30 emas, 255. narx — satr, chunki tirnoq ichida. JavaScript satrga son qo'shganda ularni yonma-yon yopishtiradi. Bu xato ayniqsa formadan kelgan ma'lumotda ko'p uchraydi: foydalanuvchi kiritgan hamma narsa satr bo'lib keladi. Satrni songa aylantirishni Turlarni aniq o'zgartirish darsida o'rganamiz.
7.2 true, false, null ni katta harf bilan yozish
const tolandi = True;ReferenceError: True is not definedTarjimasi: "True degan narsa aniqlanmagan". JavaScript katta-kichik harfni farqlaydi. Uning uchun True — boolean emas, siz e'lon qilmagan qandaydir o'zgaruvchi nomi. To'g'risi: true, false, null, undefined — hammasi kichik harf bilan.
7.3 Obyektni "nusxaladim" deb o'ylash
const asl = { soni: 1 };
const nusxa = asl;
nusxa.soni = 5;
console.log(asl.soni); // 5nusxa aslida nusxa emas — o'sha obyektga ikkinchi havola. Xato bermaydi, lekin ma'lumotni jimgina buzadi. Obyektni = bilan "nusxalash" — faqat ikkinchi nom berish ekanini unutmang.
7.4 Juda katta son "buzilib" qolishi
console.log(12345678901234567890); // 12345678901234567000Oxirgi raqamlar nolga aylandi. Xato xabari chiqmaydi — shuning uchun xavfli. 16 xonadan uzun ID raqamlar yoki karta raqamlari bilan ishlasangiz, ularni satr yoki BigInt sifatida saqlang.
8. Mashqlar
1-mashq (oson): Turni aniqlang
Har bir qiymatning turini yozing. Esda tuting: tirnoq ichidagi hamma narsa — string.
"Andijon"→2026→true→"0"→100n→null→
Yechim
"Andijon"—string.2026—number.true—boolean."0"—string. Tirnoq ichida bo'lgani uchun bu son emas, bitta belgili matn.100n—bigint. Oxiridaginharfi uni BigInt qiladi.null—nullturi. Keyingi darsda ko'rasiz:typeofoperatori bu yerda sizni aldashga urinadi.
2-mashq (o'rta): Taksi buyurtmasi
Taksi buyurtmasi uchun o'zgaruvchilar yarating va har birini console.log bilan chiqaring:
yolovchi— yo'lovchi ismi,"Jasur";masofa— kilometrda,7.5;tolandi— hali to'lanmagan;haydovchi— hali haydovchi topilmagan, buni ataylab "bo'sh" deb belgilang;izoh— faqat e'lon qiling, qiymat bermang.
Ishora: "ataylab bo'sh" — null; qiymatsiz e'lon qilish uchun let kerak, chunki const qiymatsiz e'lon qilinmaydi.
Yechim
const yolovchi = "Jasur";
const masofa = 7.5;
const tolandi = false;
const haydovchi = null;
let izoh;
console.log(yolovchi); // Jasur
console.log(masofa); // 7.5
console.log(tolandi); // false
console.log(haydovchi); // null
console.log(izoh); // undefinedBeshta o'zgaruvchi — beshta turli tur: string, number, boolean, null va undefined. haydovchi ga null yozdik, chunki "haydovchi yo'q" ekanini biz bilib turib belgiladik. izoh esa umuman to'ldirilmadi — JavaScript uni undefined qilib qo'ydi.
3-mashq (qiyin): Nima chiqadi?
Kodni ishga tushirmasdan, konsolda nima chiqishini yozing. Keyin tekshiring.
let malikaBali = 80;
let aliBali = malikaBali;
aliBali = 95;
const malikaSavati = { olma: 2 };
const aliSavati = malikaSavati;
aliSavati.olma = 10;
console.log(malikaBali);
console.log(malikaSavati.olma);Yechim
let malikaBali = 80;
let aliBali = malikaBali;
aliBali = 95;
const malikaSavati = { olma: 2 };
const aliSavati = malikaSavati;
aliSavati.olma = 10;
console.log(malikaBali);
console.log(malikaSavati.olma);Konsolda:
80
10malikaBali — son, ya'ni primitiv. aliBali ga uning nusxasi yozildi, shuning uchun Malikaning bali 80 bo'lib qoldi.
malikaSavati esa obyekt. aliSavati ga obyektning o'zi emas, havolasi yozildi. Ikkala o'zgaruvchi bitta savatga qarab turibdi. Ali savatga olma qo'shsa, Malikaning savatida ham 10 ta olma bo'ladi.
9. Real ishda
- Formalar: saytdagi forma maydonidan kelgan qiymat har doim satr bo'ladi — hatto foydalanuvchi son yozgan bo'lsa ham.
"25" + 5xatosi aynan shu yerda ko'p chiqadi. - Server bilan ishlash: serverdan keladigan ma'lumot (JSON formatida) matn, son, boolean,
null, obyekt va massivdan tuziladi. Bu formatni JSON asoslari darsida o'rganamiz. - React (sayt yasash uchun mashhur vosita, kursda alohida qism bor): u ma'lumot o'zgarganini havolaga qarab aniqlaydi. Obyektni "joyida" o'zgartirish React'da eng ko'p uchraydigan xatolardan biri.
- TypeScript: butunlay shu turlarga qurilgan. Turlarni yaxshi bilgan odam TypeScript'ni tez o'rganadi.
Intervyuda ko'p beriladigan savollar: "JavaScript'da nechta ma'lumot turi bor?" (8 ta) va "Primitiv va obyektning nusxalanishida qanday farq bor?" (qiymat va havola).
Xulosa
- Har bir qiymatning turi bor. Tur o'zgaruvchida emas, qiymatda saqlanadi.
- 7 ta primitiv:
string,number,bigint,boolean,undefined,null,symbol. - Bitta murakkab tur —
object. Massiv, funksiya va sana ham obyekt. - Primitiv qiymat bo'yicha nusxalanadi: nusxa mustaqil.
- Obyekt havola bo'yicha uzatiladi:
b = adan keyin ikkalasi bitta obyektga qaraydi. "25"va25— ikki xil tur. Tirnoqqa e'tibor bering.
Keyingi dars: typeof va turni to'g'ri aniqlash — qiymatning turini kodning o'zidan qanday bilish va typeof qayerda aldashini ko'ramiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!