ECMAScript چیست؟

ECMAScript یک استاندارد (specification) است که توسط سازمان ECMA International تعریف شده. این استاندارد تعیین می‌کند زبان باید چه قابلیت‌ها و رفتارهایی داشته باشد.

مثال:
نسخه‌های ECMAScript مثل ES5، ES6 (یا ES2015)، ES7 و غیره مشخص می‌کنند که زبان چه قابلیت‌هایی دارد مثل:

  • Arrow functions
  • Classes
  • Promises
  • Modules
  • Optional chaining و غیره

JavaScript چیست؟

JavaScript یک زبان برنامه‌نویسی واقعی است که مرورگرها (مثل Chrome، Firefox) و موتورهای اجرا (مثل V8 یا SpiderMonkey) بر پایه استاندارد ECMAScript پیاده‌سازی کرده‌اند.

JavaScript علاوه بر قابلیت‌های ECMAScript شامل چیزهای دیگری هم هست مثل:

  • DOM manipulation (مثلاً document.getElementById)
  • Web APIs مثل fetch, localStorage, setTimeout
  • Event loop و async handling در محیط مرورگر یا Node.js

تفاوت ساده‌شده:

مفهومECMAScriptJavaScript
نوعاستانداردزبان برنامه‌نویسی
توسطECMA تعریف شدهمرورگرها و Node.js پیاده‌سازی می‌کنند
شاملفقط قابلیت‌های پایه زبانهمه چیز از جمله Web APIs و DOM
مثالArrow function, let/const, async/awaitDOM APIs, events, fetch API

ECMAScript، مغز و استاندارد اصلی زبان است، اما JavaScript نسخه واقعی و قابل اجرا از آن است که در مرورگرها و محیط‌های مختلف استفاده می‌شود.

نسخه‌های مختلف ECMAScript به‌همراه تاریخ انتشار و مهم‌ترین قابلیت‌های هر نسخه :

ES1 (1997)

اولین نسخه استاندارد شده از ECMAScript. پایه‌گذاری زبان بود.

ES2 (1998)

تطبیق با استانداردهای ISO/IEC؛ تغییرات جزئی.

ES3 (1999)

اولین نسخه مهم و کاربردی
ویژگی‌های مهم:

  • Regular Expressions
  • Try/Catch
  • Switch
  • Do-while

ES4

هرگز منتشر نشد (خیلی بلندپروازانه بود)

ES5 (2009)

بسیار محبوب و هنوز در پروژه‌های قدیمی دیده می‌شود
ویژگی‌های مهم:

  • Strict Mode ('use strict')
  • JSON support (JSON.parse, JSON.stringify)
  • Array methods: forEach, map, filter, reduce
  • Object.defineProperty

ES6 / ES2015

نقطه عطف زبان – مدرن‌ترین نسخه اولیه
ویژگی‌های مهم:

  • let و const
  • Arrow Functions () => {}
  • Classes
  • Modules (import / export)
  • Promises
  • Template Literals `Hello ${name}`
  • Destructuring
  • Spread/Rest ...
  • Default Parameters

ES7 / ES2016

ویژگی‌های مهم:

  • Array.prototype.includes()
  • Exponentiation Operator (**)

ES8 / ES2017

ویژگی‌های مهم:

  • async/await
  • Object.entries() / Object.values()
  • String.prototype.padStart() / padEnd()

ES9 / ES2018

ویژگی‌های مهم:

  • Rest/Spread در Objects
  • Promise.finally()
  • Asynchronous Iteration (for await...of)

ES10 / ES2019

ویژگی‌های مهم:

  • Array.prototype.flat() / flatMap()
  • Object.fromEntries()
  • Optional catch binding (catch {} بدون ارور نام)

ES11 / ES2020

ویژگی‌های مهم:

  • Optional Chaining ?.
  • Nullish Coalescing ??
  • BigInt
  • Dynamic import()
  • Promise.allSettled()

ES12 / ES2021

ویژگی‌های مهم:

  • Logical Assignment Operators (&&=, ||=, ??=)
  • String.prototype.replaceAll()
  • Promise.any()
  • WeakRefs (پیشرفته و خاص)

ES13 / ES2022

ویژگی‌های مهم:

  • Top-level await
  • Class Fields
  • Static initialization blocks
  • at() method for arrays/strings

ES14 / ES2023

ویژگی‌های مهم:

  • Array.prototype.toSorted(), toReversed(), toSpliced()
  • Symbol-based item access customization (Symbol.iterator بهبود یافته)