مقایسه در جاوااسکریپت

javascript comparisons
20 آبان 1403

مقایسه در جاوااسکریپت یکی از پایه‌ای ترین اصول زبان است که به شما امکان می‌دهد عملیات منطقی و شرطی انجام دهید. چه بخواهید دو عدد را مقایسه کنید و چه بخواهید بررسی کنید که آیا دو رشته مساوی هستند یا خیر، جاوااسکریپت ابزارهای مورد نیاز شما را فراهم کرده است. هرچند در نگاه اول این مقایسه‌ها ساده به نظر می‌آیند، اما جزئیاتی دارند که می‌تواند تاثیر بسیاری بر عملکرد برنامه‌های شما داشته باشد.

در جاوااسکریپت مقایسه‌ها به دو دسته اصلی تقسیم می‌شوند: مقایسه‌های با تصادف نوع (type coercion) که با استفاده از عملگرهای == و != صورت می‌گیرد، و مقایسه‌های بدون تصادف نوع، که توسط عملگرهای === و !== انجام می‌شود. انتخاب درست بین این دو روش می‌تواند مانع بروز خطاهای ناخواسته در کد شما شود.

به عنوان مثال هنگامی که از == استفاده می‌کنید، جاوااسکریپت تلاش می‌کند تا با تغییر نوع داده‌ها آنها را یکسان کند و سپس مقایسه را انجام دهد. لذا "5" با 5 برابر در نظر گرفته می‌شود. اما در === اینطور نیست و باید نوع نیز برابر باشد.

برای درک بهتر این مقایسه‌ها، به مثال زیر توجه کنید:


let a = 5;
let b = "5";

// با تصادف نوع
if (a == b) {
   console.log("a و b برابرند");
} else {
   console.log("a و b برابر نیستند");
}

// بدون تصادف نوع
if (a === b) {
   console.log("a و b دقیقا برابرند");
} else {
   console.log("a و b دقیقا برابر نیستند");
}

توضیح کد:

let a = 5;
متغیر a را به عدد 5 اختصاص می‌دهد.

let b = "5";
متغیر b را به رشته "5" اختصاص می‌دهد.

if (a == b)
بررسی می‌کند که آیا a و b برابرند یا نه، با تصادف نوع.

console.log("a و b برابرند");
در صورت برابری، این متن را در خروجی نمایش می‌دهد.

if (a === b)
بررسی می‌شود که آیا a و b دقیقا برابرند، یعنی بدون تصادف نوع.

console.log("a و b دقیقا برابرند");
اگر برابر باشند، این متن نمایش داده می‌شود و گرنه متن مخالف آن نمایش داده می‌شود.

سوالات متداول

؟

چرا باید از === به جای == استفاده کنیم؟

؟

آیا می‌توانیم بین رشته و عدد مقایسه مستقیم انجام دهیم؟

؟

تصادف نوع چیست و چگونه کار می‌کند؟