== va === o'rtasidagi farq nimada?
Savol
JavaScript'da == va === o'rtasidagi farq nimada?
Qisqa javob
=== (qat'iy tenglik) qiymatlarni tur keltirmasdan solishtiradi — turlar bir xil bo'lishi kerak. == (qat'iy bo'lmagan tenglik) taqqoslashdan oldin operandlarni bitta turga keltiradi, bu ko'pincha kutilmagan natijalar beradi.
Batafsil javob
=== avval operandlarning turini tekshiradi: agar turlar boshqa-boshqa bo'lsa — natija darhol false, hech qanday keltirish sodir bo'lmaydi. Agar turlar bir xil bo'lsa, taqqoslash odatdagidek boradi (sonlar/satrlar/mantiqiy qiymatlar — qiymat bo'yicha, obyektlar — havola bo'yicha).
== taqqoslashdan oldin spetsifikatsiyaning ancha chalkash qoidalari bo'yicha tur keltirish (type coercion) bajaradi: masalan, son satr bilan solishtirilganda satr songa keltiriladi, null faqat undefined bilan teng (boshqa hech nima bilan emas), obyekt valueOf/toString orqali primitivga keltiriladi.
Keltirishning aniq bo'lmagan qoidalari tufayli ('' == 0, [] == false, '0' == false) zamonaviy kodda deyarli hamma joyda ===/!== ishlatish tavsiya etiladi, == esa faqat value == null ni ataylab tekshirish uchun (bu bir vaqtning o'zida ham null, ham undefinedni ushlaydi).
Misol
0 == '0' // true — satr songa keltiriladi
0 == '' // true — bo'sh satr 0ga keltiriladi
0 == '\n' // true — bo'shliqli satr 0ga keltiriladi
false == 'false' // false — satr bo'sh emas, NaNga keltiriladi
null == undefined // true — maxsus qoida
null === undefined // false — turlar boshqa-boshqa
1 === 1 // true
1 === '1' // false — turlar boshqa-boshqa, keltirish yo'q
// == ishlatishning yagona oqlangan holati
function isNullish(value) {
return value == null // ham null'ni, ham undefined'ni ushlaydi
}
Qo'shimcha savollar
- Nega
NaN === NaNfalseberadi va qiymatniNaNga qanday to'g'ri tekshirish mumkin? ==obyekt va primitivni qanday solishtiradi (masalan,[1] == 1)?Object.is===dan nimasi bilan farq qiladi?