عÙ
Ùگر nullish coalescing با Ø¯Ù Ø¹ÙØ§Ù
ت Ø³ÙØ§Ù ?? ÙÙØ´ØªÙ Ù
ÛâØ´ÙØ¯.
ب٠دÙÛ٠اÛÙک٠اÛ٠عÙ
Ùگر با null Ù undefined Ø¨Ù Ø·ÙØ± ÛÚ©Ø³Ø§Ù Ø±ÙØªØ§Ø± Ù
ÛâÚ©ÙØ¯Ø Ù
ا در اÛÙ ÙØµÙ از ÛÚ© Ø§ØµØ·ÙØ§Ø خاص Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÛÙ
. Ù
ÛâÚ¯ÙÛÛÙ
Ú©Ù ÛÚ© عبارت âØªØ¹Ø±Û٠شدÙâ Ø§Ø³Øª ÙØ±Ú¯Ø§Ù Ú©Ù ÙÙ null باشد Ù ÙÙ undefined.
ÙØªÛجÙâÛ a ?? b:
- اگر
aتعرÛÙ Ø´Ø¯Ù Ø¨Ø§Ø´Ø¯Ø Ù¾Ø³ برابر باaØ§Ø³ØªØ - اگر
aتعرÛÙ Ø´Ø¯Ù ÙØ¨Ø§Ø´Ø¯Ø پس برابر باbاست.
Ø¨Ù Ø¹Ø¨Ø§Ø±ØªÛ Ø¯ÛÚ¯Ø±Ø ?? اÙÙÛ٠آرگÙÙ
ا٠را اگر null/undefined ÙØ¨Ø§Ø´Ø¯ برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯. در ØºÛØ± اÛÙ ØµÙØ±ØªØ آرگÙÙ
ا٠دÙÙ
Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù Ù
ÛâØ´ÙØ¯.
ع٠Ùگر nullish coalescing ÚÛØ² Ú©Ø§Ù ÙØ§ Ø¬Ø¯ÛØ¯Û ÙÛØ³Øª. اÛ٠ع٠Ùگر تÙÙØ§ ÛÚ© سÛÙØªÚ©Ø³ Ø¨Ø±Ø§Û Ú¯Ø±ÙØªÙ اÙÙÛÙ Ù ÙØ¯Ø§Ø± âØªØ¹Ø±Û٠شدÙâ Ø§Ø² بÛÙ Ø¯Ù Ù ÙØ¯Ø§Ø± است.
Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
result = a ?? b را با Ø§Ø³ØªÙØ§Ø¯Ù از Ø§Ù¾Ø±Ø§ØªÙØ±ÙاÛÛ Ú©Ù Ø§Ø² ÙØ¨Ù Ù
ÛâØ´ÙØ§Ø³ÛÙ
Ø¯ÙØ¨Ø§Ø±Ù ب٠اÛ٠شک٠بÙÙÛØ³ÛÙ
:
result = (a !== null && a !== undefined) ? a : b;
ØØ§Ù Ø¨Ø§ÛØ¯ کاÙ
ÙØ§ Ø±ÙØ´Ù باشد Ú©Ù ?? ÚÙ Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯. Ø¨ÛØ§ÛÛØ¯ ببÛÙÛÙ
اÛ٠عÙ
Ùگر کجا Ú©Ù
Ú©âÙ
ا٠Ù
ÛâÚ©ÙØ¯.
ÛÚ© Ù
ÙØ±Ø¯ Ù
تداÙÙ Ø¨Ø±Ø§Û Ø§Ø³ØªÙØ§Ø¯Ù از ?? تعÛÛ٠کرد٠Ù
ÙØ¯Ø§Ø±Û Ù¾ÛØ´âÙØ±Ø¶ Ø¨Ø±Ø§Û Ù
ØªØºÛØ± است.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اÛÙØ¬Ø§ اگر Ù
ÙØ¯Ø§Ø± user برابر با null/undefined ÙØ¨Ø§Ø´Ø¯ آ٠را ÙØ´Ø§Ù Ù
ÛâØ¯ÙÛÙ
Ø Ø¯Ø± ØºÛØ± اÛÙ ØµÙØ±Øª Anonymous ÙØ´Ø§Ù داد٠Ù
ÛâØ´ÙØ¯:
let user;
alert(user ?? "Anonymous"); // Anonymous (است undefined برابر با user)
در اÛÙ Ù
ثا٠ÛÚ© اسÙ
ب٠user ØªØ®ØµÛØµ داد٠شد٠است:
let user = "John";
alert(user ?? "Anonymous"); // John (ÙÛØ³Øª null/udefined برابر با user)
ÙÙ
ÚÙÛÙ Ù
ÛâØªÙØ§ÙÛÙ
از ØªÙØ§ÙÛ ?? Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨ کرد٠اÙÙÛÙ Ù
ÙØ¯Ø§Ø± در ÛÚ© ÙÛØ³Øª Ú©Ù null/undefined ÙØ¨Ø§Ø´Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
ÙØ±Ø¶ Ú©ÙÛÙ
ک٠دادÙâÛ Ú©Ø§Ø±Ø¨Ø±Û Ø±Ø§ در Ù
ØªØºÛØ±ÙØ§Û firstNameØ lastName ÛØ§ nickName Ø°Ø®ÛØ±Ù کردÙâØ§ÛÙ
. اگر کاربر تصÙ
ÛÙ
Ø¨Ù ÙØ§Ø±Ø¯ Ùکرد٠Ù
ÙØ¯Ø§Ø±Û Ú¯Ø±ÙØªÙ Ø¨Ø§Ø´Ø¯Ø Ù
Ù
ک٠است ÙÙ
٠آÙÙØ§ تعرÛÙ Ø´Ø¯Ù ÙØ¨Ø§Ø´Ùد.
Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
اسÙ
کاربر را با Ø§Ø³ØªÙØ§Ø¯Ù از اÛÙ Ù
ØªØºÛØ±Ùا ÙÙ
Ø§ÛØ´ دÙÛÙ
Ø ÛØ§ اگر ÙÙ
٠آÙâÙØ§ null/undefined Ø¨Ø§Ø´ÙØ¯Ø âAnonymousâ Ø±Ø§ ÙÙ
Ø§ÛØ´ دÙÛÙ
.
Ø¨ÛØ§ÛÛØ¯ Ø¨Ø±Ø§Û Ø§Û٠کار از عÙ
Ùگر ?? Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
:
let firstName = null;
let lastName = null;
let nickName = "Supercoder";
// اÙÙÛÙ Ù
ÙØ¯Ø§Ø± تعرÛ٠شد٠را ÙÙ
Ø§ÛØ´ Ù
ÛâØ¯ÙØ¯:
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
Ù ÙØ§Ûس٠با ||
عÙ
Ùگر٠âÛØ§â || Ù
ÛâØªÙØ§Ùد درست Ù
اÙÙØ¯ عÙ
Ùگر ?? Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙØ¯Ø ÙÙ
Ø§ÙØ·Ùر ک٠در بخش ÙØ¨ÙÛ ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯.
Ø¨Ø±Ø§Û Ù
ثا٠Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
عÙ
Ùگر ?? را با عÙ
Ùگر || در کد Ø¨Ø§ÙØ§ جاÛگزÛÙ Ú©ÙÛÙ
Ù ÙÙ
Ø§Ù ÙØªÛج٠را Ø¨Ú¯ÛØ±ÛÙ
:
let firstName = null;
let lastName = null;
let nickName = "Supercoder";
// :را ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯ truthy اÙÙÛÙ Ù
ÙØ¯Ø§Ø±
alert(firstName || lastName || nickName || "Anonymous"); // Supercoder
از ÙØØ§Ø¸ ØªØ§Ø±ÛØ®ÛØ Ø¹Ù
ÙÚ¯Ø±Ù ÛØ§ || از اÙÙ ÙØ¬Ùد داشت. اÛ٠عÙ
Ùگر از اÙÙÛÙ Ø±ÙØ²ÙØ§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÙØ¬Ùد Ø¯Ø§Ø´ØªØ Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ØªÙØ³Ø¹Ù دÙÙØ¯Ú¯Ø§Ù ب٠Ù
دت Ø·ÙÙØ§ÙÛ Ø¨Ø±Ø§Û ÚÙÛÙ Ú©Ø§Ø±ÙØ§ÛÛ Ø§Ø² اÛ٠عÙ
Ùگر Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©Ø±Ø¯ÙØ¯.
از طرÙÛ Ø¯ÛÚ¯Ø±Ø Ø¹Ù
Ùگر nullish coalescing ?? Ø¨Ù ØªØ§Ø²Ú¯Û Ø¨Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت اضاÙ٠شد ٠دÙÛ٠آ٠ÙÙ
اÛÙ Ø¨ÙØ¯ Ú©Ù Ø§ÙØ±Ø§Ø¯ Ø®ÛÙÛ Ø§Ø² || Ø±Ø§Ø¶Û ÙØ¨ÙØ¯ÙØ¯.
Ù ÙÙ âØªØ±ÛÙ ØªÙØ§Ùت بÛ٠آÙÙØ§ Ù ÙØ§Ø±Ø¯ Ø²ÛØ± ÙØ³ØªÙد:
- عÙ
Ùگر
||اÙÙÛÙ Ù ÙØ¯Ø§Ø± truthy را بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯. - عÙ
Ùگر
??اÙÙÛÙ Ù ÙØ¯Ø§Ø± تعرÛ٠شد٠را بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
Ø¨Ù Ø¹Ø¨Ø§Ø±ØªÛ Ø¯ÛÚ¯Ø±Ø Ø¹Ù
Ùگر || ØªÙØ§Ùت بÛÙ falseØ 0Ø ÛÚ© رشت٠خاÙÛ "" Ù null/undefined را ØªØ´Ø®ÛØµ ÙÙ
ÛâØ¯ÙØ¯. Ø¢ÙÙØ§ ÙÙ
Ú¯Û Ø´Ø¨ÛÙ ÛکدÛگر ÙØ³ØªÙد â Ù
ÙØ¯Ø§Ø±ÙØ§Û falsy. اگر ÙØ± کداÙ
از اÛÙÙØ§ اÙÙÛ٠آرگÙÙ
ا٠عÙ
Ùگر || Ø¨Ø§Ø´ÙØ¯Ø Ù
ا آرگÙÙ
ا٠دÙÙ
را ب٠عÙÙØ§Ù ÙØªÛØ¬Ù Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙÛÙ
.
اÙ
ا در عÙ
ÙØ Ù
Ù
ک٠است Ø¨Ø®ÙØ§ÙÛÙ
Ù
ÙØ¯Ø§Ø±Û Ù¾ÛØ´ ÙØ±Ø¶ را ÙÙØ· در ØµÙØ±ØªÛ Ú©Ù Ù
ØªØºÛØ± null/undefined باشد Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. ÛØ¹ÙÛ Ø²Ù
اÙÛ Ú©Ù Ù
ÙØ¯Ø§Ø± ÙØ§Ùعا ÙØ§Ø´ÙØ§Ø®ØªÙ ÛØ§ ØªØ®ØµÛØµ Ø¯Ø§Ø¯Ù ÙØ´Ø¯Ù باشد.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ کد Ø²ÛØ± را در ÙØ¸Ø± Ø¨Ú¯ÛØ±Ûد:
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
- عبارت
height || 100Ù ØªØºÛØ±heightرا Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù Ù ÙØ¯Ø§Ø±Û falsy است ÛØ§ ÙÙ Ø¨Ø±Ø±Ø³Û Ù ÛâÚ©ÙØ¯Ø ک٠در ÙØ§Ùع falsy است.- Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙØªÛجÙâÛ Ø¹Ù
Ùگر
||آرگÙ٠ا٠دÙ٠استØ100.
- Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙØªÛجÙâÛ Ø¹Ù
Ùگر
- عبارت
height ?? 100Ù ØªØºÛØ±heightرا Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ùnull/undefinedاست ÛØ§ ÙÙ Ø¨Ø±Ø±Ø³Û Ù ÛâÚ©ÙØ¯Ø Ú©Ù ÙÛÚکدا٠ÙÛØ³Øª.- Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙØªÛج٠Ù
ØªØºÛØ±
heightâÙÙ Ø§ÙØ·Ùر Ú©Ù ÙØ³Øªâ Ø§Ø³ØªØ ÛØ¹ÙÛ0.
- Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙØªÛج٠Ù
ØªØºÛØ±
در عÙ
ÙØ Ù
ÙØ¯Ø§Ø± ØµÙØ± height Ù
عÙ
ÙÙØ§ ÛÚ© Ù
ÙØ¯Ø§Ø± ÙØ§Ø¨Ù ÙØ¨ÙÙ Ø§Ø³ØªØ Ú©Ù ÙØ¨Ø§Ûد با Ù
ÙØ¯Ø§Ø± Ù¾ÛØ´ ÙØ±Ø¶ جابجا Ø´ÙØ¯. پس عÙ
Ùگر ?? کار درست را اÛÙØ¬Ø§ Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯.
اÙÙÙÛØª
اÙÙÙÛØª عÙ
Ùگر ?? برابر با عÙ
Ùگر || است. اÙÙÙÛØª Ø¢ÙâÙØ§ در جدÙÙ MDN برابر با 3 است.
اÛÙ ÛØ¹ÙÛ Ú©Ù Ø¯Ø±Ø³Øª Ù
اÙÙØ¯ ||Ø Ø¹Ù
Ùگر nullish coalescing ?? ÙØ¨Ù از = Ù ? Ø§Ø±Ø²ÛØ§Ø¨Û Ù
ÛâØ´ÙØ¯Ø اÙ
ا بعد از Ø¨ÛØ´ØªØ± عÙ
ÙÛØ§ØªâÙØ§ Ù
اÙÙØ¯ +Ø - Ø§Ø±Ø²ÛØ§Ø¨Û Ù
ÛâØ´ÙØ¯.
پس Ø´Ø§ÛØ¯ ٠ا ÙÛØ§Ø² داشت٠باشÛ٠ک٠در Ø¹Ø¨Ø§Ø±Ø§ØªÛ Ù Ø§ÙÙØ¯ کد پاÛÛÙ Ù¾Ø±Ø§ÙØªØ² را اضاÙÙ Ú©ÙÛÙ :
let height = null;
let width = null;
// Ù
ÙÙ
: از Ù¾Ø±Ø§ÙØªØ² Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯
let area = (height ?? 100) * (width ?? 50);
alert(area); // 5000
در ØºÛØ± اÛÙ ØµÙØ±ØªØ اگر Ù¾Ø±Ø§ÙØªØ² را ØØ°Ù Ú©ÙÛÙ
Ø ÚÙÙ * اÙÙÙÛØª Ø¨Ø§ÙØ§ØªØ±Û ÙØ³Ø¨Øª ب٠?? دارد پس اÙ٠اجرا Ù
ÛâØ´ÙØ¯ Ù Ø¨Ù ÙØªÛØ¬Ù ÙØ§Ø¯Ø±Ø³ØªÛ Ù
ÙØ¬Ø± Ù
ÛâØ´ÙØ¯.
// بدÙÙ Ù¾Ø±Ø§ÙØªØ²
let area = height ?? 100 * width ?? 50;
// اÛÙÚ¯ÙÙ٠کار Ù
ÛâÚ©ÙØ¯ (Ø§ØØªÙ
Ø§ÙØ§ ÚÛØ²Û Ú©Ù Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
ÙÛØ³Øª)...
let area = height ?? (100 * width) ?? 50;
Ø§Ø³ØªÙØ§Ø¯Ù از ?? Ù٠را٠با || Ù &&
Ø¨Ù Ø¯ÙØ§Û٠اÙ
ÙÛØªÛØ Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø§Ø³ØªÙØ§Ø¯Ù از ?? را ÙÙ
را٠با عÙ
ÙÚ¯Ø±ÙØ§Û && Ù || Ù
ÙØ¹ Ù
ÛâÚ©ÙØ¯Ø Ù
گر اÛÙک٠اÙÙÙÛØª Ø§Ø³ØªÙØ§Ø¯Ù ØµØ±Ø§ØØªØ§ با Ù¾Ø±Ø§ÙØªØ² Ù
شخص شد٠باشد.
کد Ø²ÛØ± ÛÚ© Ø®Ø·Ø§Û Ø³ÛÙØªÚ©Ø³ ب٠٠ا Ø®ÙØ§Ùد داد:
let x = 1 && 2 ?? 3; // Syntax error
اÛÙ Ù
ØØ¯ÙØ¯ÛØª ÙØ·Ø¹Ø§ ÙØ§Ø¨Ù Ø¨ØØ« است ٠با اÛÙ ÙØ¯Ù Ø¨Ù Ø®ØµÙØµÛات زبا٠اضاÙ٠شد Ú©Ù ÙÙØªÛ Ø§ÙØ±Ø§Ø¯ از || ب٠?? رÙÛ Ù
ÛâØ¢ÙØ±ÙØ¯Ø Ø§Ø² Ø§Ø´ØªØ¨Ø§ÙØ§Øª Ø¨Ø±ÙØ§Ù
Ù ÙÙÛØ³Û جÙÙÚ¯ÛØ±Û Ø´ÙØ¯.
از Ù¾Ø±Ø§ÙØªØ² Ø¨Ø±Ø§Û Ø§Û٠کار Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯:
let x = (1 && 2) ?? 3; // Ø¨Ù Ø¯Ø±Ø³ØªÛ Ú©Ø§Ø± Ù
ÛâÚ©ÙØ¯
alert(x); // 2
Ø®ÙØ§ØµÙ
-
ع٠Ùگر nullish coalescing
??Ø±Ø§Ù Ú©ÙØªØ§ÙÛ Ø¨Ø±Ø§Û Ø§ÙØªØ®Ø§Ø¨ اÙÙÛÙ Ù ÙØ¯Ø§Ø± âØªØ¹Ø±Û٠شدÙâ Ø§Ø² ÛÚ© ÙÛØ³Øª را ÙØ±Ø§ÙÙ Ù ÛâÚ©ÙØ¯.از Ø¢Ù Ø¨Ø±Ø§Û ØªØ¹ÛÛÙ Ú©Ø±Ø¯Ù Ù ÙØ¯Ø§Ø± Ù¾ÛØ´âÙØ±Ø¶ Ø¨Ø±Ø§Û Ù ØªØºÛØ±Ùا Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯:
// را ØªÙØ¸ÛÙ Ú©Ù height=100 ØØ¨Ùد undefined ÛØ§ null برابر با height اگر height = height ?? 100; -
ع٠Ùگر
??اÙÙÙÛØª Ø¨Ø³ÛØ§Ø± پاÛÛÙÛ Ø¯Ø§Ø±Ø¯ Ù ÙÙØ· از?Ù=Ø¨Ø§ÙØ§ØªØ± Ø§Ø³ØªØ Ù¾Ø³ ÙÙÚ¯Ø§Ù Ø§Ø³ØªÙØ§Ø¯Ù از آ٠در ÛÚ© عبارت اضاÙÙ Ú©Ø±Ø¯Ù Ù¾Ø±Ø§ÙØªØ² را در ÙØ¸Ø± Ø¨Ú¯ÛØ±Ûد. -
Ø§Ø³ØªÙØ§Ø¯Ù کرد٠از اÛ٠ع٠Ùگر Ù٠را٠با
||ÛØ§&&بدÙÙ Ø§Ø³ØªÙØ§Ø¯Ù کرد٠از Ù¾Ø±Ø§ÙØªØ² Ù Ù ÙÙØ¹ است.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)