
JavaScript를 배우거나 사용하는 사람이라면 ES6 표준, ES5, ES2020등의 단어를 들어본 적이 있을 것이다. 하지만 arrow function, let, const, spread operator등이 ES6에서 추가됐다는 것은 알아도 ES가 무엇인지 찾아보지 않아 그간 모르고 지내왔다. 이번 시간에는 ECMAScript가 무엇인지 정리해보겠다.
What is ECMAScript?
ECMAScript는 말 그대로 ECMA라는 기관이 만든 Script 언어이며, ECMA-262 표준를 따르고 있다. ECMA-262는 Ecma International[정보와 통신 시스템을 위한 국제적 표준화 기구]에서 정의한 ECMAScript의 언어 규격이다.
JavaScript를 개발한 Netscape가 더 향상된 표준화를 위해 기술 규격을 Ecma에 제출했고, 그에 따라 Ecma가 새롭게 제정한 표준이 바로 ECMA-262다. 따라서 ECMA-262는 국제 언어 규격이며, ECMAScript는 ECMA-262에 의해 표준화된 JavaScript의 또다른 이름이다.
Version of ECMAScript
ES5, ES6, ES2020 등은 ECMAScript가 배포된 버전이다.
브라우저 업데이트를 유심히 살펴본 변태(필자)의 경우 JavaScript의 함수가 지원된다고 적혀있는 글을 본적이 있다. 이 때에 브라우저에서 지원하는 것은 ECMAScript를 말하는 것이며 국제 표준에 맞게 업데이트를 했다는 뜻이다.
JavaScript의 표준, 그 초판은 1997년에 출시되었다. ES1, ES2, ES3, ES5 및 ES6으로 축약되었다.
| version | Year | Feature |
| ES1 | ECMAScript 1 (1997) | First edition |
| ES2 | ECMAScript 2 (1998) | Editorial changes |
| ES3 | ECMAScript 3 (1999) | regular expressions try/catch |
| ES4 | ECMAScript 4 | Never released |
| ES5 | ECMAScript 5 (2009) | "strict mode" JSON support String.trim() Array.isArray() Array iteration methods |
| ES6 | ECMAScript 2015 | let and const default parameter values module(export and import) Array.find() Array.findIndex() |
| ES7 | ECMAScript 2016 | exponential operator (**) Array.prototype.includes |
| ES8 |
ECMAScript 2017 | string padding Object.entries Object.values async functions shared memory |
| ES9 | ECMAScript 2018 | rest / spread properties asynchronous iteration Promise.finally() RegExp |
| ES10 | ECMAScript 2019 | Object.fromEntries Array.prototype.flat Array.prototype.flatMap optional chatch binding |
| ES11 | ECMAScript 2020 | String.prototype.matchAll BigInt globalThis Promise.allSettled null 병합 연산자 옵셔널 체이닝 연산자 for...in enumeration order |
| ES12 | ECMAScript 2021 | Logical assignment operators (||=, &&=, ??=) String.replaceAll Numeric separator propmise.any WeakRef |
| ES13 | ECMAScript 2022 | .at() RegExp match indices Object.hasOwn(obj, propKey) error.cause Top-level await module Class Fields |
5판까지는 ECMAScript 5(=ES5)라는 명칭을 사용했지만, 6판부터는 빠른 배포주기를 반영하기 위해 숫자 대신 연도를 붙여 ECMAScript 2015(=ES6) 같은 명칭을 사용한다. ECMAScript 2022은 많이들 ES5, ES6과 다르게 ES2022라고 부르는데, 특별한 이유는 없다. ES13라고 표기해도 되는데 배포 연도를 강조하기 위해 ES2022라고 부르는 것이다.