new Operatorsuper Keyword? : ), )if Statementdo-while Statementwhile Statementfor Statementfor-in, for-of, and for-await-of Statementscontinue Statementbreak Statementreturn Statementwith Statementswitch Statementthrow Statementtry Statementdebugger Statement?um/p1-90`https://tc39.es/ecma262/에 있는 문서는 가장 정확하고 최신인 ECMAScript 명세입니다. 여기에는 가장 최근의 연간 스냅샷 내용과 모든 완료된 제안 — 즉 제안 절차에서 Stage 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 표준은 fast-track 절차에 따라 ISO/IEC JTC 1에 채택을 위해 제출되었고, 1998년 4월에 국제 표준 ISO/IEC 16262로 승인되었습니다. 1998년 6월 Ecma 총회는 ECMA-262의 제2판을 ISO/IEC 16262와 완전히 일치하도록 승인했습니다. 초판과 제2판 사이의 변경 사항은 편집상 변경입니다.
표준의 제3판은 강력한 정규 표현식, 더 나은 문자열 처리, 새로운 제어문, try/catch 예외 처리, 오류의 더 엄밀한 정의, 숫자 출력 형식화 및 향후 언어 성장을 예상한 소규모 변경을 도입했습니다. ECMAScript 표준 제3판은 1999년 12월 Ecma 총회에서 채택되었고 2002년 6월 ISO/IEC 16262:2002로 공개되었습니다.
제3판 공개 이후, ECMAScript는 World Wide Web과 함께 대규모로 채택되어 사실상 모든 웹 브라우저가 지원하는 프로그래밍 언어가 되었습니다. ECMAScript 제4판 개발을 위한 중요한 작업이 수행되었습니다. 그러나 그 작업은 완료되지 않았고 ECMAScript 제4판으로 공개되지 않았지만, 그 일부는 제6판 개발에 포함되었습니다.
ECMAScript 제5판(ECMA-262 5th edition으로 공개됨)은 브라우저 구현 사이에서 일반화된 언어 명세의 사실상 해석을 성문화하고, 제3판 공개 이후 등장한 새로운 기능에 대한 지원을 추가했습니다. 그러한 기능에는 접근자 속성, 객체의 반사적 생성과 검사, 속성 어트리뷰트의 프로그램 제어, 추가 배열 조작 함수, JSON 객체 인코딩 형식 지원, 그리고 향상된 오류 검사와 프로그램 보안을 제공하는 strict mode가 포함됩니다. 제5판은 2009년 12월 Ecma 총회에서 채택되었습니다.
제5판은 fast-track 절차에 따라 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 사용을 더 잘 지원하는 것이 포함되었습니다. 주요 개선 사항에는 모듈, 클래스 선언, lexical block scoping, 이터레이터와 제너레이터, 비동기 프로그래밍을 위한 promise, 구조 분해 패턴, proper tail calls가 포함되었습니다. ECMAScript 내장 라이브러리는 맵, 세트, 이진 숫자 값의 배열을 포함한 추가 데이터 추상화를 지원하도록 확장되었으며, 문자열과 정규 표현식에서 Unicode supplementary character에 대한 추가 지원도 포함했습니다. 또한 내장 객체는 서브클래싱을 통해 확장 가능하게 만들어졌습니다. 제6판은 정기적이고 점진적인 언어 및 라이브러리 향상의 기반을 제공합니다. 제6판은 2015년 6월 총회에서 채택되었습니다.
ECMAScript 2016은 Ecma TC39의 새로운 연간 릴리스 주기와 개방형 개발 절차에 따라 릴리스된 첫 번째 ECMAScript 판이었습니다. ECMAScript 2015 소스 문서에서 평문 소스 문서를 만들어 GitHub에서 완전히 이어지는 개발의 기반으로 삼았습니다. 이 표준이 개발된 1년 동안 수백 개의 pull request와 issue가 제출되었으며, 이는 수천 건의 버그 수정, 편집상 수정 및 기타 개선을 나타냅니다. 또한 Ecmarkup, Ecmarkdown, Grammarkdown을 포함하여 이 작업을 돕기 위한 수많은 소프트웨어 도구가 개발되었습니다. ES2016은 또한 새로운 지수 연산자 지원을 포함하고, Array.prototype에 includes라는 새 메서드를 추가했습니다.
ECMAScript 2017은 Async Functions, Shared Memory, Atomics를 도입했으며, 이와 함께 더 작은 언어 및 라이브러리 개선, 버그 수정, 편집상 업데이트를 포함했습니다. Async functions는 promise를 반환하는 함수를 위한 구문을 제공하여 비동기 프로그래밍 경험을 개선합니다. Shared Memory와 Atomics는 여러 Object.values, Object.entries, Object.getOwnPropertyDescriptors도 포함되었습니다.
ECMAScript 2018은 dotAll 플래그, named capture group, Unicode property escape, look-behind assertion을 포함했습니다. 마지막으로 object rest 및 spread properties를 포함했습니다.
ECMAScript 2019는 몇 가지 새로운 내장 함수를 도입했습니다: 배열을 평탄화하기 위한 Array.prototype의 flat과 flatMap, Object.entries의 반환값을 직접 새 Object로 바꾸기 위한 Object.fromEntries, 그리고 널리 구현되었지만 비표준인 String.prototype.trimLeft 및 trimRight 내장 함수의 더 나은 이름을 가진 대안으로서 String.prototype의 trimStart와 trimEnd가 포함됩니다. 또한 구문과 의미에 대한 몇 가지 사소한 업데이트가 포함되었습니다. 업데이트된 구문에는 optional catch binding parameter와 JSON에 맞추기 위해 문자열 리터럴에서 U+2028(LINE SEPARATOR) 및 U+2029(PARAGRAPH SEPARATOR)를 허용하는 것이 포함되었습니다. 다른 업데이트에는 Array.prototype.sort가 stable sort여야 한다는 요구, JSON.stringify가 입력과 관계없이 well-formed UTF-8을 반환해야 한다는 요구, 그리고 Function.prototype.toString이 해당 원본 소스 텍스트 또는 표준 placeholder를 반환해야 한다고 명확히 하는 것이 포함되었습니다.
ECMAScript 2020, 제11판은 전역 정규 표현식이 생성하는 모든 match object에 대한 matchAll 메서드; 동적 specifier로 Module을 비동기적으로 import하는 구문인 import(); 임의 정밀도 정수 작업을 위한 새로운 number primitive인 BigInt; short-circuit하지 않는 새로운 Promise combinator인 Promise.allSettled; 전역 this 값에 접근하는 보편적 방법인 globalThis; module 내에서 사용하기 위한 전용 export * as ns from 'module' 구문; for-in 열거 순서의 표준화 확대; Module에서 사용할 수 있고 Module에 대한 문맥 정보를 포함할 수 있는 import.meta; 그리고 “nullish” 값(
ECMAScript 2021, 제12판은 String의 replaceAll 메서드; 입력 값이 fulfilled되면 short-circuit하는 Promise combinator인 Promise.any; 여러 오류를 한 번에 표현하는 새로운 Error 타입인 AggregateError; logical assignment operators(??=, &&=, ||=); 대상 객체가 garbage collection되지 않도록 보존하지 않고 참조하기 위한 WeakRef, 그리고 대상 객체가 garbage collection될 때 수행되는 cleanup operation의 등록과 해제를 관리하기 위한 FinalizationRegistry; 숫자 리터럴의 separator(1_000); 그리고 Array.prototype.sort를 더 정밀하게 만들어 구현 정의 정렬 순서가 되는 경우의 수를 줄인 것을 도입했습니다.
ECMAScript 2022, 제13판은 top-level await를 도입하여 module의 top level에서 해당 #x in obj 구문; match된 /d 플래그를 통한 regular expression match indices; 오류에서 causation chain을 기록하는 데 사용할 수 있는 Error object의 cause 속성; relative indexing을 허용하는 String, Array, at 메서드; 그리고 Object.prototype.hasOwnProperty의 편리한 대안인 Object.hasOwn을 도입했습니다.
ECMAScript 2023, 제14판은 Array.prototype과 TypedArray.prototype의 toSorted, toReversed, with, findLast, findLastIndex 메서드와 Array.prototype의 toSpliced 메서드를 도입했습니다; 실행 가능한 ECMAScript 파일을 더 잘 지원하기 위해 파일 시작 부분의 #! 주석 지원을 추가했습니다; 그리고 대부분의 Symbol을 weak collection의 key로 사용할 수 있게 했습니다.
ECMAScript 2024, 제15판은 ArrayBuffer와 SharedArrayBuffer의 resizing 및 transferring을 위한 기능을 추가했습니다; string set 작업을 위한 더 고급 기능을 갖춘 RegExp를 만들기 위한 새로운 RegExp /v 플래그를 추가했습니다; 그리고 Promise를 구성하기 위한 편의 메서드 Promise.withResolvers, 데이터를 집계하기 위한 Object.groupBy와 Map.groupBy 메서드, shared memory 변경을 비동기적으로 기다리기 위한 Atomics.waitAsync 메서드, 문자열이 well-formed Unicode만 포함하는지 확인하고 보장하기 위한 String.prototype.isWellFormed와 String.prototype.toWellFormed 메서드를 도입했습니다.
ECMAScript 2025, 제16판은 Iterator global을 추가했습니다; Set에 대한 일반적인 operation을 수행하기 위한 메서드를 Set.prototype에 추가했습니다; JSON module import 지원과 imported module의 attribute를 선언하는 구문을 추가했습니다; 문자열을 정규 표현식에서 안전하게 사용할 수 있도록 escape하는 RegExp.escape 메서드를 추가했습니다; 정규 표현식 내에서 modifier flag를 inline으로 활성화하고 비활성화하는 구문을 추가했습니다; Promise를 반환할 수도 있고 반환하지 않을 수도 있는 함수를 호출하고 결과가 항상 Promise가 되도록 보장하기 위한 Promise.try 메서드를 추가했습니다; 그리고 새로운 Float16Array DataView.prototype.getFloat16, DataView.prototype.setFloat16, Math.f16round 메서드를 추가했습니다.
ECMAScript 2026, 제17판은 precision loss를 최소화하면서 크기가 다양한 Number의 Math.sumPrecise; Iterator.concat; Array.fromAsync; error object를 식별하기 위한 Error.isError; key가 아직 존재하지 않을 때 retrieval 중 사용할 default value를 제공하기 위한 Map.prototype과 WeakMap.prototype의 메서드; 16진수 및 base64로 인코딩된 이진 데이터 String으로 변환하거나 그로부터 변환하기 위한 Uint8Array의 메서드; JSON source의 match된 segment에 접근하기 위한 JSON.parse reviver의 parameter; 그리고 primitive value에 대한 JSON.stringify 출력을 세밀하게 제어하기 위한 JSON.rawJSON을 추가했습니다.
많은 조직을 대표하는 수십 명의 개인이 Ecma TC39 내에서 이 판과 이전 판들의 개발에 매우 중요한 기여를 했습니다. 또한 TC39의 ECMAScript 작업을 지원하는 활발한 커뮤니티가 형성되었습니다. 이 커뮤니티는 수많은 draft를 검토하고, 수천 건의 bug report를 제출하고, implementation experiment를 수행하고, test suite에 기여하고, 전 세계 개발자 커뮤니티에 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판 프로젝트 편집자