== va === o'rtasidagi farq nimada?

JuniorJavaScript #javascript #operators

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 === NaN false beradi va qiymatni NaNga qanday to'g'ri tekshirish mumkin?
  • == obyekt va primitivni qanday solishtiradi (masalan, [1] == 1)?
  • Object.is === dan nimasi bilan farq qiladi?