Skip to main content

ECMAScript 버전별 주요 문법

아래는 ES5부터 최근 사양까지, 실제 사용에 영향이 큰 문법/내장 객체 변화만 간결히 추린 목록입니다. 간단 예제와 함께 정리했습니다.

ES5 (2009)

  • 엄격 모드: 'use strict'
  • JSON: JSON.parse, JSON.stringify
  • 배열 메서드: forEach, map, filter, reduce, some, every
'use strict';
[1, 2, 3].map((n) => n * 2);

ES6 / ES2015

  • 변수: let, const
  • 함수: 화살표 함수, 기본값 매개변수, 나머지 매개변수
  • 구조: 클래스, 모듈(import/export)
  • 문법: 템플릿 리터럴, 비구조화 할당, 스프레드
  • 컬렉션/반복: Map, Set, for...of, 이터러블/제너레이터
  • Promise, 심볼
const add = (a = 0, b = 0) => a + b;
const user = { id: 1, name: 'Lee' };
const { name } = user;
// import something from './mod.js'; (모듈 환경에서 사용)

ES2016

  • 지수 연산자: **
  • Array.prototype.includes
2 ** 10; // 1024
[1, 2, 3].includes(2); // true

ES2017

  • async/await
  • Object.values, Object.entries
  • 문자열 패딩: padStart, padEnd
async function main() {
const res = await fetch('/api');
return res.ok;
}

ES2018

  • 비동기 반복: for await...of
  • 객체 Rest/Spread
  • Promise.prototype.finally
const { a, ...rest } = { a: 1, b: 2 };
await Promise.resolve();
Promise.resolve().finally(() => {});

ES2019

  • Array.prototype.flat, flatMap
  • Object.fromEntries
  • String.prototype.trimStart, trimEnd
[['a'], ['b']].flat(); // ['a','b']
Object.fromEntries([['a', 1]]); // { a: 1 }

ES2020

  • 옵셔널 체이닝 ?., 널 병합 ??
  • Promise.allSettled
  • globalThis
  • BigInt
const title = post?.meta?.title ?? 'untitled';

ES2021

  • String.prototype.replaceAll
  • 논리 할당 연산자: ||=, &&=, ??=
  • 숫자 구분자: 1_000_000
  • Promise.any
obj.name ||= 'default';

ES2022

  • Array.prototype.at
  • Object.hasOwn
  • 클래스 필드/정적 초기화 블록
  • 최상위 await (모듈)
const last = arr.at(-1);
if (Object.hasOwn(obj, 'key')) {
}

ES2023

  • 불변 복사 메서드: toReversed, toSorted, toSpliced, with
  • 검색: findLast, findLastIndex
  • Hashbang #!/usr/bin/env node
const sorted = nums.toSorted((a, b) => a - b);

ES2024 (최근 사양)

  • 그룹핑: Array.prototype.group, groupToMap
  • 정규식 v 플래그 (세트 표기 등 향상)
  • Set 메서드 확장: isSubsetOf, isSupersetOf, intersection, union, difference, symmetricDifference
  • Promise.withResolvers
const groups = ['a', 'ab', 'b'].group((s) => s[0]);
const { promise, resolve, reject } = Promise.withResolvers();
resolve(1);

출처 및 참고 링크