برابری ضعیف (==) در مقابل برابری دقیق (===)
عملگر == قبل از مقایسه، مقادیر را بهصورت خودکار به یک نوع مشترک تبدیل میکند (Type Coercion) که میتواند نتایج غیرمنتظره بدهد، در حالی که === بدون هیچ تبدیل نوعی، هم مقدار و هم نوع داده را دقیقاً مقایسه میکند.
| ویژگی | برابری ضعیف (==) | برابری دقیق (===) |
|---|---|---|
| تبدیل نوع خودکار | دارد | ندارد |
| قابلیت پیشبینی | کمتر | بیشتر |
| توصیه استفاده | تقریباً هرگز | همیشه |
کِی از برابری ضعیف (==) استفاده کنیم؟
تقریباً هیچوقت توصیه نمیشود، مگر در موارد بسیار خاص مثل چک کردن همزمان null و undefined با x == null.
کِی از برابری دقیق (===) استفاده کنیم؟
همیشه؛ === رفتار قابل پیشبینیتر و کد قابل فهمتری تولید میکند و از باگهای ناشی از تبدیل نوع پنهان جلوگیری میکند.
مثال برابری ضعیف (==)
0 == '' // true (تبدیل نوع مبهم)
false == '0' // true
null == undefined // true
مثال برابری دقیق (===)
0 === '' // false
false === '0' // false
null === undefined // false
اشتباه رایج
اشتباه رایج تازهکارها استفاده بیفکر از == در شرطهای if است که میتواند بهخاطر تبدیل نوع پنهان (مثلاً "0" == false برابر true است) باعث باگهای ظریف و سختردیابی شود.
جمعبندی
همیشه از === و !== برای مقایسه در جاوااسکریپت استفاده کنید مگر دلیل فنی و آگاهانه خاصی برای استفاده از == داشته باشید.
