✍️ دادهای که از فایل یا سرویس میگیریم همیشه همه ویژگیها را ندارد. اگر مستقیم user.address.city بخوانیم و address وجود نداشته باشه، برنامه خطا میده. optional chaining با ?. اجازه میده مسیر را بخوانیم و وقتی بخش قبلی null یا undefined است، به جای ادامه مسیر، undefined بگیریم.
در مثال، یکی از کاربرها نشانی دارد و دیگری ندارد. با user?.address?.city حتی نبودن خود user هم کنترل میشه. هر جایی از مسیر که ممکنه غایب باشه، باید علامت مناسب داشته باشه؛ اضافه کردن آن فقط در انتهای مسیر، نبودن بخش قبلی را درمان نمیکنه.
این ابزار جای اعتبارسنجی نوع همه دادهها نیست. مثلاً رشته بودن شهر یا درست بودن محتوای آن هنوز باید با قواعد برنامه بررسی بشه. خطای رایج اینه که optional chaining را ساختن مقدار پیشفرض بدونیم؛ نتیجه مسیر ناقص همچنان undefined است. برای انتخاب مقدار جایگزین، ابزار جداگانهای داریم که در گام بعد یاد میگیریم. اینجا هدف فقط خواندن امن مسیر و جلوگیری از خطای دسترسی است.
const readCity = user => user?.address?.city;
console.log(readCity({address:{city:'تبریز'}})); // تبریز
console.log(readCity({name:'آوا'})); // undefined
console.log(readCity(null)); // undefined
فعالیت شما
مثال خواندن شهر را دنبال کن؛ نبودن address یا user باید undefined بدهد و خطای دسترسی رخ ندهد.