نسخه های استاندارد جاوااسکریپت
اکما اسکریپت یک استاندارد برای زبان جاوااسکریپت است که توسط اکما اینترنشنال توسعه یافته است. از سال ۲۰۱۵ به این سو نسخه های اصلی در ماه های ژوئن منتشر می شوند. اکما اسکریپت ۲۰۲۲، که آخرین نسخه است، در ژوئن ۲۰۲۲ منتشر شد.

نسخه‌ها
-------

تا به حال ۹ نسخه از ECMA-262 منتشر شده‌است. کار بر روی نسخه ۹ استاندارد در ماه ژوئن ۲۰۱۸ نهایی شد.

| نسخه | تاریخ انتشار | نام | تغییرات از نسخه قبلی | ویرایشگر |
| --- | --- | --- | --- | --- |
| ۱ | ژوئن ۱۹۹۷ |  | نسخه اول | گای لستلی جونیور |
| ۲ | ژوئن ۱۹۹۸ |  | تغییرات سینتکس برای حفظ مشخصات به‌طور کامل با استاندارد بین‌المللی ISO / IEC 16262 هماهنگ شده‌است. | مایک کولیشاو |
| ۳ | دسامبر ۱۹۹۹ |  | عبارت باقاعده اضافه شده، مدیریت کردن بهتر رشته‌ها، بیانیه‌های جدید برای کنترل، هندل کردن استثناها به وسیلهٔ try/catch
، تعریف دقیق تر از خطاها، قالب بندی برای خروجی عددی و سایر امکانات ها | مایک کولیشاو |
| ۴ | *رها شده* |  | به دلیل اختلافات سیاسی در مورد پیچیدگی زبان، نسخه چهارم رها شد.بسیاری از ویژگی‌های ارائه شده برای نسخه چهارم به صورت کامل حذف شدند و برخی از آنها در نسخه ششم قرار گرفتند. |  |
| ۵ | دسامبر ۲۰۰۹ |  | مود "strict" اضافه می‌شود، یک زیرمجموعه به منظور بررسی دقیق تر خطا و اجتناب از ساختارهای احتمالی خطا ارائه می‌شود.ابهامات زیادی را در مشخصات نسخه ۳ روشن می‌سازد و رفتارهای پیاده‌سازی شده دنیای واقعی را که از مشخصات آن متفاوت است فراهم می‌کند.ویژگی‌های جدیدی از قبیل دریافت کننده‌ها و تنظیم کننده‌ها، پشتیبانی از کتابخانه JSON و انعکاسکامل تر در مورد خواص شیءها اضافه می‌شود. | Pratap Lakshman , Allen Wirfs-Brock |
| ۵٫۱ | ژوئن ۲۰۱۱ |  | این ویرایش ۵٫۱ استاندارد اکما اسکریپت به‌طور کامل با نسخه سوم استاندارد بین‌المللی ISO / IEC 16262: 2011 سازگار است. | Pratap Lakshman, Allen Wirfs-Brock |
| ۶ | ژوئن ۲۰۱۵ | اکما اسکریپت ۲۰۱۵ (ES2015) | نسخه ۶ - اکما اسکریپت ۲۰۱۵ را ببینید | آلن ویرفس بروک |
| ۷ | ژوئن ۲۰۱۶ | اکما اسکریپت ۲۰۱۶ (ES2016) | نسخه ۷ - اکما اسکریپت ۲۰۱۶ را ببینید | براون ترلسون |
| ۸ | ژوئن ۲۰۱۷ | اکما اسکریپت ۲۰۱۷ (ES2017) | نسخه ۸ - اکما اسکریپت ۲۰۱۷ را ببینید | براون ترلسون |
| ۹ | ژوئن ۲۰۱۸ | اکما اسکریپت ۲۰۱۸ (ES2018) | نسخه ۹ - اکما اسکریپت ۲۰۱۸ را ببینید | براون ترلسون |
| ۱۰ | ژوئن ۲۰۱۹ | اکما اسکریپت ۲۰۱۹ (ES2019) | نسخه ۱۰ - اکما اسکریپت ۲۰۱۹ را ببینید | براون ترلسون، بردلی فاریاس، جردن هاربند |
| ۱۱ | ژوئن ۲۰۲۰ | اکما اسکریپت ۲۰۲۰ (ES2020) | نسخه ۱۱ - اکما اسکریپت ۲۰۲۰ را ببینید | جردن هاربند، کوین اسمیت |
| ۱۲ | ژوئن ۲۰۲۱ | اکما اسکریپت ۲۰۲۱ (ES2021) | نسخه ۱۲ - اکما اسکریپت ۲۰۲۱ را ببینید | جردن هاربند، شویو گو، مایکل فاکارا، کوین اسمیت |
| ۱۳ | ژوئن ۲۰۲۲ | اکما اسکریپت ۲۰۲۲ (ES2022) | نسخه ۱۳ - اکما اسکریپت ۲۰۲۲ را ببینید | شویو گو، مایکل فاکارا، کوین اسمیت |

در ژوئن 2004 Ecma International استاندارد ECMA-357 را منتشر کرد، که در آن یک اکستنشن برای اکما اسکریپت، به نام اکما اسکریپت برای XML (یا E4X) تعریف شده‌است. اکما همچنین یک "Compact Profile" را برای اکما اسکریپت تعریف کرد (شناخته شده به عنوان ESCP یا ECMA 327) که برای دیوایس‌هایی با محدودیت توانایی و امکانات طراحی شده بود، که در سال ۲۰۱۵ حذف شد.

### نسخه ۴ (رها شده)

چهارمین نسخه ECMA-262 (**یا 4 اکما اسکریپت یا ES4**) اولین نسخه بزرگ اکما اسکریپت از زمان انتشار سوم آن در سال ۱۹۹۹ بود. مشخصات (همراه با اجرای مرجع) برای کامل کردن آن تا اکتبر ۲۰۰۸ مورد هدف قرار گرفت. خلاصه ای از این زبان توسط گروهی که برروی آن کار می‌کردند در ۲۳ اکتبر ۲۰۰۷ منتشر شد.

تا اوت ۲۰۰۸، طرح پیشنهادی اکما اسکریپت 4 به یک پروژه با نام اکما اسکریپت Harmony ویرایش یافت. ویژگی‌های مورد بحث برای اکما اسکریپت Harmony در آن زمان شامل موارد زیر بودند:

* کلاس‌ها
* یک سیستم ماژول
* حاشیه نویسی نوع اختیاری و تایپ استاتیک، احتمالاً با استفاده از یک سیستم نوع ساختاری
* ژنراتورها و تکرار کننده‌ها
* تخصیص مخرب و
* انواع داده جبری.

هدف این ویژگی‌ها تا حدی برای حمایت بهتر از *برنامه‌نویسی در ابعاد بزرگ* و پویایی بعضی از توانایی‌های اسکریپت برای بهبود عملکرد بود. به عنوان مثال، تامارین (ماشین مجازی برای اکشن اسکریپت، توسعه داده شده و متن باز شده توسط ادوب) قابلیت پشتیبانی فقط در زمان تدوین (JIT) را برای کلاس‌های خاصی از اسکریپت داشت.

علاوه بر معرفی ویژگی‌های جدید، پیشنهاد اصلاح کردن بعضی از اشکالات و باگ‌های ES3 در نسخه ۴ داده شد. اینها و دیگر اصلاحات و پشتیبانی از رمزگذاری/رمزگشایی JSON، به اکما اسکریپت، در مشخصات نسخه ۵ اضافه شد.

پس از آن که مشخصات ES-CP (مشخصات جامع) تکمیل شد کار بر روی نسخه ۴ آغاز گردید و در حدود ۱۸ ماه ادامه یافت که آن پیشرفت‌های آهسته موجب همزمان شدن تئوری جاوا اسکریت ۲ نت اسکیپ با تجربه پیاده‌سازی جی اسکریپت دات نت مایکروسافت شد. پس از مدتی تمرکز کار به سمت استاندارد اکما اسکریپت برای XML (یا E4X) منتقل شد.

این تغییر بدون ایجاد اختلاف نبود. در اواخر سال ۲۰۰۷، یک بحث بین آیک، که بعداً به عنوان CTO بنیاد موزیلا انتخاب شد، و کریس ویلسون، معمار پلتفرم مایکروسافت برای اینترنت اکسپلورر، در تعدادی از وبلاگ‌ها پخش شد.

ویلسون اخطار داد که به دلیل تغییرات پیشنهادی اکما اسکریپت، این زبان در بعضی موارد با نسخه‌های قبلی موجب ناسازگاری خواهد شد، این به روز رسانی منجر به «شکستن وب» و سهامدارانی که با تغییرات مخالفت می‌کنند، «از دیدگاه مخفی» خواهند شد.

آیک با بیان اینکه ویلسون "موارد جعلی را در وبلاگ "تکرار می‌کند، پاسخ خود را آغاز کرد و با این که تلاشی برای سرکوب مخالفان و به چالش کشیدن منتقدان با ارائهٔ نمونه‌هایی خاص از ناسازگاری وجود داشته‌است، مخالفت کرد.

وی اشاره کرد که مایکروسافت سیلورلایت و ادوبی ایر به ترتیب بر روی C # و ActionScript 3 تکیه می‌کنند، که هر دو بزرگتر و پیچیده‌تر از نسخه سوم اکما اسکریپت هستند.

### نسخه ۵

یاهو، مایکروسافت، گوگل و دیگر مخالفان نسخه چهارم، کمیته فرعی را برای طراحی یک به روز رسانی کمتر جاه طلبانهٔ اکما اسکریپت ۳ تشکیل دادند که به‌طور آزمایشی اکما اسکریپت 3.1 نامگذاری شد. این نسخه بر روی امنیت و به روز رسانی کتابخانه‌ها تمرکز دارد و تأکید زیادی نیز بر سازگاری دارد.

پس اتفاق ذکر شده و بحث و اختلاف عموم، تیم اکما اسکریپت 3.1 و اکما اسکریپت 4 با سازش موافقت کردند:

"دو نسخه به طور موازی با هماهنگی بین تیم‌ها کار خواهند کرد تا اطمینان حاصل شود که اکما اسکریپت 3.1 همچنان یک زیرمجموعه اصلی از اکما اسکریپت 4 در مفهوم و سینتکس زبان، خواهد ماند. "

با این حال، فلسفه‌های مختلف در هر تیم منجر به شکست‌های مکرر در قانون زیرمجموعه شدن نسخه‌های قدیمی در نسخه‌های جدیدتر شد، و شکی ایجاد کرد که آیا مخالفان اکما اسکریپت ۴ در آینده از این نسخه حمایت خواهند کرد و آن را ارائه خواهند داد یا نه.

پس از گذشت بیش از یک سال از اختلاف نظر در مورد آینده اکما اسکریپت در کمیته ۳۹ فنی اکما، این دو تیم در ماه ژوئیه ۲۰۰۸ به توافق جدید دست یافتند: برندان آیک اعلام کرد که اکما TC39 بر روی پروژه اکما اسکریپت ۳٫۱ (که بعدها به اکما اسکریپت نسخه ۵ تغییر یافت) با همکاری کامل تمام گروه‌ها و فروشندگان که حداقل دو پیاده‌سازی متقابل را تا اوایل سال ۲۰۰۹ هدف قرار می‌دهند با تمرکز کار خواهند کرد.

در آوریل ۲۰۰۹، اکما TC39 طرح «نهایی» نسخه پنجم را منتشر کرد و اعلام کرد که تست‌های پیاده‌سازی‌های متقابل از این خبر می‌دهند که تا اواسط ماه ژوئیه کامل خواهند شد.

در ۳ دسامبر ۲۰۰۹، نسخه پنجم، اکما-۲۶۲ منتشر شد.

### نسخه ۶ - اکما اسکریپت ۲۰۱۵

نسخه ششم، که ابتدا اکما اسکریپت ۶ (**ES6**) شناخته شد و بعداً به اکما اسکریپت ۲۰۱۵ تغییر نام یافت، در ژوئن ۲۰۱۵ نهایی شد. این به روز رسانی دستورالعمل‌های جدیدی را برای نوشتن برنامه‌های پیچیده اضافه می‌کند، از جمله تعریف کلاس‌ها (`class Foo { }`) و ماژول‌های ES6 مانند `import \* as moduleName from "..."; export const Foo`، اما آنها را به صورت معنایی در شرایطی همانند حالت سختگیر اکما اسکریپت 5 تعریف می‌کند.

دیگر ویژگی‌های جدید شامل تکرارکننده‌ها و حلقه‌های `for`/`of`، ایجاد کننده سبک پایتونی، اصطلاح تابع فلش چاق ("fat" arrow functions (`=>`)) `() => {...}`، کلمه کلیدی`let` برای متغییرهای محلی، کلمه کلیدی `const` برای متغییرهای ثابت، داده‌های باینری، آرایه‌های تایپ شده، مجموعه‌های جدید (مپ‌ها، مجموعه‌ها و ویک مپ)، پرامیس‌ها (promises) 

```
var promise1 = new Promise(function(resolve, reject) {
 setTimeout(function() {
 resolve('foo');
 }, 300);
});
promise1.then(function(value) {
 console.log(value);
 // expected output: "foo"
});
console.log(promise1);
// expected output: [object Promise]

// output :
//> [object Promise]
//> "foo"

```
 ، تکمیل امکانات اعداد و ریاضیات، انعکاس، پروکسی‌ها و رشته‌های تمپلت 

```
var bar = 1;
var tStr = `foo ${bar}`;
// tStr : "foo 1"

```
 می‌باشد.

به عنوان اولین مشخصه "هارمونی اکما اسکریپت"، آن را به عنوان "هارمونی ES6 "نیز می‌شناسند.

### نسخه ۷ - اکما اسکریپت ۲۰۱۶

نسخه هفتم، که به‌طور رسمی اکما اسکریپت ۷ شناخته می‌شود، در ژوئن ۲۰۱۶ نهایی شد.

ویژگی‌های استاندارد اصلی عبارتند از بلوک دامنه برای متغیرها و توابع، الگوهای تخریب (برای متغیرها)، صدا زدن توابع دنباله وار، اپراتور توانی `**` برای اعداد، کلمات کلیدی`await` و`async` برای برنامه‌نویسی به صورت غیر همزمان.

### نسخه ۸ - اکما اسکریپت ۲۰۱۷

نسخه هشتم، که به‌طور رسمی اکما اسکریپت ۲۰۱۷ شناخته می‌شود، در ژوئن ۲۰۱۷ نهایی شد. شامل ساختارهای `async/await` که با استفاده از تولیدکننده‌ها و پرامیس‌ها کار می‌کنند، می‌باشد. اکما اسکریپت ۲۰۱۷ (ES2017)، نسخه هشتم، شامل ویژگی‌هایی برای همزمان سازی و برگردانندگی (صدا زدن توابع (call back))، ادغام سینتکس با پرامیس‌ها (async / waiting) می‌باشد.

### نسخه ۹ - اکما اسکریپت ۲۰۱۸

نسخه ۹، که به‌طور رسمی اکما اسکریپت ۲۰۱۸ شناخته می‌شود، در ژوئن ۲۰۱۸ نهایی شد.

ویژگی‌های جدید شامل اپراتور rest/spread برای متغیرها (علامت سه نقطه: `**foo...**`)، تکرار غیر همزمان، متد نهایی (`finally`) برای پرامیس‌ها و اضافه کردن امکانات جدید به RegExp می‌باشد.

### نسخه ۱۰ - اکما اسکریپت ۲۰۱۹

نسخه ۱۰، که به‌طور رسمی اکما اسکریپت ۲۰۱۹ شناخته می‌شود، در ژوئن ۲۰۱۹ نهایی شد.

### نسخه ۱۱ - اکما اسکریپت ۲۰۲۰

نسخه ۱۱، که به‌طور رسمی اکما اسکریپت ۲۰۲۰ شناخته می‌شود، در ژوئن ۲۰۲۰نهایی شد.

### نسخه ۱۲ - اکما اسکریپت ۲۰۲۱

نسخه ۱۲، که به‌طور رسمی اکما اسکریپت ۲۰۲۱ شناخته می‌شود، در ژوئن ۲۰۲۱ منتشر شد. این نسخه متد replaceAll را برای رشته ها معرفی می کند.

### نسخه ۱۳ - اکما اسکریپت ۲۰۲۲

نسخه ۱۳، که به‌طور رسمی اکما اسکریپت ۲۰۲۲ شناخته می‌شود، در ژوئن ۲۰۲۲ منتشر شد. این نسخه await سطح بالا را معرفی می‌کند و اجازه می‌دهد کلمه کلیدی در سطح بالای ماژول‌ها استفاده شود.

### ES.Next

ای اس دات نکست نام پویایی است که به هر آنچه که نسخه بعدی در زمان نوشتن است، اشاره دارد. (در واقع امکانات نسخه‌های بعدی اکما اسکریپت)

ویژگی‌های ای اس دات نکست به‌طور صحیح *پیشنهاد نامیده می‌شوند*، زیرا، با این تعریف، مشخصات و امکانات آن هنوز مشخص و نهایی نشده‌است.

منابع
-----

1. 1 2 3 4  "ECMAScript 2018 Language Specification". Ecma International. June 2018.
2. ↑  "Changes to JavaScript, Part 1: EcmaScript 5". YouTube. 2009-05-18. Retrieved 2013-10-31.
3. 1 2  "ECMAScript 2015 Language Specification". Ecma International. June 2015.
4. 1 2 3  "ECMAScript 2016 Language Specification". Ecma International. June 2016.
5. 1 2 3  "ECMAScript 2017 Language Specification". Ecma International. June 2017.
6. 1 2  Ecma International (June 2019). "ECMAScript 2019 Language Specification".  (به eb). `{{cite web}}`: External link in ``|وبگاه=`` (help)نگهداری یادکرد:زبان ناشناخته (link)
7. 1 2  Ecma International (June 2020). "ECMAScript 2020 Language Specification".  (به انگلیسی). `{{cite web}}`: External link in ``|وبگاه=`` (help)
8. 1 2  "ECMAScript 2021 Language Specification". Ecma International. June 2021. Archived from the original on 2021-06-24. Retrieved 2021-06-26.
9. 1 2  "Ecma-262".
10. ↑  2015-03-24 Meeting Notes. ESDiscuss. Also see Ecma withdrawn Standards. ECMA.
11. ↑  "ES4 overview paper released". Mail.mozilla.org. Retrieved 2013-10-31.
12. ↑  "Proposed ECMAScript 4th Edition – Language Overview" (PDF). *ecmascript.org*. 23 October 2007. Archived from the original (PDF) on 13 July 2010.
13. ↑  John Resig. "John Resig – Bug Fixes in JavaScript 2". Ejohn.org. Retrieved 2013-10-31.
14. ↑  "Compatibility Between ES3 and Proposed ES4" (PDF). Ecmascript.org. Archived from the original (PDF) on 24 July 2014. Retrieved 2013-10-31.
15. ↑  "Wayback Machine" (PDF). 2009-04-19. Archived from the original on 19 April 2009. Retrieved 2018-03-19.`{{cite web}}`: نگهداری یادکرد:ربات:وضعیت نامعلوم پیوند اصلی (link)
16. ↑  "ECMAScript 3 and Beyond – IEBlog – Site Home – MSDN Blogs". Blogs.msdn.com. 2007-10-30. Retrieved 2013-10-31.
17. ↑  "What I think about ES4. - Albatross! - Site Home – MSDN Blogs". Blogs.msdn.com. 2007-10-31. Retrieved 2013-10-31.
18. ↑  "Open letter to Chris Wilson". Brendan Eich. 2007-10-31. Archived from the original on 16 September 2011. Retrieved 2013-10-31.
19. ↑  "JavaScript 2 and the Open Web". 2007-11-20. Retrieved 2014-01-20.
20. ↑  "ECMAScript Harmony". Mail.mozilla.org. Archived from the original on 26 August 2013. Retrieved 2013-10-31.
21. ↑  "A Major Milestone in JavaScript Standardization – JScript Blog – Site Home – MSDN Blogs". Blogs.msdn.com. 2009-04-09. Retrieved 2013-10-31.
22. ↑  "Ecma International finalises major revision of ECMAScript". Ecma International. 2009-04-09. Retrieved 2009-05-22.
23. ↑  "Ecma latest news". Ecma-international.org. Retrieved 2013-10-31.
24. ↑  Krill, Paul. "It's official: ECMAScript 6 is approved". *InfoWorld* (به انگلیسی). Retrieved 2018-03-19.
25. ↑  "5 Great Features in EcmaScript 6 (ES6 Harmony) - Wintellect". *Wintellect* (به انگلیسی). 2014-03-24. Archived from the original on 22 July 2017. Retrieved 2018-03-19.
26. ↑  "ECMAScript 6 (ES6): What's New In The Next Version Of JavaScript". *Smashing Magazine* (به انگلیسی). 2015-10-28. Retrieved 2018-03-19.
27. ↑  "ECMAScript 6: New Features: Overview and Comparison". *es6-features.org*. Retrieved 2018-03-19.
28. ↑  "Standard ECMA-262 6th Edition / June 2015 ECMAScript® 2015 Language Specification 14.2 Arrow Function Definitions". *www.ecma-international.org*. 2015.
29. ↑  Saboff, Michael (2016-05-23). "ECMAScript 6 Proper Tail Calls in WebKit". *WebKit*. Retrieved 2019-04-11.
30. 1 2  "ECMAScript 2017 (ES8): the final feature set". *2ality*. Retrieved 2018-04-23.

پیوند های بیرونی
----------------

### استاندارد های ایزو

* ISO/IEC 22275:2018

### استاندارد های اکما اسکریپت

* مشخصات زبان اکما اسکریپت
	+ نسخه 3، دسامبر 1999 :PDF
	+ نسخه 3 نهایی، مارچ 2000:PDF
	+ نسخه 4 (بازبینی): PDF
	+ نسخه 4 (متن نهایی): HTML, PDF
	+ نسخه 5، دسامبر 2009: PDF
	+ نسخه 5.1 ژوتن 2011: HTML, PDF
	+ نسخه 6 ژوتن ۲۰۱۵ (خصوصیات زبان اکما اسکریپت ۲۰۱۵): HTML, PDF
	+ نسخه 7 ژوتن ۲۰۱۶ (خصوصیات زبان اکما اسکریپت ۲۰۱۶): HTML, PDF
	+ نسخه 8 ژوتن ۲۰۱۷ (خصوصیات زبان اکما اسکریپت ۲۰۱۷): HTML, PDF
	+ نسخه 9 ژوتن ۲۰۱۸ (خصوصیات زبان اکما اسکریپت ۲۰۱۸): HTML,PDF
	+ نسخه 10 ژوتن ۲۰۱۹ (خصوصیات زبان اکما اسکریپت ۲۰۱۹): HTML,PDF
	+ نسخه 11 ژوتن ۲۰۲۰ (خصوصیات زبان اکما اسکریپت ۲۰۲۰): HTML,PDF
	+ نسخه 12 ژوتن ۲۰۲۱ (خصوصیات زبان اکما اسکریپت ۲۰۲۱): HTML,PDF
	+ نسخه 13 ژوتن ۲۰۲۲ (خصوصیات زبان اکما اسکریپت ۲۰۲۲): HTML
* ECMA-290 اکما اسکریپت Components Specification (June 1999)
* ECMA-327 اکما اسکریپت 3rd Edition Compact Profile (June 2001)
* ECMA-357 اکما اسکریپت for XML (E4X) Specification (June 2004)