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:
- Operatorlar ishlaganda
- Comparison (
==) - Boolean context (
if,while,&&,||)
3️⃣ ToPrimitive algoritmi (eng muhim qism)
Agar object boshqa tur bilan ishlatilsa, JS avval uni primitive'ga aylantiradi.
Jarayon:
valueOf()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:
false0-0""nullundefinedNaN
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
===ishlating — aniq taqqoslash uchun- Explicit coercion — professional kodda implicit coercion'ga suyanmang
- Truthy/Falsy — boolean kontekstda qaysi qiymatlar haqiqiy ekanligini bilish muhim
- 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