Ø²Ø¨Ø§Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ù¾ÛÙØ³ØªÙ در ØØ§Ù تکا٠٠است. Ù¾ÛØ´ÙÙØ§Ø¯ÙاÛÛ Ø¨Ø±Ø§Û Ø¨ÙØªØ± شد٠آ٠بÙâØ·ÙØ± Ù ÙØ¸Ù ØµÙØ±Øª Ù ÛâÚ¯ÛØ±Ø¯Ø اÛÙ Ù¾ÛØ´ÙÙØ§Ø¯âÙØ§ Ø¨Ø±Ø±Ø³Û Ù ÛâØ´ÙÙØ¯ ٠اگر Ø§Ø±Ø²Ø´Ù ÙØ¯ Ø¨Ø§Ø´ÙØ¯Ø ب٠ÙÛØ³Øª https://tc39.github.io/ecma262/ اضاÙÙ Ù ÛâØ´ÙÙØ¯ ٠سپس Ø¨Ø±Ø§Û Ù Ø´Ø®ØµØ§Øª زبا٠(specification) Ù¾ÛØ´ Ù ÛâØ±ÙÙØ¯.
تÛÙ âÙØ§Û ٠سئÙÙ Ù ÙØªÙØ±ÙØ§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت تص٠ÛÙ Ù ÛâÚ¯ÛØ±Ùد کدا٠ÛÚ© را اÙÙ Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©ÙÙØ¯. ٠٠ک٠است تص٠ÛÙ Ø¨Ú¯ÛØ±Ùد Ù¾ÛØ´ÙÙØ§Ø¯ÙاÛÛ Ú©Ù ÙÙÙØ² بÙâØµÙØ±Øª Ù¾ÛØ´âÙÙÛØ³ ÙØ³ØªÙد را اÙÙ Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©ÙÙØ¯ Ù Ù¾ÛØ´ÙÙØ§Ø¯ÙاÛÛ Ú©Ù Ø¯Ø± ٠رØÙÙÙ ØªØ´Ø®ÛØµ ÙØ³ØªÙد را ب٠بعدتر Ù ÙÚ©ÙÙ Ú©ÙÙØ¯Ø ب٠دÙÛ٠اÛÙک٠ک٠تر Ø¬Ø§ÙØ¨ ÙØ³ØªÙد Ù ÛØ§ ÙÙØ· Ø³Ø®ØªâØªØ± ÙØ³ØªÙد.
پس Ú©Ø§Ù ÙØ§ Ø·Ø¨ÛØ¹Û است Ú©Ù ÛÚ© Ù ÙØªÙر ÙÙØ· Ø¨Ø®Ø´Û Ø§Ø² ÛÚ© Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ را Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©ÙØ¯.
ÛÚ© ØµÙØÙâÛ Ø®ÙØ¨ Ø¨Ø±Ø§Û Ø§Û٠ک٠ببÛÙÛØ¯ در ØØ§Ù ØØ§Ø¶Ø± ÚÙ ÚÛØ²ÙاÛÛ Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ù ÛâØ´ÙØ¯ اÛÙØ¬Ø§Ø³Øª https://compat-table.github.io/compat-table/es6/ (Ø®ÛÙÛ Ø¨Ø²Ø±Ú¯ Ø§Ø³ØªØ Ù Ø§ ÚÛØ²ÙØ§Û Ø²ÛØ§Ø¯Û Ø¨Ø±Ø§Û Ù Ø·Ø§ÙØ¹Ù دارÛÙ ).
ب٠عÙÙØ§Ù ØªÙØ³Ø¹ÙâØ¯ÙÙØ¯ÙØ Ù Ø§ ÙÙ ÛØ´Ù Ø¯ÙØ³Øª دارÛ٠از ÙÛÚÚ¯ÛâÙØ§ Ù Ø§Ù Ú©Ø§ÙØ§Øª Ø¬Ø¯ÛØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ . ÙØ± ÚÙ Ø¬Ø¯ÛØ¯ØªØ±Ø Ø¨ÙØªØ±!
از طر٠دÛÚ¯Ø±Ø Ø¯ÙØ³Øª دارÛÙ Ú©Ø¯ÙØ§Û٠ا٠رÙÛ Ù Ø±ÙØ±Ú¯Ø±ÙØ§Û ÙØ¯ÛÙ ÛâØªØ± Ú©Ù Ø§Ù Ú©Ø§ÙØ§Øª Ø¬Ø¯ÛØ¯ را ÙÙ ÛâÙÙÙ ÙØ¯ Ù٠کار Ú©ÙÙØ¯. ا٠ا ÚØ·Ùر Ù ÛâØ´ÙØ¯ اÛ٠کار را Ø§ÙØ¬Ø§Ù دادØ
د٠ابزار Ø¨Ø±Ø§Û Ø§Û٠کار ÙØ¬Ùد دارد:
- ØªØ±ÙØ³Ù¾Ø§ÛÙØ±Ùا (Transpilers).
- Ù¾ÙÛÙÛÙâÙØ§ (Polyfills).
ÙØ¯Ù ٠ا در اÛÙ ÙØµÙ اÛ٠است ک٠درک Ú©ÙÛ٠اÛ٠د٠ÚÚ¯ÙÙ٠کار Ù ÛâÚ©ÙÙØ¯ ٠جاÛگا٠آÙâÙØ§ در ØªÙØ³Ø¹Ù ÙØ¨ ÚÛØ³Øª.
ØªØ±ÙØ³Ù¾Ø§ÛÙØ±Ùا
ÛÚ© ØªØ±ÙØ³Ù¾Ø§ÛÙØ± در ÙØ§Ùع ÙØ·Ø¹ÙâØ§Û ÙØ±Ù âØ§ÙØ²Ø§Ø± است Ú©Ù Ù ÛâØªÙØ§Ùد کد Ù Ø¯Ø±Ù Ù Ø¬Ø¯ÛØ¯ را parse Ú©ÙØ¯ (âØ¨Ø®ÙØ§Ùد ٠بÙÙ٠دâ) ٠سپس Ù٠ا٠کد را با syntax ÙØ¯ÛÙ Û Ø¨Ø§Ø²ÙÙÛØ³Û Ú©ÙØ¯ بÙâØ·ÙØ±Û Ú©Ù Ø®Ø±ÙØ¬Û کد Ûکسا٠باشد.
Ø¨Ø±Ø§Û Ù
Ø«Ø§Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت تا سا٠۲۰۲۰ ânullish coalescing عÙ
Ùگرâ ?? را ÙØ¯Ø§Ø´Øª. ٠اگر Ú©Ø§Ø±Ø¨Ø±Û Ø§Ø² ÛÚ© Ù
Ø±ÙØ±Ú¯Ø± Ù
ÙØ³ÙØ®âØ´Ø¯Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙØ¯Ø Ù
Ù
ک٠است Ú©Ø¯Û Ù
اÙÙØ¯ height = height ?? 100 را Ù
ØªÙØ¬Ù ÙØ´Ùد.
ÛÚ© ØªØ±ÙØ³Ù¾Ø§ÛÙØ± اÛ٠کد را Ø¢ÙØ§ÙÛØ² Ù
ÛâÚ©ÙØ¯ Ù height ?? 100 را بÙâØµÙØ±Øª (height !== undefined && height !== null) ? height : 100 بازÙÙÛØ³Û Ù
ÛâÚ©ÙØ¯.
// ÙØ¨Ù از اجرا Ø´Ø¯Ù ØªØ±ÙØ³Ù¾Ø§ÛÙØ±
height = height ?? 100;
// بعد از اجرا Ø´Ø¯Ù ØªØ±ÙØ³Ù¾Ø§ÛÙØ±
height = height !== undefined && height !== null ? height : 100;
کد بازÙÙÛØ³Û Ø´Ø¯Ù Ù ÙØ§Ø³Ø¨ Ù ÙØªÙØ±ÙØ§Û ÙØ¯ÛÙ ÛâØªØ± Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت است.
٠ع٠ÙÙØ§ ØªÙØ³Ø¹ÙâØ¯ÙÙØ¯Ù ØªØ±ÙØ³Ù¾Ø§ÛÙØ± را رÙÛ Ú©Ø§Ù Ù¾ÛÙØªØ± Ø®ÙØ¯Ø´ اجرا Ù ÛâÚ©ÙØ¯ ٠سپس کد transpileشد٠را رÙÛ Ø³Ø±ÙØ± deploy Ù ÛâÚ©ÙØ¯.
ØØ§Ùا Ú©Ù ØµØØ¨ØªØ´ Ø´Ø¯Ø Ø¨ÙØªØ± است بداÙÛØ¯ Babel ÛÚ©Û Ø§Ø² برجستÙâØªØ±ÛÙ ØªØ±ÙØ³Ù¾Ø§ÛÙØ±Ùا است.
Ø³ÛØ³ØªÙ âÙØ§Û build پرÙÚ٠٠در٠٠ث٠webpack اÛ٠ا٠کا٠را Ù ÛâØ¯ÙÙØ¯ ک٠بعد از ÙØ± بار تغÛÛØ± Ú©Ø¯Ø ØªØ±ÙØ³Ù¾Ø§ÛÙØ± بÙâØµÙØ±Øª اتÙ٠اتÛÚ© اجرا Ø´ÙØ¯ Ù Ø¨Ø±Ø§Û ÙÙ Û٠ادغا٠کرد٠آ٠در رÙÙØ¯ ØªÙØ³Ø¹Ù کار Ø¨Ø³ÛØ§Ø± سادÙâØ§Û Ø§Ø³Øª.
Ù¾ÙÛÙÛÙâÙØ§
ÙÛÚØ±âÙØ§ Ù Ø§Ù Ú©Ø§ÙØ§Øª Ø¬Ø¯ÛØ¯ ÛÚ© زبا٠٠ÛâØªÙØ§ÙÙØ¯ Ø¹ÙØ§Ù٠بر syntax ٠ع٠ÙÚ¯Ø±ÙØ§Û Ø¬Ø¯ÛØ¯Ø تابعâÙØ§Û Ø¬Ø¯ÛØ¯ ÙÛØ² Ø¨Ø§Ø´ÙØ¯.
Ø¨Ø±Ø§Û Ù
ثا٠Math.trunc(n) ÛÚ© تابع است ک٠بخش Ø¯ÙØ¯ÙÛ ÛÚ© عدد را ØØ°Ù Ù
ÛâÚ©ÙØ¯. Ù
اÙÙØ¯ Math.trunc(1.23) Ú©Ù 1 را بر Ù
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
در Ø¨Ø±Ø®Û Ø§Ø² Ù
ÙØªÙØ±ÙØ§Û (Ø®ÛÙÛ ÙØ¯ÛÙ
Û) Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت تابع Math.trunc ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯ Ù ÚÙÛÙ Ú©Ø¯Û Ø§Ø¬Ø±Ø§ ÙÙ
ÛâØ´ÙØ¯.
از Ø¢ÙâØ¬Ø§ÛÛ Ú©Ù Ø¯Ø§Ø±ÛÙ Ø±Ø§Ø¬Ø¹âØ¨Ù ØªØ§Ø¨Ø¹âÙØ§Û Ø¬Ø¯ÛØ¯ ØµØØ¨Øª Ù ÛâÚ©ÙÛÙ Ù Ø¨ØØ« تغÛÛØ± syntax ÙÛØ³ØªØ اÛÙØ¬Ø§ ÚÛØ²Û Ø¨Ø±Ø§Û transpile ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯. ÙÙØ· Ø¨Ø§ÛØ¯ تابع ÙØ§Ù ÙØ¬Ùد را تعرÛÙ Ú©ÙÛÙ .
اسکرÛÙ¾ØªÛ Ú©Ù ØªØ§Ø¨Ø¹âÙØ§Û Ø¬Ø¯ÛØ¯ Ø¢Ù¾Ø¯ÛØª Ù ÛØ§ اضاÙÙ Ù ÛâÚ©ÙØ¯Ø «پÙÛÙÛÙ» ÙØ§Ù دارد. در ÙØ§Ùع Ø¬Ø§Û Ø®Ø§ÙÛ Ø±Ø§ پر Ù ÛâÚ©ÙØ¯ Ù Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²ÛâÙØ§Û ÙØ§Ø²Ù را Ø§ÙØ¬Ø§Ù Ù ÛâØ¯ÙØ¯.
در اÛÙ Ù
Ø«Ø§Ù Ø®Ø§ØµØ Ù¾ÙÛÙÛÙÛ Ú©Ù Ø¨Ø±Ø§Û Math.trunc ÙØ¬Ùد دارد ÛÚ© اسکرÛپت است ک٠آ٠را Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©Ø±Ø¯Ù Ø§Ø³Øª. Ù
اÙÙØ¯ Ø²ÛØ±:
if (!Math.trunc) { // اگر ÚÙÛÙ ØªØ§Ø¨Ø¹Û ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯
// آ٠زا Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©Ù
Math.trunc = function (number) {
// Math.ceil Ù Math.floor Ø¬ØªÛ Ø¯Ø± Ù
ÙØªÙØ±ÙØ§Û ÙØ¯ÛÙ
Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÙÙ
ØØ¶Ùر Ø¯Ø§Ø±ÙØ¯
// ٠در ÙÙ
ÛÙ tutorial جÙÙØªØ± Ø¢Ù
ÙØ²Ø´ داد٠Ù
ÛâØ´ÙÙØ¯
return number < 0 ? Math.ceil(number) : Math.floor(number);
};
}
Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÛÚ© زبا٠بÙâØ´Ø¯Øª داÛÙØ§Ù ÛÚ© است. اسکرÛپتâÙØ§ Ù ÛâØªÙØ§ÙÙØ¯ ÙØ± ØªØ§Ø¨Ø¹Û Ø±Ø§ تغÛÛØ± دÙÙØ¯ ÛØ§ اضاÙÙ Ú©ÙÙØ¯. ØØªÛ تابعâÙØ§Û built-in.
د٠کتابخاÙÙ Ø¬Ø§ÙØ¨ Ù¾ÙÛÙÛÙâÙØ§:
- core js ک٠از ÚÛØ²ÙØ§Û Ø²ÛØ§Ø¯Û Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ù ÛâÚ©ÙØ¯ ٠اجاز٠٠ÛâØ¯ÙØ¯ ÙÙØ· ÙÛÚØ±ÙØ§Û Ù ÙØ±Ø¯ ÙÛØ§Ø² Ø®ÙØ¯ را اضاÙÙ Ú©ÙÛØ¯.
- polyfill.io سرÙÛØ³Û Ú©Ù ÛÚ© اسکرÛپت با Ù¾ÙÛÙÛÙâÙØ§ ارائ٠٠ÛâØ¯ÙØ¯. بست٠ب٠ÙÛÚØ±Ùا Ù Ù Ø±ÙØ±Ú¯Ø± کاربر.
Ø®ÙØ§ØµÙ
در اÛÙ ÙØµÙ ٠ا Ù ÛâØ®ÙØ§ÙÛ٠ب٠ش٠ا اÙÚ¯ÛØ²Ù بدÙÛ٠تا برÙÛØ¯ Ù ÙÛÚØ±ÙØ§Û Ø¬Ø¯ÛØ¯ زبا٠را ÛØ§Ø¯ Ø¨Ú¯ÛØ±Ûد. ØØªÛ اگر ÙÙÙØ² ØªÙØ³Ø· Ù ÙØªÙØ±ÙØ§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت بÙâØ®ÙØ¨Û Ù¾Ø´ØªÛØ¨Ø§ÙÛ ÙÙ ÛâØ´ÙÙØ¯.
ÙØ±Ø§Ù ÙØ´ ÙÚ©ÙÛØ¯ ک٠از ÛÚ© ØªØ±ÙØ³Ù¾Ø§ÛÙØ± (اگر از syntax ÛØ§ ع٠ÙÚ¯Ø±ÙØ§Û Ù Ø¯Ø±Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÛØ¯) Ù Ù¾ÙÛÙÛÙâÙØ§ (Ø¨Ø±Ø§Û Ø§Ø¶Ø§Ù٠کرد٠تابعâÙØ§ÛÛ Ú©Ù Ù Ù Ú©Ù Ø§Ø³Øª Ù ÙØ¬Ùد ÙØ¨Ø§Ø´Ùد) Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. ٠با اÛ٠کار Ù Ø·Ù Ø¦Ù Ø®ÙØ§ÙÛØ¯ Ø¨ÙØ¯ ک٠کد ش٠ا کار Ù ÛâÚ©ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ Ø¨Ø¹Ø¯ÙØ§ ک٠با Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø¢Ø´ÙØ§ÛÛ Ø¨ÛØ´ØªØ±Û Ù¾ÛØ¯Ø§ Ú©ÙÛØ¯Ø Ù ÛâØªÙØ§ÙÛØ¯ ÛÚ© Ø³ÛØ³ØªÙ build کد با webpack Ù Ù¾ÙØ§Ú¯ÛÙ babel-loader راÙâØ§ÙØ¯Ø§Ø²Û Ú©ÙÛØ¯.
Ù ÙØ§Ø¨Ø¹ Ø®ÙØ¨Û Ú©Ù ÙØ´Ø§Ù Ù ÛâØ¯ÙÙØ¯ ÙÛÚØ±ÙØ§Û Ù Ø®ØªÙ٠در ÚÙ ØØ§ÙØªÛ Ø§Ø² Ù¾Ø´ØªÛØ¨Ø§ÙÛ ÙØ±Ø§Ø± Ø¯Ø§Ø±ÙØ¯:
- https://compat-table.github.io/compat-table/es6/ â Ø¨Ø±Ø§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت.
- https://caniuse.com/ â Ø¨Ø±Ø§Û تابعâÙØ§Û Ù Ø±Ø¨ÙØ· Ø¨Ù Ù Ø±ÙØ±Ú¯Ø±.
پاÙÙØ´Øª Ú¯Ùگ٠کرÙ٠٠ع٠ÙÙØ§ ÙØ³Ø¨Øª ب٠ÙÛÚØ±ÙØ§Û Ø²Ø¨Ø§Ù Ø¨ÙâØ±ÙØ²ØªØ±Û٠است. اگر د٠ÙÛ ÛÚ© Ø¢Ù ÙØ²Ø´ کار ÙÚ©Ø±Ø¯Ø Ø¢Ù Ø±Ø§ Ø§Ù ØªØØ§Ù Ú©ÙÛØ¯. Ø§ÙØ¨ØªÙ Ø¨ÛØ´ØªØ± د٠ÙÙØ§Û Ø¢Ù ÙØ²Ø´ با ÙØ± Ù Ø±ÙØ±Ú¯Ø± ٠درÙÛ Ú©Ø§Ø± Ù ÛâÚ©ÙÙØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)