Draft ECMA-262 / September 16, 2025

ECMAScript® 2026 언어 명세서

이 명세서에 대하여

https://tc39.es/ecma262/에 있는 문서는 가장 정확하고 최신의 ECMAScript 명세서입니다. 이 문서에는 가장 최근 연간 스냅샷의 내용과, 그 스냅샷 이후의 완료된 제안(제안 절차에서 Stage 4에 도달하여 여러 구현에 적용되었고 다음 실질적인 개정에 포함될 제안)이 함께 담겨 있습니다.

이 문서는 단일 페이지여러 페이지로 제공됩니다.

이 명세서에 기여하기

이 명세서는 ECMAScript 커뮤니티의 도움으로 GitHub에서 개발됩니다. 명세서 개발에 기여하는 방법은 여러 가지가 있습니다:

이 문서가 어떻게 작성되는지 더 자세한 내용은 colophon을 참고하세요.

소개

이 Ecma 표준은 ECMAScript 2026 언어를 정의합니다. 이는 ECMAScript 언어 명세서의 열일곱 번째 판입니다. 1997년 첫 판이 발표된 이후 ECMAScript는 세계에서 가장 널리 사용되는 범용 프로그래밍 언어 중 하나로 성장했습니다. 웹 브라우저에 내장된 언어로 가장 잘 알려져 있지만, 서버 및 임베디드 애플리케이션에서도 널리 채택되었습니다.

ECMAScript는 여러 기술에서 유래했으며, 그 중 가장 잘 알려진 것은 JavaScript(Netscape)와 JScript(Microsoft)입니다. 이 언어는 Netscape의 Brendan Eich가 발명하였으며, 최초로 해당 회사의 Navigator 2.0 브라우저에 등장했습니다. 이후 Netscape의 모든 브라우저와 Microsoft의 Internet Explorer 3.0부터 모든 브라우저에 포함되었습니다.

ECMAScript 언어 명세서의 개발은 1996년 11월에 시작되었습니다. 이 Ecma 표준의 첫 번째 판은 1997년 6월 Ecma 총회에서 채택되었습니다.

그 Ecma 표준은 ISO/IEC JTC 1에 신속 채택 절차(fast-track procedure)를 통해 제출되었고, 1998년 4월 국제 표준 ISO/IEC 16262로 승인되었습니다. 1998년 6월 Ecma 총회에서 ECMA-262 두 번째 판이 승인되어 ISO/IEC 16262와 완전히 일치하게 되었습니다. 첫 번째 판과 두 번째 판의 변경 사항은 편집상의 변화입니다.

표준의 세 번째 판에서는 강력한 정규 표현식, 향상된 문자열 처리, 새로운 제어문, try/catch 예외 처리, 오류 정의 강화, 숫자 출력 형식 지정, 그리고 향후 언어 성장을 대비한 소규모 변경 사항이 도입되었습니다. ECMAScript 표준의 세 번째 판은 1999년 12월 Ecma 총회에서 채택되었고, 2002년 6월 ISO/IEC 16262:2002로 출판되었습니다.

세 번째 판이 출판된 이후 ECMAScript는 월드 와이드 웹과 결합되어 거의 모든 웹 브라우저에서 지원되는 프로그래밍 언어로 대규모로 채택되기에 이르렀습니다. ECMAScript의 네 번째 판 개발을 위한 많은 작업이 이루어졌지만 완전히 완료되지 않았고, ECMAScript의 네 번째 판으로 출판되지 않았습니다. 하지만 그 중 일부는 여섯 번째 판 개발에 통합되었습니다.

ECMAScript 다섯 번째 판(ECMA-262 5으로 출판)은 브라우저 구현에서 일반적으로 사용되는 언어 명세서의 사실상 해석을 표준화하고, 세 번째 판 출판 이후 등장한 새로운 기능 지원을 추가했습니다. 이러한 기능에는 접근자 속성, 객체의 반사적 생성 및 검사, 속성 속성의 프로그램 제어, 추가 배열 조작 함수, JSON 객체 인코딩 형식 지원, 향상된 오류 검사와 프로그램 보안을 제공하는 엄격 모드 등이 포함됩니다. 다섯 번째 판은 2009년 12월 Ecma 총회에서 채택되었습니다.

다섯 번째 판은 ISO/IEC JTC 1에 신속 채택 절차로 제출되어 국제 표준 ISO/IEC 16262:2011로 승인되었습니다. ECMAScript 표준의 5.1 판은 소규모 수정이 통합되었고, ISO/IEC 16262:2011과 동일한 텍스트입니다. 5.1 판은 2011년 6월 Ecma 총회에서 채택되었습니다.

여섯 번째 판의 집중적인 개발은 2009년에 시작되었으며, 다섯 번째 판이 출판 준비 중이던 시점입니다. 하지만 이는 1999년 세 번째 판 출판 이후 진행된 상당한 실험과 언어 개선 설계 노력에 선행되었습니다. 실제로 여섯 번째 판 완성은 15년의 노력의 결실이라 할 수 있습니다. 이 판의 목표에는 대규모 애플리케이션 지원 강화, 라이브러리 제작, 그리고 ECMAScript를 다른 언어의 컴파일 대상로 사용하는 데의 지원 강화가 포함되었습니다. 주요 개선 사항으로는 모듈, 클래스 선언, 렉시컬 블록 스코핑, 이터레이터와 제너레이터, 비동기 프로그래밍을 위한 프로미스, 구조 분해 패턴, proper tail call 등이 있습니다. ECMAScript 내장 라이브러리는 맵, 셋, 바이너리 숫자값 배열과 같은 추가 데이터 추상화를 지원하도록 확장되었고, 문자열과 정규 표현식에서 유니코드 보조 문자 지원이 강화되었습니다. 내장 객체는 서브클래싱을 통해 확장 가능해졌습니다. 여섯 번째 판은 정기적이고 점진적인 언어 및 라이브러리 개선의 기반을 제공합니다. 여섯 번째 판은 2015년 6월 총회에서 채택되었습니다.

ECMAScript 2016은 Ecma TC39의 새로운 연간 릴리스 주기 및 공개 개발 프로세스 하에 발표된 최초의 ECMAScript 판입니다. 평문 소스 문서가 ECMAScript 2015 소스 문서에서 구축되어 GitHub에서의 추가 개발의 기반이 되었습니다. 이 표준의 개발 기간 동안 수백 건의 풀 리퀘스트와 이슈가 제출되었으며, 이는 수천 건의 버그 수정, 편집적 수정, 기타 개선사항을 대표합니다. 또한 Ecmarkup, Ecmarkdown, Grammarkdown 등 개발을 지원하는 다양한 소프트웨어 도구가 개발되었습니다. ES2016에는 새로운 거듭제곱 연산자와 Array.prototypeincludes라는 새로운 메소드가 추가되었습니다.

ECMAScript 2017에서는 Async 함수, Shared Memory, Atomics가 도입되었고, 소규모 언어 및 라이브러리 개선, 버그 수정, 편집적 업데이트가 이루어졌습니다. Async 함수는 프로미스를 반환하는 함수에 대한 문법을 제공하여 비동기 프로그래밍 경험을 향상합니다. Shared Memory와 Atomics는 멀티 에이전트 프로그램이 병렬 CPU 환경에서도 잘 정의된 실행 순서를 보장하는 원자적 연산을 사용하여 통신할 수 있는 새로운 메모리 모델을 도입합니다. 또한 Object에 새로운 정적 메소드인 Object.values, Object.entries, Object.getOwnPropertyDescriptors가 추가되었습니다.

ECMAScript 2018에서는 async 이터레이터 프로토콜과 async 제너레이터를 통한 비동기 이터레이션 지원이 도입되었습니다. 또한 네 가지 새로운 정규 표현식 기능(dotAll 플래그, 명명된 캡처 그룹, 유니코드 속성 이스케이프, 후행 어설션)을 추가하였고, 객체의 rest 및 spread 속성도 포함되었습니다.

ECMAScript 2019에서는 몇 가지 새로운 내장 함수가 도입되었습니다: 배열 평탄화를 위한 Array.prototypeflatflatMap, Object.entries의 반환값을 바로 새 객체로 변환하는 Object.fromEntries, 더 적절한 이름의 String.prototype.trimStarttrimEnd(비표준 내장인 String.prototype.trimLefttrimRight의 대안). 또한 구문 및 의미론에 일부 소규모 업데이트가 있었습니다. 업데이트된 구문에는 catch 바인딩 매개변수 선택적 사용, JSON에 맞추어 문자열 리터럴에서 U+2028(줄 구분자) 및 U+2029(단락 구분자) 허용 등이 있습니다. 기타 업데이트로는 Array.prototype.sort의 안정 정렬 요구, JSON.stringify의 입력과 관계없이 올바른 UTF-8 반환 요구, Function.prototype.toString의 명확화(원본 소스 텍스트 또는 표준 플레이스홀더 반환 요구) 등이 있습니다.

ECMAScript 2020, 11에서는 문자열의 모든 매치 객체를 반복자로 반환하는 matchAll 메소드, 동적 지정자를 통해 모듈을 비동기적으로 import할 수 있는 import() 구문, 임의 정밀도의 정수 작업을 위한 새로운 숫자 원시 타입인 BigInt, 단락 회로 없이 동작하는 새로운 Promise 결합자인 Promise.allSettled, 전역 this 값을 보편적으로 접근하는 방법인 globalThis, 모듈 내에서 사용할 수 있는 export * as ns from 'module' 구문, for-in 열거 순서의 표준화 강화, 모듈 내에서 컨텍스트 정보를 담을 수 있는 호스트가 채워주는 객체인 import.meta, 그리고 nullish 값(undefined 또는 null)을 다루기 위한 두 가지 구문(nullish 병합 연산자와 옵셔널 체이닝)이 추가되었습니다.

ECMAScript 2021, 12에서는 문자열의 replaceAll 메소드, 입력 값이 이행될 때 단락 회로가 발생하는 Promise 결합자인 Promise.any, 여러 오류를 한 번에 표현하는 새로운 오류 타입인 AggregateError, 논리 할당 연산자(??=, &&=, ||=), 객체를 가비지 컬렉션에서 보호하지 않고 참조할 수 있는 WeakRef와 가비지 컬렉션 시 정리 작업 등록 및 해제를 관리하는 FinalizationRegistry, 숫자 리터럴 구분자(1_000), 그리고 Array.prototype.sort의 동작을 더 정확하게 하여 구현 정의 정렬 순서 발생을 줄였습니다.

ECMAScript 2022, 13에서는 모듈 최상위에서 await 키워드를 사용할 수 있게 되었고, 클래스 내에 새로운 요소(공개 및 비공개 인스턴스 필드, 공개 및 비공개 정적 필드, 비공개 인스턴스 메소드 및 접근자, 비공개 정적 메소드 및 접근자), 클래스 내부에서 평가 초기화를 위한 정적 블록, 객체의 비공개 필드 존재를 테스트하는 #x in obj 구문, 정규 표현식의 매치 인덱스를 제공하는 /d 플래그, 오류의 인과 관계를 기록하는 Error 객체의 cause 속성, 상대 인덱싱을 가능하게 하는 문자열/배열/TypedArrayat 메소드, 그리고 Object.hasOwn(기존 Object.prototype.hasOwnProperty의 간편 대안)이 도입되었습니다.

ECMAScript 2023, 14에서는 Array.prototypeTypedArray.prototypetoSorted, toReversed, with, findLast, findLastIndex 메소드, 그리고 Array.prototypetoSpliced 메소드가 도입되었습니다. 파일 시작 부분에 #! 주석을 허용하여 실행 가능한 ECMAScript 파일 지원이 강화되었고, 대부분의 Symbol을 weak collection의 키로 사용할 수 있게 되었습니다.

ECMAScript 2024, 15에서는 ArrayBuffer와 SharedArrayBuffer의 크기 조정 및 전송 기능, 문자열 집합 작업을 위한 고급 기능을 가진 RegExp /v 플래그, Promise를 쉽게 생성하기 위한 Promise.withResolvers 메소드, 데이터 집계용 Object.groupByMap.groupBy 메소드, 공유 메모리 변경을 비동기적으로 기다리는 Atomics.waitAsync 메소드, 문자열이 올바른 유니코드만 포함하는지 확인/보장하는 String.prototype.isWellFormedString.prototype.toWellFormed 메소드가 도입되었습니다.

ECMAScript 2025, 16에서는 이터레이터 작업을 위한 새로운 전역 Iterator와 관련 정적 및 프로토타입 메소드, Set.prototype의 셋 작업용 메소드, JSON 모듈 import 및 import된 모듈의 속성 선언 구문, 정규 표현식 안전 문자열 이스케이프를 위한 RegExp.escape 메소드, 정규 표현식 내에서 인라인 플래그 활성/비활성화 구문, 함수가 Promise를 반환하든 아니든 항상 Promise를 반환하게 하는 Promise.try 메소드, 새로운 TypedArray 종류인 Float16Array와 관련된 DataView.prototype.getFloat16, DataView.prototype.setFloat16, Math.f16round 메소드가 추가되었습니다.

Ecma TC39 내에서 많은 단체를 대표하는 수십 명의 개인이 이번 판뿐만 아니라 이전 판의 개발에도 매우 중요한 기여를 했습니다. 또한 TC39의 ECMAScript 활동을 지원하는 활발한 커뮤니티가 성장했습니다. 이 커뮤니티는 수많은 초안 검토, 수천 건의 버그 리포트 제출, 구현 실험, 테스트 슈트 기여, ECMAScript에 대해 전 세계 개발자 커뮤니티를 교육하는 역할을 했습니다. 유감스럽게도 이 노력에 기여한 모든 개인과 단체를 식별하고 인정하는 것은 불가능합니다.

Allen Wirfs-Brock
ECMA-262, 프로젝트 편집자, 6

Brian Terlson
ECMA-262, 프로젝트 편집자, 7 ~ 10

Jordan Harband
ECMA-262, 프로젝트 편집자, 10 ~ 12

Shu-yu Guo
ECMA-262, 프로젝트 편집자, 12 ~ 16

Michael Ficarra
ECMA-262, 프로젝트 편집자, 12 ~ 16

Kevin Gibbons
ECMA-262, 프로젝트 편집자, 12 ~ 16