# JavaScript ma'lumot turlari (string, number, boolean)

> JavaScript ma'lumot turlari: matn, son, mantiqiy qiymat, null va undefined. typeof bilan turni aniqlash va turlar orasida o'girishni o'rganing.

Manba: https://learncode.uz/javascript/malumot-turlari/
Sana: 2026-05-25

Har bir qiymatning **turi** bor. Son bilan qo'shish amali bajariladi, matn
bilan esa birlashtirish — shuning uchun til qiymatni qanday tur ekanini
biladi va shunga qarab ish tutadi.

[O'zgaruvchilar](https://learncode.uz/javascript/ozgaruvchilar) darsida qiymatni qanday saqlashni
ko'rdingiz; endi o'sha qiymatlar qanday turlarga bo'linishini ko'ramiz.

## Asosiy turlar

```js
const text = "Salom";
const num = 42;
const decimal = 19.99;
const flag = true;

console.log(typeof text);
console.log(typeof num);
console.log(typeof decimal);
console.log(typeof flag);
```

`typeof` operatori qiymatning turini qaytaradi. E'tibor bering: butun son ham,
kasr son ham `number` — JavaScript'da ular ajratilmaydi.

## Matn — string

Matn qo'shtirnoq ichida yoziladi. Uch xil belgidan foydalanish mumkin:

```js
const a = "qo'shtirnoq";
const b = 'bitta tirnoq';
const c = `teskari tirnoq`;

console.log(a, b, c);
```

Teskari tirnoq (**template literal**) ichiga o'zgaruvchi qo'yish mumkin:

```js
const name = "Aziz";
const age = 20;

console.log(`${name} — ${age} yoshda`);
```

Bu usul `+` bilan birlashtirishdan qulayroq va xatosi kam.

> **Atama**
>
> **Template literal** — teskari tirnoq (\`) ichidagi matn. Ichiga `${'{'}...{'}'}`
> yozib, istalgan ifodani qo'yish mumkin. U bir necha qatorga ham yoyiladi.

## Son — number

```js
const price = 15000;
const discount = 0.15;

console.log(price - price * discount);
console.log(10 / 3);
console.log(10 % 3);
```

`%` — qoldiq operatori. `10 % 3` uchga bo'lganda ortib qolgan **1** ni beradi.
Bu son juft yoki toqligini aniqlashda ko'p ishlatiladi.

## Mantiqiy qiymat — boolean

Faqat ikkita qiymati bor: `true` (rost) va `false` (yolg'on). Taqqoslash
natijasi ham shu turda bo'ladi:

```js
console.log(10 > 5);
console.log(10 === 5);
console.log("a" === "a");

const isAdult = 20 > 18;
console.log(isAdult);
```

## null va undefined

Ikkalasi ham "qiymat yo'q" degani, lekin sababi boshqacha:

```js
let a;
console.log(a);

let b = null;
console.log(b);

console.log(typeof a, typeof b);
```

- `undefined` — qiymat **hali berilmagan** (til o'zi qo'yadi);
- `null` — qiymat **ataylab bo'sh** qoldirilgan (dasturchi qo'yadi).

> **typeof null — 'object'**
>
> `typeof null` natijasi `"object"` chiqadi. Bu tilning 1995-yildan qolgan
> xatosi. Uni tuzatish millionlab saytni buzardi, shuning uchun shundayligicha
> qoldirilgan. Bo'sh qiymatni tekshirishda buni yodda tuting.

## Turlarni o'girish

Foydalanuvchi kiritgan qiymat doim **matn** bo'lib keladi — hatto raqam
yozsa ham:

```js
const numText = "25";

console.log(numText + 5);
console.log(Number(numText) + 5);
```

Birinchi natija `"255"` — matn birlashtirildi. Ikkinchisi `30` — avval songa
o'girildi. Bu boshlovchilar eng ko'p duch keladigan xatolardan biri.

Teskari o'girish `String()` bilan bo'ladi:

```js
const num = 42;
console.log(String(num) + "!");
console.log(typeof String(num));
```

## Amaliy mashq

Turlarni sinab ko'ring:

1. Har turdan bitta o'zgaruvchi yarating va `typeof` bilan tekshiring;
2. `"10" + 5` va `Number("10") + 5` natijalarini solishtiring;
3. `"salom" * 2` yozib ko'ring — natija nima?
4. template literal bilan "Narx: 15000 so'm" xabarini yasang;
5. `Number("abc")` natijasini tekshiring.

3 va 5-qadamdagi `NaN` — "Not a Number", ya'ni songa o'girib bo'lmadi degani.

## Qisqacha xulosa

- Asosiy turlar: **string** (matn), **number** (son), **boolean** (rost/yolg'on).
- `typeof` qiymat turini qaytaradi.
- Template literal (\`...\`) ichiga o'zgaruvchi qo'yish mumkin.
- `undefined` — qiymat berilmagan; `null` — ataylab bo'sh.
- `Number()` va `String()` turlar orasida o'giradi; kiritilgan qiymat doim matn bo'ladi.

Keyingi darsda [operatorlar](https://learncode.uz/javascript/operatorlar) — qiymatlar ustida amal
bajarishni ko'ramiz.
