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/awaitObject.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
catchbinding (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بهبود یافته)