?um/p1-90`이 명세 안의 알고리즘은 각각 associated type을 가진 값을 조작합니다. 가능한 값 타입은 정확히 이 절에서 정의된 것들입니다. 타입은 다시
ECMAScript language type은 ECMAScript 프로그래머가 ECMAScript 언어를 사용하여 직접 조작하는 값에 대응합니다. ECMAScript language type은 Undefined, Null, Boolean, String, Symbol, Number, BigInt, Object입니다. ECMAScript language value는 ECMAScript language type으로 특징지어지는 값입니다.
Undefined type은 정확히 하나의 값을 가지며, 이를
Null type은 정확히 하나의 값을 가지며, 이를
Boolean type은
String type은 0개 이상의 16-bit unsigned
String contents를 interpret하지 않는 ECMAScript operation은 추가 semantics를 적용하지 않습니다. String value를 interpret하는 operation은 각 element를 단일 UTF-16 code unit으로 취급합니다. 그러나 ECMAScript는 이러한 code unit의 값이나 관계에 제한이나 요구사항을 두지 않으므로, String contents를 UTF-16으로 encoded된 Unicode code point의 sequence로 추가 interpret하는 operation은 ill-formed subsequence를 고려해야 합니다. 이러한 operation은 numeric value가 0xD800부터 0xDBFF까지의
String.prototype.normalize 함수(String.prototype.localeCompare(
이 설계의 rationale은 String 구현을 가능한 한 simple하고 high-performing하게 유지하기 위한 것이었습니다.
이 명세에서 “A, B, ...의 string-concatenation”이라는 phrase(각 argument가 String value, code unit, 또는 code unit sequence인 경우)는 각 argument의 code unit을 (순서대로) concatenation한 code unit sequence를 가진 String value를 나타냅니다.
“inclusiveStart부터 exclusiveEnd까지의 string의 substring”이라는 phrase(string이 String value 또는 code unit sequence이고 inclusiveStart와 exclusiveEnd가
“ASCII word characters”라는 phrase는 Unicode Basic Latin block의 모든 letter와 number 및 U+005F(LOW LINE)만으로 구성된 다음 String value를 나타냅니다:
역사적 이유로, 이는 여러 algorithm에서 의미를 가집니다.
The abstract operation StringIndexOf takes arguments string (a String), searchValue (a String), and fromIndex (a non-negative
searchValue가 empty String이고 fromIndex ≤ string의 length이면, 이 알고리즘은 fromIndex를 반환합니다. empty String은 string 안의 모든 position에서, 마지막 code unit 뒤를 포함하여, 사실상 found됩니다.
fromIndex + searchValue의 length > string의 length이면, 이 알고리즘은 항상
The abstract operation StringLastIndexOf takes arguments string (a String), searchValue (a String), and fromIndex (a non-negative
searchValue가 empty String이면, 이 알고리즘은 fromIndex를 반환합니다. empty String은 string 안의 모든 position에서, 마지막 code unit 뒤를 포함하여, 사실상 found됩니다.
Symbol type은 Object property의 key로 사용할 수 있는 모든 non-String value의 집합입니다(
각 Symbol은 unique하고 immutable합니다.
각 Symbol은 값이 String 또는
Well-known symbol은 이 명세의 algorithm에서 명시적으로 참조되는 built-in Symbol value입니다. 보통 specification algorithm의 extension point 역할을 하는 value를 가진 property의 key로 사용됩니다. 달리 specified되지 않는 한, well-known symbol value는 모든
이 명세 안에서 well-known symbol은
%Symbol.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에는 두 built-in numeric type이 있습니다: Number와 BigInt. 다음 abstract operation은 이러한 numeric type 위에서 정의됩니다. “Result” column은 return type을 보여주며, operation의 일부 invocation이
numeric type은 일반적으로 precision loss 또는 truncation 없이 convert될 수 없으므로, ECMAScript 언어는 이러한 type 사이의 implicit conversion을 제공하지 않습니다. 다른 type을 요구하는 function을 호출할 때 type 간 convert를 하려면, 프로그래머는 Number와 BigInt function을 명시적으로 호출해야 합니다.
ECMAScript의 초판과 이후 판들은 특정 operator에 대해 precision을 잃거나
Number type은 정확히 18,437,736,874,454,810,627개(즉, NaN에 의해 생성됩니다.) 일부 implementation에서는 external code가 여러 NaN value 사이의 차이를 detect할 수 있을 수 있지만, 그러한 behaviour는
+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(inclusive)부터 253(exclusive)까지의
나머지 9,007,199,254,740,990개(즉,
여기서 s는 1 또는 -1이고, m은 0(exclusive)부터 252(exclusive)까지의
magnitude가 253보다 크지 않은 모든 positive 및 negative
이 명세에서 “x에 대한 Number value for”라는 phrase에서 x가 exact real mathematical quantity(π와 같은 irrational number일 수도 있음)를 나타낼 때, 이는 다음 방식으로 선택된 Number value를 의미합니다. Number type의 모든
+∞에 대한 Number value는
일부 ECMAScript operator는
The abstract operation Number::unaryMinus takes argument number (a Number) and returns a Number. It performs the following steps when called:
The abstract operation Number::bitwiseNOT takes argument number (a Number) and returns an
The abstract operation Number::exponentiate takes arguments base (a Number) and exponent (a Number) and returns a Number. base를 exponent power로 올린 결과를 나타내는
base가 ** exponent 결과는
The abstract operation Number::multiply takes arguments x (a Number) and y (a Number) and returns a Number.
The abstract operation Number::divide takes arguments x (a Number) and y (a Number) and returns a Number.
The abstract operation Number::remainder takes arguments numerator (a Number) and denominator (a Number) and returns a Number. numerator가 dividend이고 denominator가 divisor인 operand의 implied division에서 remainder를 산출합니다. It performs the following steps when called:
C와 C++에서 remainder operator는 integral operand만 accept합니다. ECMAScript에서는 floating-point operand도 accept합니다.
% operator로 계산되는 floating-point remainder operation의 결과는 %가 Java The abstract operation Number::add takes arguments x (a Number) and y (a Number) and returns a Number.
The abstract operation Number::subtract takes arguments x (a Number) and y (a Number) and returns a Number. subtraction을 수행하여 operand의 difference를 생성합니다. x는 minuend이고 y는 subtrahend입니다. It performs the following steps when called:
x - y는 항상 x + (-y)와 같은 결과를 생성합니다.
The abstract operation Number::leftShift takes arguments x (a Number) and y (a Number) and returns an
The abstract operation Number::signedRightShift takes arguments x (a Number) and y (a Number) and returns an
The abstract operation Number::unsignedRightShift takes arguments x (a Number) and y (a Number) and returns an
The abstract operation Number::lessThan takes arguments x (a Number) and y (a Number) and returns a Boolean or
The abstract operation Number::equal takes arguments x (a Number) and y (a Number) and returns a Boolean. It performs the following steps when called:
The abstract operation Number::sameValue takes arguments x (a Number) and y (a Number) and returns a Boolean. It performs the following steps when called:
The abstract operation Number::sameValueZero takes arguments x (a Number) and y (a Number) and returns a Boolean. It performs the following steps when called:
The abstract operation NumberBitwiseOp takes arguments op (&, ^, or |), x (a Number), and y (a Number) and returns an
&이면, 다음을 수행한다.^이면, 다음을 수행한다.|이다.The abstract operation Number::bitwiseAND takes arguments x (a Number) and y (a Number) and returns an
&, x, y)를 반환한다.The abstract operation Number::bitwiseXOR takes arguments x (a Number) and y (a Number) and returns an
^, x, y)를 반환한다.The abstract operation Number::bitwiseOR takes arguments x (a Number) and y (a Number) and returns an
|, x, y)를 반환한다.The abstract operation Number::toString takes arguments x (a Number) and radix (an
1.2e+3과 같은 scientific E notation을 사용하여 represented된다.위 규칙이 요구하는 것보다 더 정확한 conversion을 제공하는 implementation의 경우, step
ECMAScript implementer는 floating-point number의 binary-to-decimal conversion에 대해 David M. Gay가 작성한 논문과 code가 유용할 수 있습니다:
Gay, David M. Correctly Rounded Binary-Decimal and Decimal-Binary Conversions. Numerical Analysis, Manuscript 90-10. AT&T Bell Laboratories (Murray Hill, New Jersey). 30 November 1990. Available as
https://ampl.com/_archive/first-website/REFS/rounding.pdf. Associated code available as
http://netlib.sandia.gov/fp/dtoa.c and as
http://netlib.sandia.gov/fp/g_fmt.c and may also be found at the various netlib mirror sites.
BigInt type은
The abstract operation BigInt::unaryMinus takes argument bigint (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::bitwiseNOT takes argument bigint (a BigInt) and returns a BigInt. bigint의 one's complement를 반환합니다. It performs the following steps when called:
The abstract operation BigInt::exponentiate takes arguments base (a BigInt) and exponent (a BigInt) and returns either a
The abstract operation BigInt::multiply takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::divide takes arguments x (a BigInt) and y (a BigInt) and returns either a
The abstract operation BigInt::remainder takes arguments numerator (a BigInt) and denominator (a BigInt) and returns either a
The abstract operation BigInt::add takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::subtract takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::leftShift takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::signedRightShift takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::unsignedRightShift takes arguments x (a BigInt) and y (a BigInt) and returns a
The abstract operation BigInt::lessThan takes arguments x (a BigInt) and y (a BigInt) and returns a Boolean. It performs the following steps when called:
The abstract operation BigInt::equal takes arguments x (a BigInt) and y (a BigInt) and returns a Boolean. It performs the following steps when called:
The abstract operation BinaryAnd takes arguments x (0 or 1) and y (0 or 1) and returns 0 or 1. It performs the following steps when called:
The abstract operation BinaryOr takes arguments x (0 or 1) and y (0 or 1) and returns 0 or 1. It performs the following steps when called:
The abstract operation BinaryXor takes arguments x (0 or 1) and y (0 or 1) and returns 0 or 1. It performs the following steps when called:
The abstract operation BigIntBitwiseOp takes arguments op (&, ^, or |), x (a BigInt), and y (a BigInt) and returns a BigInt. It performs the following steps when called:
&이면, 다음을 수행한다.|이면, 다음을 수행한다.The abstract operation BigInt::bitwiseAND takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
&, x, y)를 반환한다.The abstract operation BigInt::bitwiseXOR takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
^, x, y)를 반환한다.The abstract operation BigInt::bitwiseOR takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
|, x, y)를 반환한다.The abstract operation BigInt::toString takes arguments x (a BigInt) and radix (an
Object type의 각 instance는 간단히 “an Object”라고도 하며, property의 collection을 나타냅니다. 각 property는 data property 또는 accessor property입니다:
object의 property는
integer index는
모든 non-negative
모든 object는 논리적으로 property의 collection이지만, property에 access하고 manipulate하는 semantics가 서로 다른 여러 form의 object가 있습니다. object의 여러 form에 대한 정의는
또한 일부 object는 callable합니다. 이러한 object는 function 또는
Attribute는
| Attribute Name | 그것이 present하는 property의 type | Value Domain | Default Value | Description |
|---|---|---|---|---|
| [[Value]] |
|
|
|
property의 get access에 의해 retrieved되는 value입니다. |
| [[Writable]] |
|
Boolean |
|
|
| [[Get]] |
|
Object 또는 |
|
value가 Object이면 |
| [[Set]] |
|
Object 또는 |
|
value가 Object이면 |
| [[Enumerable]] |
|
Boolean |
|
|
| [[Configurable]] |
|
Boolean |
|
|
ECMAScript에서 object의 실제 semantics는 internal methods라고 불리는 algorithm을 통해 specified됩니다. ECMAScript engine의 각 object는 그 runtime behaviour를 정의하는 internal method의 set과 associated됩니다. 이러한 internal method는 ECMAScript language의 일부가 아닙니다. 이들은 순전히 expository purpose를 위해 이 명세에서 정의됩니다. 그러나 ECMAScript implementation 안의 각 object는 자신과 associated된 internal method에 의해 specified된 대로 behave해야 합니다. 이를 달성하는 정확한 방식은 implementation에 의해 결정됩니다.
Internal method name은 polymorphic입니다. 이는 common internal method name이 서로 다른 object value에서 invoked될 때 서로 다른 algorithm을 수행할 수 있음을 의미합니다. internal method가 invoked되는 실제 object는 invocation의 “target”입니다. runtime에 algorithm의 implementation이 object가 support하지 않는 internal method를 사용하려고 하면,
Internal slot은 object, Symbol 또는
모든 object는 [[PrivateElements]]라는 internal slot을 가지며, 이는
Internal method와 internal slot은 이 명세 안에서 double square bracket [[ ]]으로 둘러싸인 name을 사용하여 식별됩니다.
ordinary object는 다음 criteria를 모두 만족하는 object입니다:
exotic object는
이 명세는 object의 internal method에 의해 여러 종류의
parameter 외에도, internal method는 항상 method invocation의 target인 object에 access할 수 있습니다.
internal method는
| Internal Method | Signature | Description |
|---|---|---|
| [[GetPrototypeOf]] | ( ) → Object | Null |
이 object에 대해 inherited property를 제공하는 object를 결정합니다. |
| [[SetPrototypeOf]] | (Object | Null) → Boolean |
inherited property를 제공하는 다른 object와 이 object를 associate합니다. |
| [[IsExtensible]] | ( ) → Boolean | 이 object에 additional property를 add하는 것이 permitted되는지 결정합니다. |
| [[PreventExtensions]] | ( ) → Boolean |
new property가 이 object에 added될 수 있는지 control합니다. operation이 successful이면 |
| [[GetOwnProperty]] |
(propertyKey) → Undefined | |
key가 propertyKey인 이 object의 own property에 대한 |
| [[DefineOwnProperty]] | (propertyKey, propertyDesc) → Boolean |
key가 propertyKey인 own property가 propertyDesc가 설명하는 state를 가지도록 create하거나 alter합니다. 해당 property가 successfully created/updated되었으면 |
| [[HasProperty]] | (propertyKey) → Boolean | 이 object가 이미 key가 propertyKey인 own 또는 inherited property를 가지고 있는지 나타내는 Boolean value를 반환합니다. |
| [[Get]] | (propertyKey, receiver) → any |
이 object에서 key가 propertyKey인 property의 value를 반환합니다. property value를 retrieve하기 위해 ECMAScript code가 실행되어야 하는 경우, code를 evaluating할 때 receiver가 |
| [[Set]] | (propertyKey, value, receiver) → Boolean |
key가 propertyKey인 property의 value를 value로 set합니다. property value를 set하기 위해 ECMAScript code가 실행되어야 하는 경우, code를 evaluating할 때 receiver가 |
| [[Delete]] | (propertyKey) → Boolean |
key가 propertyKey인 own property를 이 object에서 remove합니다. property가 deleted되지 않았고 여전히 present하면 |
| [[OwnPropertyKeys]] |
( ) → |
element가 object의 모든 own |
| Internal Method | Signature | Description |
|---|---|---|
| [[Call]] |
(any, a |
이 object와 associated된 code를 executes합니다. function call expression을 통해 invoked됩니다. internal method에 대한 argument는 |
| [[Construct]] |
(a |
object를 creates합니다. new operator 또는 super call을 통해 invoked됩니다. internal method의 첫 번째 argument는 super call의 argument를 element로 하는 new operator가 initially applied된 object입니다. 이 internal method를 implement하는 object는 |
ECMAScript engine의 Object의 Internal Method는 아래에 specified된 invariant list를 conform해야 합니다. Ordinary ECMAScript Object뿐 아니라 이 명세의 모든 standard
implementation provided
implementation은 essential internal method의 functionality를 implement하면서 invariant를 enforce하지 않는 alternative interface를 제공하는 등의 어떠한 방식으로도 이러한 invariant가 circumvent되도록 허용해서는 안 됩니다.
어떤 internal method가 반환하는 value도 다음 중 하나를 가지는
internal method는
object의 prototype chain은
세 번째 invariant의 consequence로, property가
Well-known intrinsic은 이 명세의 algorithm에서 명시적으로 referenced되는 built-in object이며, 보통
이 명세 안에서 %name% 같은 reference는 current
| 내재 이름 | 전역 이름 | ECMAScript 언어 연관 |
|---|---|---|
|
|
|
AggregateError |
|
|
|
Array |
|
|
|
ArrayBuffer |
|
|
|
|
|
|
|
AsyncDisposableStack |
|
|
Async-from-Sync |
|
|
|
async 함수 객체의 |
|
|
|
async generator 함수 객체의 |
|
|
|
async generator 객체의 프로토타입 ( |
|
|
|
모든 표준 내장 |
|
|
|
|
Atomics 객체 ( |
|
|
|
BigInt |
|
|
|
BigInt64Array |
|
|
|
BigUint64Array |
|
|
|
Boolean |
|
|
|
DataView |
|
|
|
Date |
|
|
|
decodeURI 함수 ( |
|
|
|
decodeURIComponent 함수 ( |
|
|
|
DisposableStack |
|
|
|
encodeURI 함수 ( |
|
|
|
encodeURIComponent 함수 ( |
|
|
|
Error |
|
|
|
eval 함수 ( |
|
|
|
EvalError |
|
|
|
FinalizationRegistry |
|
|
|
Float16Array |
|
|
|
Float32Array |
|
|
|
Float64Array |
|
|
|
|
|
|
|
Function |
|
|
generator 함수 객체의 |
|
|
|
generator 객체의 프로토타입 ( |
|
|
|
|
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이 반환하는 감싸진 |
specification type은 ECMAScript language construct와
Enum은 specification 내부의 value이며 ECMAScript code에서 직접 observable하지 않습니다. Enum은
List type은 new expression, function call, 그리고 simple ordered list of values가 필요한 다른 algorithm에서 argument list(
algorithm이 order를 지정하지 않고 List의 element를 iterate하면, 사용되는 order는 List 안의 element order입니다.
이 명세 안에서 notation 편의를 위해 literal syntax를 사용하여 새 List value를 표현할 수 있습니다. 예를 들어 « 1, 2 »는 각각 특정 value로 initialized된 두 element를 가진 List value를 정의합니다. 새 empty List는 « »로 표현할 수 있습니다.
이 명세에서 “A, B, ...의 list-concatenation”이라는 phrase(각 argument가 possibly empty List인 경우)는 각 argument의 element를 (순서대로) concatenation한 element를 가진 새 List value를 나타냅니다.
List of Strings에 적용될 때, “lexicographic code unit order에 따라 sorted”라는 phrase는 더 짧은 string의 length까지 각 code unit의 numeric value로 sorting하고, 모두 같으면 더 짧은 string을 더 긴 string보다 앞에 sorting함을 의미하며, 이는 abstract operation
Record type은 이 명세의 algorithm 안에서 data aggregation을 설명하는 데 사용됩니다. Record type value는 하나 이상의 named field로 구성됩니다. 각 field의 value는
이 명세 안에서 notation 편의를 위해 object literal-like syntax를 사용하여 Record value를 표현할 수 있습니다. 예를 들어 { [[Field1]]: 42, [[Field2]]:
specification text와 algorithm에서 dot notation은 Record value의 특정 field를 refer하는 데 사용될 수 있습니다. 예를 들어 R이 이전 paragraph에 표시된 record이면 R.[[Field2]]는 “[[Field2]]라는 name을 가진 R의 field”에 대한 shorthand입니다.
일반적으로 사용되는 Record field combination에 대한 schema에는 name이 붙을 수 있으며, 그 name은 literal Record value의 prefix로 사용되어 설명되는 aggregation의 특정 kind를 identify할 수 있습니다. 예: PropertyDescriptor { [[Value]]: 42, [[Writable]]:
Set type은
Relation type은 Set에 대한 constraint를 설명하는 데 사용됩니다. Relation type의 value는 그 value domain에서 온 ordered pair of values의 Set입니다. 예를 들어
strict partial order는 다음을 만족하는 Relation value R입니다.
R의 domain 안의 모든 a, b, c에 대해:
위의 두 property는 각각 irreflexivity와 transitivity라고 불립니다.
strict total order는 다음을 만족하는 Relation value R입니다.
R의 domain 안의 모든 a, b, c에 대해:
위의 세 property는 각각 totality, irreflexivity, transitivity라고 불립니다.
Completion Record specification type은 nonlocal transfer of control을 수행하는 statement(break, continue, return, throw)의 behaviour와 같은 value 및 control flow의 runtime propagation을 설명하는 데 사용됩니다.
Completion Record는
| Field Name | Value | Meaning |
|---|---|---|
| [[Type]] |
|
발생한 completion의 type입니다. |
| [[Value]] |
|
생성된 value입니다. |
| [[Target]] |
String 또는 |
directed control transfer를 위한 target label입니다. |
다음 shorthand term은 때때로 Completion Record를 refer하는 데 사용됩니다.
이 명세에서 정의된 callable object는 normal completion 또는 throw completion만 반환합니다. 다른 종류의 Completion Record를 반환하는 것은 editorial error로 간주됩니다.
The abstract operation NormalCompletion takes argument value (any value except a
The abstract operation ThrowCompletion takes argument value (an
The abstract operation ReturnCompletion takes argument value (an
The abstract operation UpdateEmpty takes arguments completionRecord (a
Reference Record type은 delete, typeof, assignment operator, super
Reference Record는 resolved name 또는 (possibly not-yet-resolved) property binding입니다. 그 field는
| Field Name | Value | Meaning |
|---|---|---|
| [[Base]] | binding을 hold하는 value 또는 |
|
| [[ReferencedName]] | binding의 name입니다. [[Base]] value가 |
|
| [[Strict]] | Boolean | |
| [[ThisValue]] | super |
다음 abstract operation은 Reference Record를 대상으로 operate하기 위해 이 명세에서 사용됩니다:
The abstract operation IsPropertyReference takes argument refRecord (a
The abstract operation IsUnresolvableReference takes argument refRecord (a
The abstract operation IsSuperReference takes argument refRecord (a
The abstract operation IsPrivateReference takes argument refRecord (a
The abstract operation GetValue takes argument refRecord (a
step
The abstract operation PutValue takes arguments refRecord (a
step
The abstract operation GetThisValue takes argument refRecord (a
The abstract operation InitializeReferencedBinding takes arguments refRecord (a
The abstract operation MakePrivateReference takes arguments baseValue (an
Property Descriptor type은 Object property attribute의 manipulation과 reification을 설명하는 데 사용됩니다. Property Descriptor는 zero or more field를 가진
Property Descriptor value는 특정 field의 existence 또는 use에 따라 data Property Descriptor와 accessor Property Descriptor로 further classified될 수 있습니다. data Property Descriptor는 [[Value]] 또는 [[Writable]]이라는 이름의 field 중 하나를 포함하는 것입니다. accessor Property Descriptor는 [[Get]] 또는 [[Set]]이라는 이름의 field 중 하나를 포함하는 것입니다. 어떤 Property Descriptor든 [[Enumerable]] 및 [[Configurable]]이라는 이름의 field를 가질 수 있습니다. Property Descriptor value는 data Property Descriptor이면서 동시에 accessor Property Descriptor일 수 없습니다. 그러나 둘 다 아닐 수는 있습니다(이 경우 generic Property Descriptor입니다). fully populated Property Descriptor는 accessor Property Descriptor 또는 data Property Descriptor이며,
다음 abstract operation은 Property Descriptor value를 대상으로 operate하기 위해 이 명세에서 사용됩니다:
The abstract operation IsAccessorDescriptor takes argument propertyDesc (a
The abstract operation IsDataDescriptor takes argument propertyDesc (a
The abstract operation IsGenericDescriptor takes argument propertyDesc (a
The abstract operation FromPropertyDescriptor takes argument propertyDesc (a
The abstract operation ToPropertyDescriptor takes argument obj (an
The abstract operation CompletePropertyDescriptor takes argument propertyDesc (a
Abstract Closure specification type은 algorithm step과 value collection을 함께 refer하는 데 사용됩니다. Abstract Closure는 meta-value이며 closure(arg1, arg2)와 같은 function application style을 사용하여 invoked됩니다. abstract operation처럼 invocation은 Abstract Closure가 설명하는 algorithm step을 수행합니다.
Abstract Closure를 생성하는 algorithm step에서 value는 “capture”라는 verb 뒤에 alias list를 사용하여 captured됩니다. Abstract Closure가 생성되면, 그 시점에 각 alias와 associated된 value를 capture합니다. Abstract Closure가 called될 때 수행될 algorithm을 specify하는 step에서 각 captured value는 value를 capture하는 데 사용된 alias로 referred됩니다.
Abstract Closure가
Abstract Closure는 다른 algorithm의 일부로 inline 생성되며, 다음 example에 표시되어 있습니다.
Data Block specification type은 byte-sized(8 bit) numeric value의 distinct하고 mutable한 sequence를 설명하는 데 사용됩니다. byte value는 0부터 255까지의
이 명세 안에서 notation 편의를 위해 array-like syntax를 사용하여 Data Block value의 individual byte에 access할 수 있습니다. 이 notation은 Data Block value를 byte의 0-based
여러
Shared Data Block의 semantics는
다음 abstract operation은 Data Block value를 대상으로 operate하기 위해 이 명세에서 사용됩니다:
The abstract operation CreateByteDataBlock takes argument size (a non-negative
The abstract operation CreateSharedByteDataBlock takes argument size (a non-negative
The abstract operation CopyDataBlockBytes takes arguments toBlock (a
PrivateElement 타입은 비공개 클래스 필드, 메서드 및 접근자 명세에서 사용되는
PrivateElement 타입의 값은
| Field Name | 그것이 present하는 [[Kind]] field의 Values | Value | Meaning |
|---|---|---|---|
| [[Key]] | All |
|
field, method, 또는 accessor의 name입니다. |
| [[Kind]] | All |
|
element의 kind입니다. |
| [[Value]] |
|
|
field의 value입니다. |
| [[Get]] |
|
|
private accessor의 getter입니다. |
| [[Set]] |
|
|
private accessor의 setter입니다. |
ClassFieldDefinition 타입은 클래스 필드 명세에서 사용되는
ClassFieldDefinition 타입의 값은
| Field Name | Value | Meaning |
|---|---|---|
| [[Name]] |
|
field의 name입니다. |
| [[Initializer]] |
ECMAScript |
field의 initializer입니다(있다면). |
Private Name specification type은 private class element(field, method, accessor)의 key를 나타내는 globally unique value(그 밖에는 indistinguishable하더라도 다른 어떤 Private Name과도 다른 value)를 설명하는 데 사용됩니다. 각 Private Name은 String인 immutable [[Description]] internal slot을 가집니다. Private Name은
ClassStaticBlockDefinition Record는 class static initialization block을 위한 executable code를 encapsulate하는 데 사용되는
ClassStaticBlockDefinition Record는
| Field Name | Value | Meaning |
|---|---|---|
| [[BodyFunction]] |
ECMAScript |
class의 static initialization 중에 called될 |