js Optional Chaining

در جاوااسکریپت، عملگر (?.) Optional Chaining  برای دسترسی ایمن به ویژگی‌ها و توابع تو در تو استفاده می‌شود، بدون اینکه در صورت نبودن مقدار، خطا بدهد.

این عملگر کمک می‌کند اگر مقداری null یا undefined بود، برنامه متوقف نشود و فقط مقدار undefined برگرداند.

🔹 مشکل بدون Optional Chaining

اگر در یک شیء، خاصیتی وجود نداشته باشد، دسترسی مستقیم به زیر‌ویژگی‌ها باعث خطا می‌شود:

const user = {};

console.log(user.address.city); // ❌ خطا: Cannot read properties of undefined

🔹 حل مشکل با Optional Chaining

با استفاده از ?.، در صورت نبود مقدار، جاوااسکریپت به‌جای خطا، مقدار undefined برمی‌گرداند:

const user = {};

console.log(user.address?.city); // ✅ undefined (بدون خطا)

🔹 در توابع

می‌توان از Optional Chaining برای فراخوانی ایمن توابع نیز استفاده کرد:

const user = {
  info: null
};

user.info?.(); // ✅ بدون خطا

اگر info تابع نباشد یا مقدارش null باشد، این دستور به‌جای خطا، فقط undefined برمی‌گرداند.

🔹 در آرایه‌ها

const users = null;

console.log(users?.[0]); // ✅ undefined

در اینجا اگر users مقدار null داشته باشد، دسترسی به اندیس 0 باعث خطا نمی‌شود.

🔹 ترکیب با Nullish Coalescing (??)

معمولاً ?. را همراه با ?? استفاده می‌کنند تا در صورت undefined بودن، مقدار پیش‌فرض بدهیم:

const user = {};

console.log(user.address?.city ?? "نامشخص");

📌 خروجی:

نامشخص

نکته:

  • عملگر ?. فقط زمانی جلوی خطا را می‌گیرد که مقدار null یا undefined باشد.

  • استفاده‌ی بیش از حد از آن می‌تواند منطق برنامه را پنهان کند، پس در جای درست استفاده شود.

  • این ویژگی از ES2020 به بعد پشتیبانی می‌شود.