Series: JavaScript Basics Lesson 7

Type Coercion

JavaScript'da Type Coercion qanday ishlashini o'rganing: ToPrimitive algoritmi, operatorlar, boolean coercion va == comparison.

7-dars

🔄 Type Coercion

1️⃣ Type Coercion nima o'zi?

JavaScript dinamik typed til.

Demak:

let x = 5
x = "salom"

JS turini majburiy belgilab qo'ymaydi. Shuning uchun operatsiya vaqtida qiymatlar avtomatik o'zgaradi.

Type coercion = JS qiymatni boshqa turga majburan aylantirishi.

2️⃣ JS qachon coercion qiladi?

Asosan 3 joyda:

  1. Operatorlar ishlaganda
  2. Comparison (==)
  3. Boolean context (if, while, &&, ||)

3️⃣ ToPrimitive algoritmi (eng muhim qism)

Agar object boshqa tur bilan ishlatilsa, JS avval uni primitive'ga aylantiradi.

Jarayon:

  1. valueOf()
  2. toString()

Qaysi biri ishlashi kontekstga bog'liq.

Misol:

const obj = {
  valueOf() { return 10 },
  toString() { return "20" }
}

obj + 5  // 15

Nega 15?

Chunki + number kontekstda ishladi → valueOf ishladi.

4️⃣ + operatori maxsus

+ — eng chalkash operator.

Qoidasi:

Agar operandlardan biri string bo'lsa → string concat.

'5' + 2   // "52"

Ammo:

'5' - 2   // 3

Nega?

Chunki - faqat number bilan ishlaydi → majburan numberga aylantiradi.

5️⃣ Boolean coercion (truthy / falsy)

Falsy qiymatlar:

  • false
  • 0
  • -0
  • ""
  • null
  • undefined
  • NaN

Qolgan hammasi truthy.

if ("0") console.log("ishladi")

Bu ishlaydi. Chunki "0" — truthy.

Ko'pchilik shu yerda yiqiladi.

6️⃣ == ichida nima bo'ladi?

Bu yerda maxsus comparison algoritmi ishlaydi.

Masalan:

0 == false

JS shunday qiladi:

false → 0
0 == 0 → true

Yana misol:

"" == 0
"" → 0
0 == 0 → true

Shu sabab === ishlatiladi.

7️⃣ Eng chalkash misollar

[] + []

Ikkalasi object
Primitive kerak
toString ishlaydi
[] → ""
Natija: ""
[] + []  // ""

[] + {}

[] → ""
{} → "[object Object]"
Natija: "[object Object]"
[] + {}  // "[object Object]"

8️⃣ Explicit coercion (nazorat sening qo'lingda)

Number("5")    // 5
String(10)     // "10"
Boolean(1)     // true

Professional kodda implicitga suyanilmaydi.

📊 Xulosa

Xususiyat Tavsif
Type Coercion JS qiymatni boshqa turga majburan aylantirishi
ToPrimitive Object → Primitive aylantirish algoritmi
+ operatori String bo'lsa concat, aks holda number
Truthy/Falsy Boolean kontekstda qiymatlarning haqiqiy yoki yolg'onligi
== vs === == coercion qiladi, === qilmaydi

💡 Amaliy maslahatlar

  1. === ishlating — aniq taqqoslash uchun
  2. Explicit coercion — professional kodda implicit coercion'ga suyanmang
  3. Truthy/Falsy — boolean kontekstda qaysi qiymatlar haqiqiy ekanligini bilish muhim
  4. ToPrimitive — object bilan ishlaganda qaysi metod chaqirilishini tushunish kerak

🔍 Qo'shimcha misollar

// String coercion
"5" + 3        // "53"
"5" - 3        // 2

// Boolean coercion
if (0) console.log("ishlamaydi")
if ("0") console.log("ishlaydi")

// Number coercion
Number("123")  // 123
Number("abc")  // NaN

// Comparison
null == undefined  // true
null === undefined // false

// Object coercion
String({})         // "[object Object]"
Number({})         // NaN

📝 Xulosa

  • JavaScript dinamik typed til, shuning uchun type coercion mavjud
  • ToPrimitive algoritmi object'ni primitive'ga aylantiradi
  • + operatori string bo'lsa concat qiladi
  • Falsy qiymatlar: false, 0, "", null, undefined, NaN
  • == coercion qiladi, === qilmaydi
  • Professional kodda explicit coercion ishlatish yaxshiroq