CodeShot

برابری ضعیف (==) در مقابل برابری دقیق (===)

عملگر == قبل از مقایسه، مقادیر را به‌صورت خودکار به یک نوع مشترک تبدیل می‌کند (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 است) باعث باگ‌های ظریف و سخت‌ردیابی شود.

جمع‌بندی

همیشه از === و !== برای مقایسه در جاوااسکریپت استفاده کنید مگر دلیل فنی و آگاهانه خاصی برای استفاده از == داشته باشید.