?uem/p1-90`이 명세의 알고리즘은 각각 연관된 타입이 있는 값을 조작합니다. 가능한 값 타입은 정확히 이 절에 정의된 타입입니다. 타입은 다시
ECMAScript 언어 타입은 ECMAScript 프로그래머가 ECMAScript 언어를 사용하여 직접 조작하는 값에 대응합니다. ECMAScript 언어 타입은 Undefined, Null, Boolean, String, Symbol, Number, BigInt 및 Object입니다. ECMAScript 언어 값은 ECMAScript 언어 타입으로 특징지어지는 값입니다.
Undefined 타입에는
Null 타입에는
Boolean 타입은
String 타입은 0개 이상의 16비트 부호 없는 정숫값(“요소”)으로 이루어진 모든 순서 있는 시퀀스의 집합이며, 최대 길이는 253 - 1개 요소입니다. String 타입은 일반적으로 실행 중인 ECMAScript 프로그램의 텍스트 데이터를 나타내는 데 사용되며, 이 경우 String의 각 요소는 UTF-16 코드 단위 값으로 취급됩니다. 각 요소는 시퀀스 내의 한 위치를 차지하는 것으로 간주됩니다. 이러한 위치는 음이 아닌
String 내용을 해석하지 않는 ECMAScript 연산은 추가적인 의미론을 적용하지 않습니다. String 값을 해석하는 연산은 각 요소를 하나의 UTF-16 코드 단위로 취급합니다. 그러나 ECMAScript는 이러한 코드 단위의 값이나 코드 단위 사이의 관계를 제한하지 않으므로, String 내용을 UTF-16으로 인코딩된 유니코드 코드 포인트 시퀀스로 추가 해석하는 연산은 올바르지 않은 부분 시퀀스를 고려해야 합니다. 이러한 연산은 숫자 값이 0xD800부터 0xDBFF까지의
String.prototype.normalize 함수(String.prototype.localeCompare(
이 설계의 근거는 String의 구현을 가능한 한 단순하고 고성능으로 유지하기 위한 것입니다.
이 명세에서 “A, B, ...의 문자열 연결”이라는 문구(각 인수는 String 값, 코드 단위 또는 코드 단위 시퀀스입니다)는 각 인수의 코드 단위를 인수 순서대로 연결한 코드 단위 시퀀스를 갖는 String 값을 나타냅니다.
“string의 inclusiveStart부터 exclusiveEnd까지의 부분 문자열”이라는 문구(string은 String 값 또는 코드 단위 시퀀스이고 inclusiveStart와 exclusiveEnd는
“ASCII 단어 문자”라는 문구는 유니코드 기본 라틴 블록의 모든 문자와 숫자 및 U+005F (LOW LINE)만으로 구성된 다음 String 값을 나타냅니다:
역사적인 이유로 이는 여러 알고리즘에서 중요한 의미를 갖습니다.
searchValue가 빈 String이고 fromIndex ≤ string의 길이이면, 이 알고리즘은 fromIndex를 반환합니다. 빈 String은 마지막 코드 단위 뒤를 포함하여 문자열 내의 모든 위치에서 사실상 발견됩니다.
fromIndex + searchValue의 길이 > string의 길이이면 이 알고리즘은 항상
searchValue가 빈 String이면 이 알고리즘은 fromIndex를 반환합니다. 빈 String은 마지막 코드 단위 뒤를 포함하여 문자열 내의 모든 위치에서 사실상 발견됩니다.
Symbol 타입은 Object 프로퍼티의 키로 사용할 수 있는 모든 String이 아닌 값의 집합입니다(
각 Symbol은 고유하며 변경할 수 없습니다.
각 Symbol에는 값이 String 또는
잘 알려진 Symbol은 이 명세의 알고리즘에서 명시적으로 참조하는 내장 Symbol 값입니다. 일반적으로 명세 알고리즘의 확장 지점 역할을 하는 값을 가진 프로퍼티의 키로 사용됩니다. 달리 명시되지 않는 한 잘 알려진 Symbol 값은 모든
이 명세에서 잘 알려진 Symbol은 표준
%Symbol.name%을 사용하는 곳에 @@name 형식의 표기법을 사용했습니다. 구체적으로 다음 이름이 사용되었습니다: @@asyncIterator, @@hasInstance, @@isConcatSpreadable, @@| 명세 이름 | [[Description]] | 값과 목적 |
|---|---|---|
| %Symbol.asyncDispose% |
|
객체에서 리소스 정리를 비동기적으로 수행하는 메서드입니다. 포함하는 스코프의 평가가 완료될 때 AsyncDisposableStack 객체와 await using 선언에서 호출됩니다.
|
| %Symbol.asyncIterator% |
|
객체의 기본 비동기 이터레이터를 반환하는 메서드입니다. for-await-of 문의 의미론에서 호출됩니다.
|
| %Symbol.dispose% |
|
객체에서 명시적인 리소스 정리를 수행하는 메서드입니다. 포함하는 스코프의 평가가 완료될 때 DisposableStack 객체, AsyncDisposableStack 객체 및 using 선언에서 호출됩니다.
|
| %Symbol.hasInstance% |
|
instanceof 연산자의 의미론에서 호출됩니다.
|
| %Symbol.isConcatSpreadable% |
|
값이 true이면 Array.prototype.concat |
| %Symbol.iterator% |
|
객체의 기본 이터레이터를 반환하는 메서드입니다. for-of 문의 의미론에서 호출됩니다. |
| %Symbol.match% |
|
정규 표현식을 문자열과 일치시키는 정규 표현식 메서드입니다. String.prototype.match |
| %Symbol.matchAll% |
|
문자열에 대한 정규 표현식의 일치 결과를 생성하는 이터레이터를 반환하는 정규 표현식 메서드입니다. String.prototype.matchAll |
| %Symbol.replace% |
|
문자열에서 일치한 String.prototype.replace |
| %Symbol.search% |
|
문자열에서 정규 표현식과 일치하는 인덱스를 반환하는 정규 표현식 메서드입니다. String.prototype.search |
| %Symbol.species% |
|
파생 객체를 생성하는 데 사용되는 |
| %Symbol.split% |
|
정규 표현식과 일치하는 인덱스에서 문자열을 분할하는 정규 표현식 메서드입니다. String.prototype.split |
| %Symbol.toPrimitive% |
|
객체를 대응하는 원시값으로 변환하는 메서드입니다. |
| %Symbol.toStringTag% |
|
객체의 기본 문자열 설명을 생성하는 데 사용되는 String 값 프로퍼티입니다. 내장 메서드 Object.prototype.toString |
| %Symbol.unscopables% |
|
자체 with 환경 바인딩에서 제외되는 |
ECMAScript에는 Number와 BigInt라는 두 개의 내장 숫자 타입이 있습니다. 다음
숫자 타입은 일반적으로 정밀도 손실이나 잘림 없이 서로 변환할 수 없으므로 ECMAScript 언어는 이러한 타입 사이에 암묵적 변환을 제공하지 않습니다. 다른 타입을 요구하는 함수를 호출할 때 타입을 변환하려면 프로그래머가 Number 및 BigInt 함수를 명시적으로 호출해야 합니다.
ECMAScript 초판과 이후 판에서는 특정 연산자에 대해 정밀도 손실이나 잘림이 발생할 수 있는 암묵적 숫자 변환을 제공해 왔습니다. 이러한
Number 타입은 정확히 18,437,736,874,454,810,627개(즉, NaN에 의해 생성된다는 점에 유의하십시오.) 일부 구현에서는 외부 코드가 다양한 NaN 값 간의 차이를 감지할 수 있지만, 이러한 동작은 구현 정의입니다. ECMAScript 코드에서는 모든
+Infinity(또는 단순히 Infinity)와 -Infinity에 의해 생성된다는 점에 유의하십시오.)
나머지 18,437,736,874,454,810,624개(즉,
+0(또는 단순히 0)과 -0에 의해 생성된다는 점에 유의하십시오.)
18,437,736,874,454,810,622개(즉,
그중 18,428,729,675,200,069,632개(즉,
여기서 s는 1 또는 -1이고, m은 252(포함)부터 253(제외)까지의
나머지 9,007,199,254,740,990개(즉,
여기서 s는 1 또는 -1이고, m은 0(제외)부터 252(제외)까지의
크기가 253 이하인 모든 양의
이 명세에서 x가 정확한 실수의 수학적 양(π와 같은 무리수일 수도 있음)을 나타낼 때 “x에 대한 Number 값”이라는 구문은 다음 방식으로 선택된
+∞에 대한
일부 ECMAScript 연산자는
base가 ** exponent 결과는
유한 정밀도 곱셈은 교환법칙을 만족하지만 항상 결합법칙을 만족하는 것은 아닙니다.
C와 C++에서 나머지 연산자는
% 연산자가 계산하는 부동소수점 나머지 연산의 결과는 %가 Java의 유한 정밀도 덧셈은 교환법칙을 만족하지만 항상 결합법칙을 만족하는 것은 아닙니다.
x - y는 항상 x + (-y)와 같은 결과를 생성합니다.
&, ^ 또는 |)), x (Number) 및 y (Number). 반환값:
&이면,AND 연산을 적용한 결과로 둡니다.^이면,XOR(배타적 OR) 연산을 적용한 결과로 둡니다.|입니다.OR(포괄적 OR) 연산을 적용한 결과로 둡니다.&, x, y)를 반환합니다.^, x, y)를 반환합니다.|, x, y)를 반환합니다.1.2e+3과 같은 과학적 E 표기법을 사용하여 표현됩니다.위 규칙에서 요구하는 것보다 더 정확한 변환을 제공하는 구현체에는 다음과 같은
ECMAScript 구현자는 부동소수점 수의 이진-십진 변환을 위해 David M. Gay가 작성한 다음 논문과 코드를 유용하게 활용할 수 있습니다:
Gay, David M. 정확하게 반올림된 이진-십진 및 십진-이진 변환. Numerical Analysis, Manuscript 90-10. AT&T Bell Laboratories (Murray Hill, New Jersey). 30 November 1990. 다음에서 이용할 수 있습니다
https://ampl.com/_archive/first-website/REFS/rounding.pdf. 관련 코드는 다음에서 이용할 수 있습니다
http://netlib.sandia.gov/fp/dtoa.c 및
http://netlib.sandia.gov/fp/g_fmt.c이며 다양한 netlib 미러 사이트에서도 찾을 수 있습니다.
BigInt 타입은 정숫값을 나타냅니다. 값의 크기는 임의적일 수 있으며 특정 비트 너비로 제한되지 않습니다. 일반적으로 달리 명시되지 않는 한 연산은 수학적으로 정확한 결과를 반환하도록 설계됩니다. 이항 연산에서 BigInt는 2의 보수 이진 문자열처럼 동작하며, 음수는 왼쪽으로 무한히 비트가 설정된 것으로 취급됩니다.
&, ^ 또는 |)), x (BigInt) 및 y (BigInt). 반환값: BigInt. 호출되면 다음 단계를 수행한다.
&이면,AND 연산을 적용한 결과로 둡니다.^이면,XOR(배타적 OR) 연산을 적용한 결과로 둡니다.|입니다.OR(포괄적 OR) 연산을 적용한 결과로 둡니다.&이면,^이면,&, x, y)를 반환합니다.^, x, y)를 반환합니다.|, x, y)를 반환합니다.간단히 “Object”라고도 하는 Object 타입의 각 인스턴스는 프로퍼티의 컬렉션을 나타냅니다. 각 프로퍼티는 데이터 프로퍼티 또는 접근자 프로퍼티입니다:
객체의 프로퍼티는
정수 인덱스는
논리적으로 모든 객체는 프로퍼티의 컬렉션이지만, 프로퍼티에 접근하고 조작하는 의미론이 서로 다른 여러 형태의 객체가 있습니다. 여러 형태의 객체에 대한 정의는
또한 일부 객체는 호출할 수 있습니다. 이러한 객체를 함수 또는
속성은
| 속성 이름 | 이 속성이 존재하는 프로퍼티 타입 | 값 영역 | 기본값 | 설명 |
|---|---|---|---|---|
| [[Value]] |
|
|
|
프로퍼티에 get 접근하여 가져오는 값입니다. |
| [[Writable]] |
|
Boolean |
|
|
| [[Getter]] |
|
|
|
값이 |
| [[Setter]] |
|
|
|
값이 |
| [[Enumerable]] |
|
Boolean |
|
|
| [[Configurable]] |
|
Boolean |
|
|
ECMAScript에서 객체의 실제 의미론은 내부 메서드라고 하는 알고리즘을 통해 명시됩니다. ECMAScript 엔진의 각 객체에는 해당 객체의 런타임 동작을 정의하는 내부 메서드 집합이 연결되어 있습니다. 이러한 내부 메서드는 ECMAScript 언어의 일부가 아닙니다. 이 명세에서는 오직 설명을 목적으로 정의합니다. 그러나 ECMAScript 구현체의 각 객체는 해당 객체와 연결된 내부 메서드가 명시하는 대로 동작해야 합니다. 이를 정확히 어떤 방식으로 달성하는지는 구현체가 결정합니다.
내부 메서드 이름은 다형적입니다. 이는 공통 내부 메서드 이름을 서로 다른 객체 값에 대해 호출할 때 서로 다른 알고리즘을 수행할 수 있음을 의미합니다. 내부 메서드가 호출되는 실제 객체를 호출의 “대상”이라고 합니다. 런타임에 알고리즘 구현이 객체가 지원하지 않는 내부 메서드를 사용하려 하면
내부 슬롯은 객체, Symbol 또는
모든 객체에는
이 명세에서 내부 메서드와 내부 슬롯은 이중 대괄호 [[ ]]로 둘러싼 이름으로 식별됩니다.
일반 객체는 다음 기준을 모두 만족하는 객체입니다:
특수 객체는
이 명세는 객체의 내부 메서드를 기준으로 서로 다른 종류의
내부 메서드는 매개변수 외에도 항상 메서드 호출의 대상인 객체에 접근할 수 있습니다.
내부 메서드는 암묵적으로
| 내부 메서드 | 설명 | 정의 |
|---|---|---|
| [[GetPrototypeOf]] ( ) | 내부 메서드 [[GetPrototypeOf]]. 인수 없음. 반환값: Object 또는 |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[SetPrototypeOf]] ( proto ) | 내부 메서드 [[SetPrototypeOf]]. 인수 proto ((Object 또는 |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[IsExtensible]] ( ) | 내부 메서드 [[IsExtensible]]. 인수 없음. 반환값: Boolean을 |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[PreventExtensions]] ( ) | 내부 메서드 [[PreventExtensions]]. 인수 없음. 반환값: Boolean을 |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[GetOwnProperty]] ( propertyKey ) | 내부 메서드 [[GetOwnProperty]]. 인수 propertyKey ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[DefineOwnProperty]] ( propertyKey, propertyDesc ) | 내부 메서드 [[DefineOwnProperty]]. 인수 propertyKey ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[HasProperty]] ( propertyKey ) | 내부 메서드 [[HasProperty]]. 인수 propertyKey ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[Get]] ( propertyKey, receiver ) | 내부 메서드 [[Get]]. 인수 propertyKey ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[Set]] ( propertyKey, value, receiver ) | 내부 메서드 [[Set]]. 인수 propertyKey ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[Delete]] ( propertyKey ) | 내부 메서드 [[Delete]]. 인수 propertyKey ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[OwnPropertyKeys]] ( ) | 내부 메서드 [[OwnPropertyKeys]]. 인수 없음. 반환값: ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| 내부 메서드 | 설명 | 정의 |
|---|---|---|
| [[Call]] ( thisArg, argList ) | 내부 메서드 [[Call]]. 인수 thisArg ( |
이 명세에서는 다음 타입에 정의되어 있으며, |
| [[Construct]] ( argList, newTarget ) | 내부 메서드 [[Construct]]. 인수 argList ( new 연산자 또는 super 호출을 통해 호출됩니다. 내부 메서드의 첫 번째 인수는 super 호출의 인수를 요소로 갖는 new 연산자가 적용된 객체입니다. 이 내부 메서드를 구현하는 객체를 |
이 명세에서는 다음 타입에 정의되어 있으며, |
ECMAScript 엔진의 Object 내부 메서드는 아래에 명시된 불변 조건 목록을 준수해야 합니다. 일반 ECMAScript Object와 이 명세의 모든 표준
구현체가 제공하는 모든
구현체는 불변 조건을 강제하지 않은 채 필수 내부 메서드의 기능을 구현하는 대체 인터페이스를 제공하는 등의 방법으로 이러한 불변 조건을 우회할 수 있게 해서는 안 됩니다.
모든 내부 메서드가 반환하는 값은 다음 중 하나인
내부 메서드는
세 번째 불변 조건의 결과로, 프로퍼티가
잘 알려진 내재 객체는 이 명세의 알고리즘에서 명시적으로 참조되며 일반적으로
이 명세에서 %name%과 같은 참조는 현재
| 내재 이름 | 전역 이름 | ECMAScript 언어 연관 항목 |
|---|---|---|
|
|
|
AggregateError |
|
|
|
Array |
|
|
|
ArrayBuffer |
|
|
|
|
|
|
|
AsyncDisposableStack |
|
|
|
|
|
|
비동기 |
|
|
|
비동기 제너레이터 |
|
|
|
비동기 제너레이터 객체의 프로토타입 ( |
|
|
|
모든 표준 내장 비동기 이터레이터 객체가 간접적으로 상속하는 객체 | |
|
|
|
Atomics 객체 ( |
|
|
|
BigInt |
|
|
|
BigInt64Array |
|
|
|
BigUint64Array |
|
|
|
Boolean |
|
|
|
DataView |
|
|
|
Date |
|
|
|
decodeURI 함수 ( |
|
|
|
decodeURIComponent 함수 ( |
|
|
|
DisposableStack |
|
|
|
encodeURI 함수 ( |
|
|
|
encodeURIComponent 함수 ( |
|
|
|
Error |
|
|
|
eval 함수 ( |
|
|
|
EvalError |
|
|
|
FinalizationRegistry |
|
|
|
Float16Array |
|
|
|
Float32Array |
|
|
|
Float64Array |
|
|
For-In |
|
|
|
|
Function |
|
|
제너레이터 |
|
|
|
제너레이터 객체의 프로토타입 ( |
|
|
|
|
Int8Array |
|
|
|
Int16Array |
|
|
|
Int32Array |
|
|
|
isFinite 함수 ( |
|
|
|
isNaN 함수 ( |
|
|
|
Iterator |
|
|
|
|
|
|
|
JSON 객체 ( |
|
|
|
Map |
|
|
|
|
|
|
|
Math 객체 ( |
|
|
|
Number |
|
|
|
Object |
|
|
|
parseFloat 함수 ( |
|
|
|
parseInt 함수 ( |
|
|
|
Promise |
|
|
|
Proxy |
|
|
|
RangeError |
|
|
|
ReferenceError |
|
|
|
Reflect 객체 ( |
|
|
|
RegExp |
|
|
|
|
|
|
|
Set |
|
|
|
|
|
|
|
SharedArrayBuffer |
|
|
|
String |
|
|
|
|
|
|
|
SuppressedError |
|
|
|
Symbol |
|
|
|
SyntaxError |
|
|
무조건 |
|
|
|
모든 typed Array |
|
|
|
|
TypeError |
|
|
|
Uint8Array |
|
|
|
Uint8ClampedArray |
|
|
|
Uint16Array |
|
|
|
Uint32Array |
|
|
|
URIError |
|
|
|
WeakMap |
|
|
|
WeakRef |
|
|
|
WeakSet |
|
|
Iterator.from이 반환하는 래핑된 이터레이터 객체의 프로토타입 ( |
명세 타입은 ECMAScript 언어 구성 요소와
Enum은 명세 내부에서 사용되며 ECMAScript 코드에서 직접 관찰할 수 없는 값입니다. Enum은
List 타입은 new 표현식, 함수 호출 및 단순한 순서 있는 값 목록이 필요한 기타 알고리즘에서 인수 목록의 평가(
알고리즘이 순서를 지정하지 않고 List의 요소를 반복 처리하는 경우, List 내의 요소 순서를 사용합니다.
이 명세에서는 표기상의 편의를 위해 리터럴 구문을 사용하여 새로운 List 값을 표현할 수 있습니다. 예를 들어 « 1, 2 »는 각각 특정 값으로 초기화된 두 개의 요소를 갖는 List 값을 정의합니다. 새로운 빈 List는 « »로 표현할 수 있습니다.
이 명세에서 “A, B, ...의 목록 연결”이라는 문구(각 인수는 비어 있을 수도 있는 List입니다)는 각 인수의 요소를 인수 순서대로 연결한 요소를 갖는 새로운 List 값을 나타냅니다.
String의 List에 적용할 때 “사전식 코드 단위 순서에 따라 정렬”이라는 문구는 더 짧은 문자열의 길이까지 각 코드 단위의 숫자 값으로 정렬하고, 모든 값이 같으면 더 짧은 문자열을 더 긴 문자열보다 앞에 정렬하는 것을 의미하며, 이는
Record 타입은 이 명세의 알고리즘 내에서 데이터 집합을 설명하는 데 사용됩니다. Record 타입 값은 하나 이상의 이름 있는 필드로 구성됩니다. 각 필드의 값은
이 명세에서는 표기상의 편의를 위해 객체 리터럴과 유사한 구문을 사용하여 Record를 표현할 수 있습니다. 예를 들어 { [[Field1]]: 42, [[Field2]]:
명세 텍스트와 알고리즘에서는 점 표기법을 사용하여 Record의 특정 필드를 참조할 수 있습니다. 예를 들어 R이 이전 단락에 표시된 Record라면 R.[[Field2]]는 “이름이 [[Field2]]인 R의 필드”를 나타내는 축약 표현입니다.
자주 사용되는 Record 필드 조합의 스키마에는 이름을 지정할 수 있으며, 해당 이름을 리터럴 Record의 접두사로 사용하여 설명 중인 특정 종류의 집합을 식별할 수 있습니다. 예: PropertyDescriptor { [[Value]]: 42, [[Writable]]:
Set 타입은
Relation 타입은 Set에 대한 제약 조건을 설명하는 데 사용됩니다. Relation 타입의 값은 해당 값 영역의 값들로 이루어진 순서쌍의 Set입니다. 예를 들어
엄격 부분 순서는 다음을 만족하는 Relation 값 R입니다.
R의 영역에 있는 모든 a, b 및 c에 대해:
위의 두 특성을 각각 비반사성과 추이성이라고 합니다.
엄격 전순서는 다음을 만족하는 Relation 값 R입니다.
R의 영역에 있는 모든 a, b 및 c에 대해:
위의 세 특성을 각각 전성, 비반사성 및 추이성이라고 합니다.
Completion Record 명세 타입은 비국소적인 제어 이전을 수행하는 문(break, continue, return 및 throw)의 동작과 같은 값 및 제어 흐름의 런타임 전파를 설명하는 데 사용됩니다.
Completion Record에는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[Type]] |
|
발생한 완료의 타입입니다. |
| [[Value]] |
|
생성된 값입니다. |
| [[Target]] |
String 또는 |
지시된 제어 이전의 대상 레이블입니다. |
Completion Record를 참조하기 위해 다음 축약 용어를 사용하는 경우가 있습니다.
이 명세에서 정의한 호출 가능 객체는 정상 완료 또는 throw 완료만 반환합니다. 그 밖의 종류의 Completion Record를 반환하는 것은 편집 오류로 간주됩니다.
Reference Record 타입은 delete, typeof, 할당 연산자, super
Reference Record는 해석된 이름 또는 (아직 해석되지 않았을 수도 있는) 프로퍼티 바인딩이며, 해당 필드는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[Base]] | 바인딩을 보유하는 값 또는 |
|
| [[ReferencedName]] | 바인딩의 이름입니다. [[Base]] 값이 |
|
| [[Strict]] | Boolean | |
| [[ThisValue]] | super |
이 명세에서는 Reference Record에 대해 연산하기 위해 다음
Property Descriptor 타입은 Object 프로퍼티 속성의 조작과 구체화를 설명하는 데 사용됩니다. Property Descriptor는 0개 이상의 필드를 갖는
Property Descriptor 값은 특정 필드의 존재 여부 또는 사용에 따라 데이터 Property Descriptor와 접근자 Property Descriptor로 더 분류할 수 있습니다. 데이터 Property Descriptor는 [[Value]] 또는 [[Writable]]이라는 이름의 필드를 하나라도 포함하는 Property Descriptor입니다. 접근자 Property Descriptor는 [[Getter]] 또는 [[Setter]]라는 이름의 필드를 하나라도 포함하는 Property Descriptor입니다. 모든 Property Descriptor에는 [[Enumerable]] 및 [[Configurable]]이라는 이름의 필드가 있을 수 있습니다. Property Descriptor 값은 데이터 Property Descriptor이면서 동시에 접근자 Property Descriptor일 수 없습니다. 그러나 둘 다 아닐 수는 있습니다(이 경우 일반 Property Descriptor입니다). 모든 필드가 채워진 Property Descriptor는 접근자 Property Descriptor 또는 데이터 Property Descriptor 중 하나이면서
이 명세에서는 Property Descriptor 값에 대해 연산하기 위해 다음
Abstract Closure 명세 타입은 알고리즘 단계와 값의 컬렉션을 함께 참조하는 데 사용됩니다. Abstract Closure는 메타 값이며 closure(arg1, arg2)와 같은 함수 적용 형식을 사용하여 호출합니다.
Abstract Closure를 생성하는 알고리즘 단계에서는 “capture” 동사 뒤에 별칭 목록을 사용하여 값을 캡처합니다. Abstract Closure가 생성되면 해당 시점에 각 별칭과 연결된 값을 캡처합니다. Abstract Closure가 호출될 때 수행할 알고리즘을 명시하는 단계에서는 캡처된 각 값을 캡처할 때 사용한 별칭으로 참조합니다.
Abstract Closure가
Abstract Closure는 다음 예에 표시된 것처럼 다른 알고리즘의 일부로 인라인 생성됩니다.
Data Block 명세 타입은 바이트 크기(8비트)의 숫자 값으로 이루어진 독립적이고 변경 가능한 시퀀스를 설명하는 데 사용됩니다. 바이트 값은 0부터 255까지의
이 명세에서는 표기상의 편의를 위해 배열과 유사한 구문을 사용하여 Data Block 값의 개별 바이트에 접근할 수 있습니다. 이 표기법은 Data Block 값을 0부터 시작하는 바이트의
여러
Shared Data Block의 의미론은
이 명세에서는 Data Block 값에 대해 연산하기 위해 다음
PrivateElement 타입은 private 클래스 필드, 메서드 및 접근자의 명세에서 사용되는
PrivateElement 타입의 값은
| 필드 이름 | 이 필드가 존재하는 [[Kind]] 필드의 값 | 값 | 의미 |
|---|---|---|---|
| [[Key]] | 전체 |
|
필드, 메서드 또는 접근자의 이름입니다. |
| [[Kind]] | 전체 |
|
요소의 종류입니다. |
| [[Value]] |
|
|
필드의 값입니다. |
| [[Getter]] |
|
|
비공개 접근자의 getter입니다. |
| [[Setter]] |
|
|
비공개 접근자의 setter입니다. |
ClassFieldDefinition 타입은 클래스 필드의 명세에서 사용하는
ClassFieldDefinition 타입의 값은
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[Name]] |
|
필드의 이름입니다. |
| [[Initializer]] |
ECMAScript |
필드의 이니셜라이저가 있는 경우 해당 이니셜라이저입니다. |
Private Name 명세 타입은 비공개 클래스 요소(필드, 메서드 또는 접근자)의 키를 나타내는 전역적으로 고유한 값(그 밖의 면에서 구별할 수 없더라도 다른 모든 Private Name과 서로 다른 값)을 설명하는 데 사용됩니다. 각 Private Name에는 String인 변경 불가능한 [[Description]] 내부 슬롯이 있습니다. Private Name은
ClassStaticBlockDefinition Record는 클래스 정적 초기화 블록의 실행 가능한 코드를 캡슐화하는 데 사용하는
ClassStaticBlockDefinition Record에는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[BodyFunction]] |
ECMAScript |
클래스의 정적 초기화 중에 호출할 |