페이지 표시 설정

초안 ECMA-262 / 2026년 10월 24일

ECMAScript® 2027 언어 명세

이 명세에 대하여

https://tc39.es/ecma262/의 문서는 가장 정확한 최신 ECMAScript 명세입니다. 이 문서에는 가장 최근의 연간 스냅샷 내용과 모든 완료된 제안 — 제안 절차에서 단계 4에 도달하여 여러 구현체에 구현되었으며 다음 연간 스냅샷에 포함될 제안 — 이 들어 있습니다. 이전 스냅샷은 https://ecma-international.org/publications-and-standards/standards/ecma-262/에서 확인할 수 있습니다.

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

이 명세에 기여하기

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

이 문서의 제작 방법에 관한 자세한 내용은 제작 정보를 참조하시기 바랍니다.

소개

이 Ecma 표준은 ECMAScript 2027 언어를 정의합니다. 이 문서는 ECMAScript 언어 명세의 제18판입니다. ECMAScript는 여러 초기 기술을 기반으로 하며, 그중 가장 잘 알려진 기술은 JavaScript(Netscape)와 JScript(Microsoft)입니다. 이 언어는 Netscape의 Brendan Eich가 만들었으며, 해당 회사의 Navigator 2.0 브라우저에서 처음 등장했습니다. 웹 브라우저에 내장된 언어로 가장 잘 알려져 있지만, 서버 및 임베디드 애플리케이션을 포함하여 브라우저 외부에서도 널리 채택되었으며, 세계에서 가장 널리 사용되는 범용 프로그래밍 언어 중 하나로 성장했습니다.

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

이 Ecma 표준은 신속 처리 절차에 따라 채택되도록 ISO/IEC JTC 1에 제출되었으며, 1998년 4월에 국제 표준 ISO/IEC 16262로 승인되었습니다. 1998년 6월 Ecma 총회는 ISO/IEC 16262와 완전히 일치하도록 ECMA-262 제2판을 승인했습니다. 초판과 제2판 사이의 변경 사항은 편집상의 변경입니다.

이 표준의 제3판에는 강력한 정규 표현식, 향상된 문자열 처리, 새로운 제어문, try/catch 예외 처리, 더욱 엄밀한 오류 정의, 숫자 출력 형식 지정 및 향후 언어의 발전을 고려한 사소한 변경 사항이 도입되었습니다. ECMAScript 표준 제3판은 1999년 12월 Ecma 총회에서 채택되었으며, 2002년 6월에 ISO/IEC 16262:2002로 발행되었습니다.

제3판이 발행된 후 ECMAScript는 월드 와이드 웹과 함께 광범위하게 채택되어 사실상 모든 웹 브라우저에서 지원하는 프로그래밍 언어가 되었습니다. ECMAScript 제4판을 개발하기 위해 상당한 작업이 이루어졌습니다. 그러나 해당 작업은 완료되지 않았고 ECMAScript 제4판으로 발행되지도 않았으며, 그 일부가 제6판의 개발에 반영되었습니다.

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

제5판은 신속 처리 절차에 따라 채택되도록 ISO/IEC JTC 1에 제출되었으며, 국제 표준 ISO/IEC 16262:2011로 승인되었습니다. ECMAScript 표준 제5.1판에는 사소한 수정 사항이 반영되었으며, ISO/IEC 16262:2011과 동일한 내용을 담고 있습니다. 제5.1판은 2011년 6월 Ecma 총회에서 채택되었습니다.

제6판에 대한 본격적인 개발은 제5판의 발행을 준비하던 2009년에 시작되었습니다. 그러나 이에 앞서 1999년 제3판의 발행 시점부터 상당한 실험과 언어 개선 설계 작업이 이루어졌습니다. 실질적으로 제6판의 완성은 15년에 걸친 노력의 결실입니다. 이 판의 목표에는 대규모 애플리케이션과 라이브러리 제작에 대한 지원을 개선하고, ECMAScript를 다른 언어의 컴파일 대상으로 사용하는 데 대한 지원을 개선하는 것이 포함되었습니다. 주요 개선 사항에는 모듈, 클래스 선언, 렉시컬 블록 스코프, 이터레이터와 제너레이터, 비동기 프로그래밍을 위한 프로미스, 구조 분해 패턴 및 적절한 꼬리 호출이 포함되었습니다. ECMAScript 내장 라이브러리는 맵, 집합, 이진 숫자 값의 배열을 포함한 추가 데이터 추상화를 지원하도록 확장되었으며, 문자열과 정규 표현식에서 유니코드 보충 문자에 대한 지원도 추가되었습니다. 내장 기능은 서브클래싱을 통해 확장할 수 있게 되었습니다. 제6판은 언어와 라이브러리를 정기적으로 점진적으로 개선하기 위한 토대를 제공합니다. 제6판은 2015년 6월 총회에서 채택되었습니다.

ECMAScript 2016은 Ecma TC39의 새로운 연간 릴리스 주기와 공개 개발 절차에 따라 출시된 최초의 ECMAScript 판입니다. 이후의 모든 개발을 GitHub에서 진행하기 위한 기반으로 삼기 위해 ECMAScript 2015 소스 문서로부터 일반 텍스트 소스 문서를 만들었습니다. 이 표준이 개발된 1년 동안 수천 건의 버그 수정, 편집 수정 및 기타 개선 사항에 해당하는 수백 건의 풀 리퀘스트와 이슈가 등록되었습니다. 또한 이러한 작업을 지원하기 위해 Ecmarkup, Ecmarkdown, Grammarkdown을 비롯한 다양한 소프트웨어 도구가 개발되었습니다. ES2016에는 새로운 거듭제곱 연산자에 대한 지원도 포함되었으며, Array.prototype에 includes라는 새로운 메서드가 추가되었습니다.

ECMAScript 2017에는 소규모 언어 및 라이브러리 개선, 버그 수정, 편집상의 갱신과 함께 비동기 함수, 공유 메모리 및 원자적 연산이 도입되었습니다. 비동기 함수는 프로미스를 반환하는 함수를 위한 구문을 제공하여 비동기 프로그래밍 경험을 개선합니다. 공유 메모리와 원자적 연산은 병렬 CPU에서도 명확히 정의된 실행 순서를 보장하는 원자적 연산을 사용하여 여러 에이전트로 구성된 프로그램이 통신할 수 있도록 하는 새로운 메모리 모델을 도입합니다. Object에 새로운 정적 메서드인 Object.values, Object.entries, Object.getOwnPropertyDescriptors도 추가되었습니다.

ECMAScript 2018에는 비동기 이터레이터 프로토콜과 비동기 제너레이터를 통한 비동기 반복 지원이 도입되었습니다. 또한 네 가지 새로운 정규 표현식 기능인 dotAll 플래그, 이름 있는 캡처 그룹, 유니코드 프로퍼티 이스케이프 및 후방 탐색 단언이 포함되었습니다. 마지막으로 객체의 나머지 프로퍼티와 전개 프로퍼티가 포함되었습니다.

ECMAScript 2019에는 몇 가지 새로운 내장 함수가 도입되었습니다. 배열을 평탄화하기 위한 Array.prototype의 flat과 flatMap, Object.entries의 반환값을 새 Object로 직접 변환하기 위한 Object.fromEntries, 널리 구현되어 있지만 비표준인 내장 함수 String.prototype.trimLeft와 trimRight를 더 적절한 이름으로 대체하는 String.prototype의 trimStart와 trimEnd가 포함되었습니다. 또한 구문과 의미에 대한 몇 가지 사소한 갱신이 포함되었습니다. 구문 갱신에는 선택적인 catch 바인딩 매개변수와 JSON에 맞추기 위한 문자열 리터럴 내 U+2028(줄 구분자) 및 U+2029(문단 구분자)의 허용이 포함되었습니다. 다른 갱신 사항에는 Array.prototype.sort가 안정 정렬을 수행하도록 하는 요구 사항, JSON.stringify가 입력과 관계없이 올바른 형식의 UTF-8을 반환하도록 하는 요구 사항, Function.prototype.toString이 해당하는 원래 소스 텍스트 또는 표준 자리표시자 중 하나를 반환하도록 하여 그 동작을 명확히 하는 사항이 포함되었습니다.

ECMAScript 2020은 제11판으로, 전역 정규 표현식에서 생성된 모든 일치 객체에 대한 이터레이터를 생성하는 String의 matchAll 메서드; 동적 지정자를 사용하여 모듈을 비동기적으로 가져오는 구문인 import(); 임의 정밀도 정수를 다루기 위한 새로운 숫자 원시형인 BigInt; 단락 평가하지 않는 새로운 Promise 조합자인 Promise.allSettled; 전역 this 값에 접근하는 범용적인 방법인 globalThis; 모듈 내부에서 사용하는 전용 export * as ns from 'module' 구문; for-in 열거 순서의 표준화 확대; 모듈에서 사용할 수 있으며 호스트가 내용을 채우고 모듈에 관한 문맥 정보를 포함할 수 있는 객체인 import.meta를 도입했습니다. 또한 “nullish” 값(undefined 또는 null)을 더 편리하게 다루기 위한 두 가지 새로운 구문 기능인 값 선택 연산자 nullish 병합과, 접근하거나 호출할 값이 nullish이면 단락 평가하는 프로퍼티 접근 및 함수 호출 연산자 옵셔널 체이닝이 추가되었습니다.

ECMAScript 2021은 제12판으로, String의 replaceAll 메서드; 입력값이 이행되면 단락 평가하는 Promise 조합자인 Promise.any; 여러 오류를 한 번에 나타내는 새로운 Error 유형인 AggregateError; 논리 할당 연산자(??=, &&=, ||=); 대상 객체가 가비지 컬렉션으로부터 유지되도록 하지 않으면서 해당 객체를 참조하는 WeakRef와, 대상 객체가 가비지 컬렉션될 때 수행되는 정리 작업의 등록 및 등록 해제를 관리하는 FinalizationRegistry; 숫자 리터럴의 구분자(1_000)를 도입했습니다. 또한 Array.prototype.sort가 더 정밀하게 정의되어 구현체 정의 정렬 순서가 발생하는 경우의 수가 줄었습니다.

ECMAScript 2022는 제13판으로, 모듈의 최상위 수준에서 해당 키워드를 사용할 수 있게 하는 최상위 await; 새로운 클래스 요소인 공개 및 비공개 인스턴스 필드, 공개 및 비공개 정적 필드, 비공개 인스턴스 메서드와 접근자, 비공개 정적 메서드와 접근자; 클래스별 평가 초기화를 수행하는 클래스 내부의 정적 블록; 객체에 비공개 필드가 있는지 검사하는 #x in obj 구문; 일치한 부분 문자열의 시작 및 끝 인덱스를 제공하는 /d 플래그를 통한 정규 표현식 일치 인덱스; 오류의 원인 연결 관계를 기록하는 데 사용할 수 있는 Error 객체의 cause 프로퍼티; 상대 인덱싱을 허용하는 String, Array 및 TypedArray의 at 메서드; Object.prototype.hasOwnProperty를 편리하게 대체하는 Object.hasOwn을 도입했습니다.

ECMAScript 2023은 제14판으로, Array.prototype과 TypedArray.prototype의 toSorted, toReversed, with, findLast, findLastIndex 메서드 및 Array.prototype의 toSpliced 메서드를 도입했습니다. 실행 가능한 ECMAScript 파일을 더 편리하게 만들 수 있도록 파일 시작 부분의 #! 주석에 대한 지원을 추가했으며, 대부분의 Symbol을 약한 컬렉션의 키로 사용할 수 있도록 허용했습니다.

ECMAScript 2024는 제15판으로, ArrayBuffer와 SharedArrayBuffer의 크기를 조정하고 전송하는 기능을 추가했습니다. 문자열 집합을 다루는 고급 기능을 갖춘 RegExp를 생성하기 위한 새로운 RegExp /v 플래그를 추가했습니다. 또한 Promise를 구성하기 위한 편의 메서드 Promise.withResolvers, 데이터를 집계하기 위한 Object.groupBy와 Map.groupBy 메서드, 공유 메모리의 변경을 비동기적으로 기다리기 위한 Atomics.waitAsync 메서드, 문자열에 올바른 형식의 유니코드만 포함되는지 검사하고 이를 보장하기 위한 String.prototype.isWellFormed와 String.prototype.toWellFormed 메서드를 도입했습니다.

ECMAScript 2025는 제16판으로, 이터레이터를 다루기 위한 관련 정적 메서드와 프로토타입 메서드를 갖춘 새로운 전역 Iterator를 추가했습니다. Set에 대한 일반적인 연산을 수행하기 위한 메서드를 Set.prototype에 추가했습니다. JSON 모듈 가져오기에 대한 지원과 가져오는 모듈의 속성을 선언하기 위한 구문을 추가했습니다. 문자열을 정규 표현식에서 안전하게 사용할 수 있도록 이스케이프하는 RegExp.escape 메서드를 추가했습니다. 정규 표현식 내부에서 수정자 플래그를 인라인으로 활성화하거나 비활성화하는 구문을 추가했습니다. Promise를 반환할 수도 있고 반환하지 않을 수도 있는 함수를 호출하면서 결과가 항상 Promise가 되도록 보장하는 Promise.try 메서드를 추가했습니다. 또한 새로운 TypedArray 종류인 Float16Array와 관련 메서드 DataView.prototype.getFloat16, DataView.prototype.setFloat16, Math.f16round를 추가했습니다.

ECMAScript 2026은 제17판으로, 정밀도 손실을 최소화하면서 크기가 서로 다른 Number의 이터러블을 합산하는 Math.sumPrecise; 이터레이터를 순서대로 연결하는 Iterator.concat; 비동기 이터러블 및 기타 비동기 소스로부터 Array를 구성하는 Array.fromAsync; 오류 객체를 식별하는 Error.isError; 키가 아직 존재하지 않을 때 조회 시 사용할 기본값을 제공하기 위한 Map.prototype과 WeakMap.prototype의 메서드; 16진수 및 base64로 인코딩된 이진 데이터의 String으로 변환하거나 그로부터 변환하기 위한 Uint8Array의 메서드; 일치하는 JSON 소스 구간에 접근하기 위한 JSON.parse reviver의 매개변수; 원시값에 대한 JSON.stringify 출력을 세밀하게 제어하기 위한 JSON.rawJSON을 추가했습니다.

여러 조직을 대표하는 수십 명의 개인이 Ecma TC39에서 이 판과 이전 판의 개발에 매우 중요한 기여를 했습니다. 또한 TC39의 ECMAScript 관련 활동을 지원하는 활발한 커뮤니티가 형성되었습니다. 이 커뮤니티는 수많은 초안을 검토하고, 수천 건의 버그 보고서를 제출하고, 구현 실험을 수행하고, 테스트 모음을 기여하고, 전 세계 개발자 커뮤니티에 ECMAScript를 교육했습니다. 안타깝게도 이 작업에 기여한 모든 개인과 조직을 확인하여 감사를 표하는 것은 불가능합니다.

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

Brian Terlson
ECMA-262, 프로젝트 편집자, 제7판부터 제10판까지

Jordan Harband
ECMA-262, 프로젝트 편집자, 제10판부터 제12판까지

Kevin Gibbons
ECMA-262, 프로젝트 편집자, 제12판부터 제17판까지

Shu-yu Guo
ECMA-262, 프로젝트 편집자, 제12판부터 제18판까지

Michael Ficarra
ECMA-262, 프로젝트 편집자, 제12판부터 제18판까지

Richard Gibson
ECMA-262, 프로젝트 편집자, 제18판

Ron Buckton
ECMA-262, 프로젝트 편집자, 제18판

Nicolò Ribaudo
ECMA-262, 프로젝트 편집자, 제18판

Linus Groh
ECMA-262, 프로젝트 편집자, 제18판