Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û .? Ø±ÙØ´Û بدÙ٠خطا Ø¨Ø±Ø§Û Ø¯Ø³ØªÛØ§Ø¨Û ب٠ÙÛÚÚ¯ÛâÙØ§Û(properties) داخÙÛ Ø´ÛØ¡ است ØØªÛ در زÙ
اÙÛ Ú©Ù ÙÛÚÚ¯Û Ù
ÛØ§ÙÛ ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد
Ù Ø´Ú©Ù âÙÛÚÚ¯Û ÙØ§Ù ÙØ¬Ùدâ
اگر Ø¨Ù ØªØ§Ø²Ú¯Û Ø´Ø±ÙØ¹ Ø¨Ù Ø®ÙØ§ÙØ¯Ù Ø¢Ù ÙØ²Ø´ Ù ÛØ§Ø¯Ú¯ÛØ±Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت کردÙâØ§ÛØ¯ Ø Ø´Ø§ÛØ¯ اÛ٠٠شک٠را ÙÙÙØ² Ù٠س ÙکردÙâØ§ÛØ¯Ø ا٠ا اÛÙ ÛÚ© Ù Ø´Ú©Ù Ú©Ø§Ù ÙØ§Ù Ø±Ø§ÛØ¬ است.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ Ø¨ÛØ§ÛÛØ¯ بگÙÛÛÙ
Ø´ÛØ¡ÙØ§Û user را دارÛÙ
Ú©Ù Ø§Ø·ÙØ§Ø¹Ø§ØªÛ Ø¯Ø±Ø¨Ø§Ø±Ù Ú©Ø§Ø±Ø¨Ø±ÙØ§Û Ù
ا در Ø®ÙØ¯ دارد.
اکثر کاربرا٠Ù
ا در ÙÛÚÚ¯Û user.address آدرسâÙØ§ÛÛ Ø¯Ø§Ø±ÙØ¯ Ù Ø®ÛØ§Ø¨Ø§Ù را در user.address.street Ø¯Ø§Ø±ÙØ¯ ÙÙÛ Ø¨Ø¹Ø¶Û Ø§Ø² Ø¢ÙØ§Ù اÛÙ Ø§Ø·ÙØ§Ø¹Ø§Øª را ارائ٠ÙکردÙâØ§ÙØ¯.
در ÚÙÛÙ Ù
ÙØ±Ø¯ÛØ Ø§Ú¯Ø± Ù
ا ØªÙØ§Ø´ Ú©ÙÛÙ
Ù
ÙØ¯Ø§Ø± user.address.street را Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ
Ø Ù Ú©Ø§Ø±Ø¨Ø± آدرس ÙØ¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø¨Ø§ خطا Ù
ÙØ§Ø¬Ù Ù
ÛâØ´ÙÛÙ
:
let user = {}; // "address" ÛÚ© کاربر بدÙÙ ÙÛÚÚ¯Û
alert(user.address.street); // !خطا
اÛÙ ÛÚ© Ø®Ø±ÙØ¬Û ÙØ§Ø¨Ù ØØ¯Ø³ است٬ Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت اÛÙÚ¯ÙÙ٠کار Ù
ÛâÚ©ÙØ¯. تا زÙ
اÙÛ Ú©Ù user.address برابر با undefined است ØªÙØ§Ø´ Ø¨Ø±Ø§Û Ú¯Ø±ÙØªÙ user.address.street با خطا Ù
ÙØ§Ø¬Ù Ù
ÛØ´Ùد.
ÙÙÛ Ø¯Ø± Ø¨Ø³ÛØ§Ø±Û از Ù
ÙØ§Ø±Ø¯ عÙ
ÙÛØ Ù
ا ØªØ±Ø¬ÛØ Ù
ÛâØ¯ÙÛÙ
Ø¨Ù Ø¬Ø§Û Ø®Ø·Ø§Ø âundefined را Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ
(ب٠Ù
Ø¹ÙØ§Û âØ¨Ø¯ÙÙ Ø®ÛØ§Ø¨Ø§Ùâ).
â¦Ù Ù
ثاÙÛ Ø¯Ûگر. در ØªÙØ³Ø¹Ù ÙØ¨Ø Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
ÛÚ© Ø´ÛØ¡ ک٠با ÛÚ© اÙÙ
ا٠در ØµÙØÙ Ù
Ø·Ø§Ø¨ÙØª دارد را با Ø§Ø³ØªÙØ§Ø¯Ù از ÛÚ© Ù
تد Ø®Ø§ØµØ Ù
اÙÙØ¯ document.querySelector('.elem') Ø¨Ú¯ÛØ±ÛÙ
٠اÛÙ Ù
تد ÙÙگاÙ
Û Ú©Ù ÚÙÛ٠اÙÙ
اÙÛ ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد null را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯:
// document.querySelector('.elem') Ø®ÙØ§Ùد شد اگر اÙÙ
ÙØª ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد null برابر با
let html = document.querySelector('.elem').innerHTML; // باشد خطا Ø®ÙØ§Ùد داد null اگر
Ø¨Ø§Ø±Û Ø¯ÛÚ¯Ø±Ø Ø§Ú¯Ø± اÙÙÙ
Ø§Ù ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد Ù
ا ÙÙگاÙ
Ø¯Ø³ØªØ±Ø³Û Ø¨Ù ÙÛÚÚ¯Û .innerHTML از null Ø§Ø±ÙØ± Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙÛÙ
. ٠در Ø¨Ø¹Ø¶Û Ù
ÙØ§Ø±Ø¯Ø ÙÙØªÛ Ú©Ù ÙØ¨Ùد٠اÙÙÙ
Ø§Ù Ø·Ø¨ÛØ¹Û Ø§Ø³ØªØ Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
از خطا جÙÙÚ¯ÛØ±Û Ú©ÙÛÙ
Ù ÙÙØ· html = null را ب٠عÙÙØ§Ù ÙØªÛØ¬Ù ÙØ¨ÙÙ Ú©ÙÛÙ
.
ÚÚ¯ÙÙÙ Ù ÛâØªÙØ§ÙÛ٠اÛ٠کار را Ø§ÙØ¬Ø§Ù دÙÛÙ Ø
راÙâØÙ ÙØ§Ø¶Ø اÛ٠است Ú©Ù ÙØ¨Ù از اÛÙک٠ب٠ÙÛÚÚ¯Û Ø¢Ù Ø¯Ø³ØªØ±Ø³Û Ù¾ÛØ¯Ø§ Ú©ÙÛÙ
Ø Ù
ÙØ¯Ø§Ø± آ٠را با if ÛØ§ عÙ
گر Ø´Ø±Ø·Û ? Ø¨Ø±Ø±Ø³Û Ú©ÙÛÙ
Ø Ø¨Ù Ø§ÛÙ ØµÙØ±Øª:
let user = {};
alert(user.address ? user.address.street : undefined);
Ø§ÙØ§Ù بدÙ٠خطا کار Ù
ÛâÚ©ÙØ¯â¦ ÙÙÛ Ø§ØµÙØ§ Ø²ÛØ¨Ø§ ÙÛØ³Øª. ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛâØ¨ÛÙÛØ¯ "user.address" Ø¯ÙØ¨Ø§Ø± در کد تکرار شد٠است.
اÛÙØ¬Ø§ Ù
ÛâØ¨ÛÙÛÙ
ک٠اÛÙ Ù
ÙØ¶Ùع ÚÚ¯ÙÙÙ Ø¨Ø±Ø§Û document.querySelector Ø¨ÙØ¸Ø± Ù
ÛâØ±Ø³Ø¯:
let html = document.querySelector('.elem') ? document.querySelector('.elem').innerHTML : null;
Ù
ÛâØªÙØ§ÙÛÙ
ببÛÙÛÙ
ک٠جستجÙÛ Ø§ÙÙ
ا٠document.querySelector('.elem') اÛÙØ¬Ø§ Ø¯ÙØ¨Ø§Ø± ÙØ±Ø§Ø®ÙاÙÛ Ø´Ø¯Ù Ø§Ø³Øª. اÛÙ Ø®ÙØ¨ ÙÛØ³Øª.
Ø¨Ø±Ø§Û ÙÛÚÚ¯ÛâÙØ§ÛÛ Ø¨Ø§ ت٠در تÙÛÛ Ø¹Ù ÛÙâØªØ±Ø ØØªÛ Ø²Ø´ØªâØªØ± Ù ÛâØ´ÙØ¯ ÚÙÙ ØªÚ©Ø±Ø§Ø±ÙØ§Û Ø¨ÛØ´ØªØ±Û ÙÛØ§Ø² است.
Ø¨Ø±Ø§Û Ù
Ø«Ø§Ù Ø¨ÛØ§Ûد Ù
ÙØ¯Ø§Ø± user.address.street.name را با Ø±ÙØ´Û Ù
Ø´Ø§Ø¨Ù Ø¨Ú¯ÛØ±ÛÙ
.
let user = {}; // کاربر Ø¢Ø¯Ø±Ø³Û ÙØ¯Ø§Ø±Ø¯
alert(user.address ? user.address.street ? user.address.street.name : null : null);
اÛÙ Ø§ÙØªØ¶Ø§Ø Ø§Ø³ØªØ ÛÚ© ÙÙØ± ٠٠ک٠است ØØªÛ با درک اÛ٠کد ٠شک٠داشت٠باشد.
Ø±Ø§Ù Ø¨ÙØªØ±Û Ø¨Ø±Ø§Û ÙÙØ´ØªÙ Ø¢Ù ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø Ø¨Ø§ Ø§Ø³ØªÙØ§Ø¯Ù از عÙ
Ùگر &&:
let user = {}; // کاربر Ø¢Ø¯Ø±Ø³Û ÙØ¯Ø§Ø±Ø¯
alert( user.address && user.address.street && user.address.street.name ); // undefined (بدÙ٠خطا)
Ø§Ø³ØªÙØ§Ø¯Ù از AND در Ú©Ù Ù Ø³ÛØ± Ø±Ø³ÛØ¯Ù ب٠ÙÛÚÚ¯ÛØ ÙØ¬Ùد Ù٠٠اجزا را تض٠ÛÙ Ù ÛâÚ©ÙØ¯ (اگر اÛÙ ÚÙÛÙ ÙØ¨Ø§Ø´Ø¯Ø Ø§Ø±Ø²ÛØ§Ø¨Û ٠تÙÙÙ Ù ÛâØ´ÙØ¯)Ø Ø§Ù Ø§ Ø¢Ù ÙÙ Ø§ÛØ¯ÙâØ¢Ù ÙÛØ³Øª.
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛâØ¨ÛÙÛØ¯ ÙØ§Ù
ÙÛÚÚ¯ÛâÙØ§ ÙÙ
ÚÙØ§Ù در کد تکرار Ù
ÛâØ´ÙÙØ¯. Ø¨Ù Ø·ÙØ± Ù
ثا٠در ÙØ·Ø¹Ù کد Ø¨Ø§ÙØ§ user.address س٠بار تکرار شد٠است.
ب٠ÙÙ
Û٠دÙÛÙ Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û .? ب٠زبا٠اضاÙ٠شد. تا اÛÙ Ù
شک٠را Ø¨Ø±Ø§Û ÙÙ
ÛØ´Ù Ø¨Ø±Ø·Ø±Ù Ú©ÙØ¯!
Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û
Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û .? اگر Ù
ÙØ¯Ø§Ø± ÙØ¨Ù از ÙØ³Ù
ت ?. برابر با undefined ÛØ§ null باشد Ø§Ø±Ø²ÛØ§Ø¨Û را Ù
تÙÙÙ Ù
ÛâÚ©ÙØ¯ Ù Ù
ÙØ¯Ø§Ø± undefined را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
در اداÙ
٠اÛÙ Ù
ÙØ§ÙÙØ Ø¨Ø±Ø§Û Ø§Ø®ØªØµØ§Ø±Ø Ø®ÙØ§ÙÛÙ
Ú¯ÙØª ک٠اگر ÚÛØ²Û null Ù undefined ÙØ¨Ø§Ø´Ø¯Ø âÙØ¬Ùد داردâ.
ÛØ§ ب٠عبارت دÛگر value?.prop:
- اگر
valueÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ù Ø«Ùvalue.propکار Ù ÛâÚ©ÙØ¯Ø - در ØºÛØ± اÛÙØµÙرت (زÙ
اÙÛ Ú©Ù
valueبرابر باundefined/nullاست) Ù ÙØ¯Ø§Ø±undefinedرا بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
کد پاÛÛ٠راÙÛ Ù
Ø·Ù
Ø¦Ù Ø¨Ø±Ø§Û Ø¯Ø³ØªØ±Ø³Û Ø¨Ù user.address.street با Ø§Ø³ØªÙØ§Ø¯Ù از .? است:
let user = {}; // کاربر Ø¢Ø¯Ø±Ø³Û ÙØ¯Ø§Ø±Ø¯
alert( user?.address?.street ); // undefined (بدÙ٠خطا)
ØØ§Ùا کد Ú©ÙØªØ§Ù Ù ØªÙ ÛØ² Ø§Ø³ØªØ Ø¨Ø¯ÙÙ ÙÛÚ ØªÚ©Ø±Ø§Ø± اضاÙÙâØ§Û.
اÛÙØ¬Ø§ Ù
ثاÙÛ Ø¨Ø§ Ø§Ø³ØªÙØ§Ø¯Ù از document.querySelector دارÛÙ
:
let html = document.querySelector('.elem')?.innerHTML; // Ø®ÙØ§Ùد Ø¨ÙØ¯ undefined اگر اÙÙ
اÙÛ ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد
Ø®ÙØ§Ùد٠آدرس با Ø§Ø³ØªÙØ§Ø¯Ù از user?.address ØØªÛ اگر Ø´ÛØ¡ user ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد ÙÙ
کار Ù
ÛâÚ©ÙØ¯:
let user = null;
alert( user?.address ); // undefined
alert( user?.address.street ); // undefined
ÙØ·Ùا ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯: سÛÙØªÚ©Ø³ .? Ù
ÙØ¯Ø§Ø±ÙØ§Û ÙØ¨ÙÛ Ø±Ø§ Ø§Ø®ØªÛØ§Ø±Û Ù
ÛâÚ©ÙØ¯ ÙÙ Ù
ÙØ¯Ø§Ø±ÙØ§Û Ø¬ÙÙÛ Ø¢Ù Ø±Ø§.
Ù
Ø«ÙØ§ در user?.address.street.name عبارت â.? اجاز٠Ù
ÛâØ¯ÙØ¯ Ú©Ù user برابر با null/undefined باشد (٠در اÛÙ ØµÙØ±Øª undefined را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯)Ø Ø§Ù
ا اÛÙ Ù
ÙØ¶Ùع ÙÙØ· Ø¨Ø±Ø§Û user صاد٠است. ب٠ÙÛÚÚ¯ÛâÙØ§Û جÙÙÛÛ Ø¨Ø§ سبک Ù
عÙ
ÙÙÛ Ø¯Ø³ØªØ±Ø³Û Ù¾ÛØ¯Ø§ Ù
ÛâØ´ÙØ¯. اگر Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
Ø¨Ø¹Ø¶Û Ø§Ø² ÙÛÚÚ¯ÛâÙØ§ را Ø§Ø®ØªÛØ§Ø±Û Ú©ÙÛÙ
Ù
ÛâØªÙØ§ÙÛÙ
تعداد Ø¨ÛØ´ØªØ±Û از . را با .? جاÛگزÛÙ Ú©ÙÛÙ
.
Ù
ا Ø¨Ø§ÛØ¯ از .? ÙÙØ· زÙ
اÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
ک٠عدÙ
ÙØ¬Ùد ÚÛØ²Û اشکاÙÛ ÙØ¯Ø§Ø±Ø¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اگر طب٠Ù
ÙØ·Ù کد Ù
Ø§Ø Ø´ÛØ¡ user Ø¨Ø§ÛØ¯ ÙØ¬Ùد داشت٠باشد ÙÙÛ address Ø§Ø®ØªÛØ§Ø±Û Ø¨Ø§Ø´Ø¯Ø Ù¾Ø³ Ù
ا Ø¨Ø§ÛØ¯ اÛÙÚ¯ÙÙ٠بÙÙÛØ³ÛÙ
user.address?.street ÙÙ user?.address?.street.
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ اگر ØªØµØ§Ø¯ÙØ§Ù âuser برابر با undefined Ø¨Ø§Ø´Ø¯Ø Ø´Ø§ÙØ¯ ÛÚ© Ø®Ø·Ø§Û Ø¨Ø±ÙØ§Ù
ÙâÙÙÛØ³Û در Ù
ÙØ±Ø¯ Ø¢Ù Ø®ÙØ§ÙÛÙ
Ø¨ÙØ¯ ٠آ٠را Ø¨Ø±Ø·Ø±Ù Ø®ÙØ§ÙÛÙ
کرد. در ØºÛØ± اÛÙ ØµÙØ±ØªØ اگر از .? Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø®Ø·Ø§ÙØ§Û کد را Ù
Û ØªÙØ§Ù در Ù
ÙØ§Ø±Ø¯Û Ú©Ù Ù
ÙØ§Ø³Ø¨ ÙÛØ³Øª ساکت Ú©Ø±Ø¯Ø Ù Ø§Û٠کار اشکاÙâØ²Ø¯Ø§ÛÛ Ø±Ø§ Ø¯Ø´ÙØ§Ø±ØªØ± Ù
ÛâÚ©ÙØ¯.
.? Ø¨Ø§ÛØ¯ تعرÛ٠شد٠باشداگر Ù
ØªØºÛØ± user Ú©ÙØ§ ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد user?.anything خطا Ù
ÛâØ¯ÙØ¯:
// ReferenceError: user is not defined
user?.address;
Ø¨Ø§ÛØ¯ Ù
ØªØºÛØ± تعرÛ٠شد٠باشد (Ø¨Ø±Ø§Û Ù
ثاÙ: let/const/var user ÛØ§ ب٠عÙÙØ§Ù ÛÚ© پاراÙ
تر تابع). Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û ÙÙØ· Ø¨Ø±Ø§Û Ù
ØªØºÛØ±ÙØ§Û ØªØ¹Ø±Û٠شد٠کار Ù
ÛâÚ©ÙØ¯.
Ú©ÙØªØ§Ù کرد٠اتصاÙ
ÙÙ
Ø§ÙØ·Ùر Ú©Ù ÙØ¨Ùا Ú¯ÙØªÙ شد عبارت .? اگر عبارت سÙ
ت ÚÙ¾ Ø¢Ù ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø ÙÙØ±Ø§Ù Ø§Ø±Ø²ÛØ§Ø¨Û را Ù
تÙÙÙ Ù
ÛâÚ©ÙØ¯ (اتصا٠را Ú©ÙØªØ§Ù Ù
ÛâÚ©ÙØ¯).
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ اگر ÙØ±Ø§Ø®ÙاÙÛ ØªØ§Ø¨Ø¹Û ÛØ§ عÙ
ÙÛØ§Øª دÛÚ¯Ø±Û Ø¯Ø± سÙ
ت راست .? ÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯Ø Ø§ØªÙØ§Ù ÙÙ
ÛâØ§ÙØªÙد.
Ø¨Ø±Ø§Û ÙÙ ÙÙÙ:
â```js run let user = null; let x = 0;
user?.sayHi(x++); // ÙÙ ÛâØ±Ø³Ø¯ ++x Ù sayHi ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯Ø پس Ø§Ø¬Ø±Ø§Û Ú©Ø¯ Ø¨Ù ÙØ±Ø§Ø®ÙاÙÛ âuserâ
alert(x); // 0 :Ù ÙØ¯Ø§Ø± Ø§ÙØ²Ø§ÛØ´ ÙÛØ§Ùت٠پس â```
اÙÙØ§Ø¹ دÛگر: ?.()Ø ?.[]
Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û .? ÛÚ© عÙ
گر ÙÛØ³Øª بÙÚ©Ù ÛÚ© ساختار سÛÙØªÚ©Ø³Û خاص است ک٠با ØªÙØ§Ø¨Ø¹ ٠براکتâÙØ§ ÙÛØ² کار Ù
ÛâÚ©ÙØ¯.
Ø¨Ø±Ø§Û Ù
ثا٠().? Ø¨Ø±Ø§Û ØµØ¯Ø§ Ø²Ø¯Ù ØªØ§Ø¨Ø¹Û Ú©Ù Ù
Ù
ک٠است ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد ÙÙ
کاربرد دارد.
در کد Ø²ÛØ±Ø Ø¨Ø±Ø®Û Ø§Ø² کاربرا٠Ù
ا Ù
تد admin را Ø¯Ø§Ø±ÙØ¯ Ù Ø¨Ø±Ø®Û Ø®ÛØ±:
â```js run let userAdmin = { admin() { alert(â٠٠اد٠ÛÙ ÙØ³ØªÙ â); } };
let userGuest = {};
! userAdmin.admin?.(); // ٠٠اد٠ÛÙ ÙØ³ØªÙ /!
! userGuest.admin?.(); // ÚÛØ²Û Ø§ØªÙØ§Ù ÙÙ ÛâØ§ÙØªØ¯ (ÚÙÛÙ Ù ØªØ¯Û ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯) /! â```
اÛÙØ¬Ø§Ø در ÙØ± Ø¯Ù Ø®Ø·Ø Ù
ا ابتدا از ÙÙØ·Ù (userAdmin.admin) Ø¨Ø±Ø§Û Ú¯Ø±ÙØªÙ ÙÛÚÚ¯Û âadmin Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÛÙ
ب٠خاطر اÛÙÚ©Ù ÙØ±Ø¶ Ù
ÛâÚ©ÙÛÙ
Ú©Ù Ø´ÛØ¡ âuser ØØªÙ
ا ÙØ¬Ùد دارد پس Ø®ÙØ§Ùد٠از Ø¢Ù Ù
Ø·Ù
ئ٠است.
سپس ().? عبارت سÙ
ت ÚÙ¾ را Ø¨Ø±Ø±Ø³Û Ù
ÛâÚ©ÙØ¯: اگر تابع âadmin ÙØ¬Ùد داشت٠باشد اجرا Ù
ÛâØ´ÙØ¯ (Ø¨Ø±Ø§Û userAdmin صد٠Ù
ÛâÚ©ÙØ¯). در ØºÛØ± اÛÙØµÙرت (Ø¨Ø±Ø§Û userGuest) Ø§Ø±Ø²ÛØ§Ø¨Û بدÙ٠خطا Ù
تÙÙÙ Ù
ÛâØ´ÙØ¯.
سÛÙØªÚ©Ø³ [].? ÙÛØ² کار Ù
ÛâÚ©ÙØ¯Ø اگر Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
از براکت Ø¨Ù Ø¬Ø§Û ÙÙØ·Ù . Ø¨Ø±Ø§Û Ø¯Ø³ØªÛØ§Ø¨Û ب٠ÙÛÚÚ¯ÛâÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. Ù
شاب٠Ù
ÙØ§Ø±Ø¯ ÙØ¨ÙÛØ اÛ٠سÛÙØªÚ©Ø³ اجاز٠Ù
Û Ø¯ÙØ¯ تا با Ø®ÛØ§Ù Ø±Ø§ØØª ÛÚ© ÙÛÚÚ¯Û Ø§Ø² Ø´ÛØ¡Ø§Û Ú©Ù Ù
Ù
ک٠است ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ باشد را Ø¨Ø®ÙØ§ÙÛÙ
.
let key = "firstName";
let user1 = {
firstName: "John"
};
let user2 = null;
alert( user1?.[key] ); // John
alert( user2?.[key] ); // undefined
Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
از .? با delete ÙÙ
Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
:
delete user?.name; // را ØØ°Ù Ú©Ù user.name ÙØ¬Ùد داشت user اگر
.? Ø¨Ø±Ø§Û Ù¾Ø§Ú© Ú©Ø±Ø¯Ù Ù Ø®ÙØ§Ùد٠Ù
Ø·Ù
Ø¦Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
ÙÙÛ Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ ÙÙ.Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û .? ÙÛÚ Ú©Ø§Ø±Ø¨Ø±Ø¯Û Ø¨Ø±Ø§Û Ø³Ù
ت ÚÙ¾ Ù
ساÙÛ ÙØ¯Ø§Ø±Ø¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
let user = null;
user?.name = "John"; // Ø§Ø±ÙØ±Ø کار ÙÙ
ÛâÚ©ÙØ¯
// undefined = "John" :ÚÙ٠اÛÙÚ¯ÙÙÙ Ø§Ø±Ø²ÛØ§Ø¨Û Ù
ÛâØ´ÙØ¯
Ø®ÙØ§ØµÙ
Ø²ÙØ¬ÛرÙâÛ Ø§Ø®ØªÛØ§Ø±Û ?. س٠شک٠دارد:
obj?.propâ Ù ÙØ¯Ø§Ø± ââobj.propرا اگرobjÙØ¬Ùد داشت٠باشد بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯ در ØºÛØ± اÛÙØµÙرت Ù ÙØ¯Ø§Ø±undefinedرا بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.obj?.[prop]â Ù ÙØ¯Ø§Ø± ââobj.[prop]را اگرobjÙØ¬Ùد داشت٠باشد بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯ در ØºÛØ± اÛÙØµÙرت Ù ÙØ¯Ø§Ø±undefinedرا بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.obj.method()â ââobj?.methodرا اگرobjÙØ¬Ùد داشت٠باشد صدا Ù ÛâØ²ÙØ¯ در ØºÛØ± اÛÙ ØµÙØ±Øª Ù ÙØ¯Ø§Ø±undefinedرا بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛâØ¨ÛÙÛÙ
Ø ÙÙ
٠آÙÙØ§ Ø¨Ø±Ø§Û Ø§Ø³ØªÙØ§Ø¯Ù Ø³Ø§Ø¯Ù Ù Ø¢Ø³Ø§Ù ÙØ³ØªÙد. .? سÙ
ت ÚÙ¾ را از ÙØ¸Ø± null/undefined Ø¨ÙØ¯Ù Ø¨Ø±Ø±Ø³Û Ù
ÛâÚ©ÙØ¯ ٠اگر برابر با null/undefined ÙØ¨Ø§Ø´Ø¯ اجاز٠Ù
ÛâØ¯ÙØ¯ تا Ø§Ø±Ø²ÛØ§Ø¨Û اداÙ
Ù ÛØ§Ø¨Ø¯.
Ø²ÙØ¬ÛرÙâØ§Û Ø§Ø² .? اÙ
Ú©Ø§Ù Ø¯Ø³ØªØ±Ø³Û Ø¨Ù ÙÛÚÚ¯ÛâÙØ§Û ØªÙØ¯Ø±ØªÙ را ÙÙ
ÙØ±Ø§ÙÙ
Ù
ÛâÚ©ÙØ¯.
با اÛÙ ØØ§Ù ÙÙÙØ² Ù
ا Ø¨Ø§ÛØ¯ .? را با Ø¯ÙØª اعÙ
ا٠کÙÛÙ
Ø ÙÙØ· Ø¯Ø±ØµÙØ±ØªÛ ک٠با ØªÙØ¬Ù ب٠Ù
ÙØ·Ù کد Ù
ا ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ ÙØ³Ù
ت سÙ
ت ÚÙ¾ ÙØ§Ø¨Ù ÙØ¨Ù٠باشد. تا اگر Ø§Ø±ÙØ±ÙØ§Û Ø¨Ø±ÙØ§Ù
ÙâÙÙÛØ³Û رخ Ø¯Ø§Ø¯ÙØ¯Ø از Ù
ا Ù¾ÙÙØ§Ù ÙØ¨Ø§Ø´Ùد.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)