Junior
JavaScriptda noaniq taqqoslash (==) paytida nima bo'ladi?
sobes.tech AI
AIdan javob
JavaScriptda noturgan taqqoslash (==) qilishda, taqqoslashdan oldin operandlarning turlari konvertatsiya qilinadi (coercion). Agar operandlarning turlari farq qilsa, JavaScript bir yoki har ikkala operandni ham bir xil turga aylantirishga harakat qiladi va bu bir qator qoidalarga asoslanadi.
== bilan asosiy konvertatsiya qoidalari:
- Raqam va satr: Satr raqamga aylantiriladi. Agar aylantirish muvaffaqiyatsiz bo‘lsa (NaN), natija doimo
falsebo‘ladi.// "10" 10 ga aylantiriladi. Natija: true console.log(10 == "10"); // "abc" NaN ga aylantiriladi. Natija: false console.log(10 == "abc"); - Boolean va Boolean bo‘lmagan: Boolean raqamga aylantiriladi (
true1 ga,false0 ga). Keyin raqam va boshqa operand solishtiriladi.// true 1 ga aylantiriladi. Natija: true console.log(true == 1); // false 0 ga aylantiriladi. Natija: true console.log(false == 0); // false 0 ga aylantiriladi, "0" 0 ga aylantiriladi. Natija: true console.log(false == "0"); - Null va Undefined:
nullundefinedbilantruesifatida solishtiriladi, va boshqa hech narsa bilan (o‘ziga xosdan tashqari)truebo‘ladi.// Natija: true console.log(null == undefined); // Natija: false console.log(null == 0); // Natija: false console.log(undefined == 0); - Obyekt va primitiv: Obyekt primitivga aylantiriladi (metodlar
valueOfyokitoStringyordamida), so‘ngra primitivlar solishtiriladi.// Obyekt satrga aylantiriladi "10" (toString() orqali), so‘ngra raqam 10 bilan solishtiriladi // "10" raqamga aylantiriladi. Natija: true console.log({ toString: () => "10" } == 10); - Simvol va boshqalar: Simvol faqat boshqa simvol yoki simvolga aylantiriladigan primitiv bilan solishtirilishi mumkin (bu odatda imkonsiz).
// Natija: false console.log(Symbol('a') == 'a');
Noturgan taqqoslash avtomatik tur konvertatsiyasi tufayli kutilmagan natijalarga olib kelishi mumkin. Ko‘proq prognoz qilinadigan xatti-harakat uchun, tur konvertatsiyasini amalga oshirmaydigan (===) qat’iy taqqoslashni tavsiya etamiz, bu operandlarni to‘g‘ridan-to‘g‘ri solishtiradi.