✍️ عملگر ?? وقتی مقدار سمت چپ null یا undefined باشه، سمت راست را انتخاب میکنه. به این دو حالت معمولاً nullish میگیم؛ یعنی واقعاً مقداری برای آن بخش نداریم. اما صفر، false و رشته خالی همچنان مقدارهای معتبرند و با ?? عوض نمیشن.
در مقابل، || همه مقدارهای falsy را به سمت راست میفرسته. falsy یعنی مقداری که در شرط مانند نادرست رفتار میکنه؛ صفر هم یکی از آنهاست. اگر موجودی انبار صفر باشه، تبدیلش به موجودی پیشفرض یک خطای جدی است. برای دادهای که صفر معنای واقعی دارد، ?? معمولاً انتخاب دقیقتریه.
در مثال پایین، تعداد موجود است و مقدارش صفره. برای هر عبارت جدا بپرس: آیا سمت چپ فقط null یا undefined است، یا به طور کلی در شرط نادرست حساب میشه؟ همین سؤال جواب را روشن میکنه. خطای رایج، حفظ کردن شکل کد بدون شناخت معنی پیشفرض است؛ اول باید تصمیم بگیریم کدام مقدارها واقعاً «گمشده» حساب میشن.
const quantity = 0;
console.log(quantity || 1);
console.log(quantity ?? 1);
فعالیت شما
دو خروجی استفاده از || و ?? روی quantity=0 را به ترتیب انتخاب کن.