# JavaScript obyektlar (object)

> JavaScript obyektlari: kalit-qiymat juftliklari, xossaga murojaat, metod qo'shish va ichma-ich tuzilma. Bog'liq ma'lumotni bir joyda saqlashni o'rganing.

Manba: https://learncode.uz/javascript/obyektlar/
Sana: 2026-05-28

Bitta talaba haqidagi ma'lumot — ism, yosh, guruh — uchta alohida
o'zgaruvchida tarqoq turadi. **Obyekt** ularni bitta tuzilmaga jamlaydi.

## Obyekt yaratish

```js
const student = {
  name: "Aziz",
  age: 20,
  group: "IT-21",
};

console.log(student);
```

Figurali qavs ichida **kalit: qiymat** juftliklari, vergul bilan ajratiladi.
Kalit — xossaning nomi, qiymat — istalgan turdagi ma'lumot.

## Xossaga murojaat

Ikki usul bor:

```js
const student = { name: "Aziz", age: 20 };

console.log(student.name);
console.log(student["age"]);

const key = "name";
console.log(student[key]);
```

Nuqta qisqaroq va ko'p ishlatiladi. Kvadrat qavs esa kalit **o'zgaruvchida**
turganda zarur bo'ladi.

## Qo'shish va o'zgartirish

```js
const student = { name: "Aziz", age: 20 };

student.city = "Toshkent";
student.age = 21;

console.log(student);

delete student.city;
console.log(student);
```

Mavjud bo'lmagan xossaga qiymat bersangiz — u qo'shiladi. `delete` esa
o'chiradi.

## Mavjud bo'lmagan xossa

```js
const student = { name: "Aziz" };

console.log(student.phone);
console.log(student.phone?.raqam);
```

`undefined` qaytadi, xato chiqmaydi. Lekin ichkariga kirsangiz xato bo'ladi —
shuning uchun `?.` (**optional chaining**) ishlatiladi: xossa yo'q bo'lsa,
zanjir to'xtaydi va `undefined` qaytadi.

## Metod — obyekt ichidagi funksiya

```js
const account = {
  egasi: "Aziz",
  balance: 100000,

  view() {
    return `${this.egasi}: ${this.balance} so'm`;
  },

  deposit(amount) {
    this.balance += amount;
  },
};

console.log(account.view());
account.deposit(50000);
console.log(account.view());
```

> **Atama**
>
> **`this`** — metod ichida **shu obyektning o'ziga** ishora qiladi.
> `this.balance` — "shu obyektning balance xossasi". `this` siz yozsangiz,
> JavaScript tashqaridan `balance` nomli o'zgaruvchini qidiradi va topmaydi.

## Ichma-ich tuzilma

Qiymat sifatida boshqa obyekt yoki massiv bo'lishi mumkin:

```js
const student = {
  name: "Aziz",
  address: {
    city: "Toshkent",
    street: "Amir Temur",
  },
  scores: [85, 92, 78],
};

console.log(student.address.city);
console.log(student.scores[1]);
console.log(student.scores.length);
```

## Obyekt ustidan yurish

```js
const student = { name: "Aziz", age: 20, group: "IT-21" };

for (const key in student) {
  console.log(key, "=", student[key]);
}

console.log(Object.keys(student));
console.log(Object.values(student));
```

`Object.keys` kalitlar massivini, `Object.values` qiymatlar massivini beradi —
ular ustida [massiv metodlarini](https://learncode.uz/javascript/massiv-metodlari) ishlatish mumkin.

## Obyektlar massivi

Amalda eng ko'p uchraydigan tuzilma:

```js
const products = [
  { title: "Olma", price: 8000 },
  { title: "Sut", price: 12000 },
  { title: "Non", price: 3000 },
];

const cheapOnes = products.filter(p => p.price < 10000);
console.log(cheapOnes);

const titles = products.map(p => p.title);
console.log(titles.join(", "));
```

## Amaliy mashq

`Book` obyektini yarating:

1. `title`, `author` va `year` xossalari bo'lgan obyekt yasang;
2. unga `janr` xossasini qo'shing;
3. `tavsif()` metodini yozing — "Nom (muallif, yil)" qaytarsin;
4. `delete` bilan bitta xossani o'chiring;
5. uchta kitobdan massiv yasab, `map` bilan faqat nomlarini chiqaring.

3-qadamda `this` ni olib tashlab ko'ring — qanday xato chiqadi?

## Qisqacha xulosa

- **Obyekt** — kalit-qiymat juftliklari to'plami: `{ ism: "Aziz" }`.
- Murojaat: `obyekt.xossa` yoki `obyekt["xossa"]`.
- Yangi xossa o'zlashtirish bilan qo'shiladi, `delete` bilan o'chiriladi.
- **Metod** — obyekt ichidagi funksiya; `this` shu obyektga ishora qiladi.
- `Object.keys` va `Object.values` massiv qaytaradi; `?.` xavfsiz murojaat beradi.

Keyingi darsda [DOM](https://learncode.uz/javascript/dom-nima) — JavaScript orqali sahifani
o'zgartirishni boshlaymiz.
