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
تفاوت سادهشده:
مفهوم | ECMAScript | JavaScript |
---|---|---|
نوع | استاندارد | زبان برنامهنویسی |
توسط | ECMA تعریف شده | مرورگرها و Node.js پیادهسازی میکنند |
شامل | فقط قابلیتهای پایه زبان | همه چیز از جمله Web APIs و DOM |
مثال | Arrow function, let/const, async/await | DOM 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
بهبود یافته)