이러한 연산은 ECMAScript 언어의 일부가 아닙니다. ECMAScript 언어의 의미론을 명시하는 데 도움을 주기 위해서만 여기에서 정의합니다. 그 밖의 보다 특수한 추상 연산 은 이 명세 전반에 걸쳐 정의되어 있습니다.
7.1 타입 변환
ECMAScript 언어는 필요에 따라 자동 타입 변환을 암묵적으로 수행합니다. 특정 구성 요소의 의미론을 명확히 하기 위해 변환 추상 연산 의 집합을 정의하는 것이 유용합니다. 변환 추상 연산 은 다형적이며 모든 ECMAScript 언어 타입 의 값을 받을 수 있습니다. 그러나 이러한 연산에는 다른 명세 타입을 사용하지 않습니다.
BigInt 타입 에는 ECMAScript 언어의 암묵적 변환이 없습니다. 프로그래머는 다른 타입의 값을 변환하려면 BigInt를 명시적으로 호출해야 합니다.
7.1.1 ToPrimitive ( input [ , preferredType ] )
추상 연산 ToPrimitive. 인수 input (ECMAScript 언어 값 ) 및 선택적 인수 preferredType ((string 또는 number )). 반환값: (정상 완료 (값: ECMAScript 언어 값 ) 또는 throw 완료 ). input 인수를 Object가 아닌 타입으로 변환합니다. 객체가 둘 이상의 원시 타입으로 변환될 수 있는 경우, 선택적 힌트 preferredType 을 사용하여 해당 타입을 우선할 수 있습니다. 호출되면 다음 단계를 수행한다.
input 이 Object이면, 다음을 수행합니다.exoticToPrimitive 를 ? GetMethod (input , %Symbol.toPrimitive% )로 둡니다.exoticToPrimitive 가 undefined 가 아니면, 다음을 수행합니다.preferredType 이 존재하지 않으면, 다음을 수행합니다.hint 를 "default" 로 둡니다.그렇지 않고 preferredType 이 string 이면, 다음을 수행합니다.hint 를 "string" 으로 둡니다. 그렇지 않으면,단언 : preferredType 은 number 입니다.hint 를 "number" 로 둡니다. result 를 ? Call (exoticToPrimitive , input , « hint »)로 둡니다.result 가 Object가 아니면, result 를 반환합니다.TypeError 예외를 던집니다.preferredType 이 존재하지 않으면, preferredType 을 number 로 설정합니다.? OrdinaryToPrimitive (input , preferredType )를 반환합니다. input 을 반환합니다.
참고
힌트 없이 ToPrimitive를 호출하면 일반적으로 힌트가 number 인 것처럼 동작합니다. 그러나 객체는 %Symbol.toPrimitive% 메서드를 정의하여 이 동작을 재정의할 수 있습니다. 이 명세에 정의된 객체 중 기본 ToPrimitive 동작을 재정의하는 것은 Date(21.4.4.45 참조)와 Symbol 객체(20.4.3.5 참조)뿐입니다. Date는 힌트가 없는 경우를 힌트가 string 인 것처럼 취급합니다.
7.1.1.1 OrdinaryToPrimitive ( obj , hint )
추상 연산 OrdinaryToPrimitive. 인수 obj (Object) 및 hint (string 또는 number ). 반환값: ECMAScript 언어 값 을 포함하는 정상 완료 또는 throw 완료 . 호출되면 다음 단계를 수행한다.
hint 가 string 이면, 다음을 수행합니다.methodNames 를 « "toString" , "valueOf" »로 둡니다.그렇지 않으면,methodNames 를 « "valueOf" , "toString" »로 둡니다. methodNames 의 각 요소 name 에 대해 다음을 수행합니다.method 를 ? Get (obj , name )으로 둡니다.IsCallable (method )이 true 이면, 다음을 수행합니다.result 를 ? Call (method , obj )로 둡니다.result 가 Object가 아니면, result 를 반환합니다.TypeError 예외를 던집니다.
7.1.2 ToBoolean ( arg )
추상 연산 ToBoolean. 인수 arg (ECMAScript 언어 값 ). 반환값: Boolean. arg 를 Boolean 타입 의 값으로 변환합니다. 호출되면 다음 단계를 수행한다.
arg 가 Boolean이면, arg 를 반환합니다.arg 가 undefined , null , +0 𝔽 , -0 𝔽 , NaN , 0 ℤ 또는 빈 String 중 하나이면, false 를 반환합니다.Normative Optional
호스트 가 웹 브라우저이거나 그 밖의 방식으로 [[IsHTMLDDA]] 내부 슬롯 을 지원하면, 다음을 수행합니다.arg 가 Object이고 arg 에 [[IsHTMLDDA]] 내부 슬롯이 있으면, false 를 반환합니다.true 를 반환합니다.
7.1.3 ToNumeric ( arg )
추상 연산 ToNumeric. 인수 arg (ECMAScript 언어 값 ). 반환값: Number 또는 BigInt를 포함하는 정상 완료 또는 throw 완료 . arg 를 Number 또는 BigInt로 변환하여 반환합니다. 호출되면 다음 단계를 수행한다.
primitiveValue 를 ? ToPrimitive (arg , number )로 둡니다.primitiveValue 가 BigInt이면, primitiveValue 를 반환합니다.? ToNumber (primitiveValue )를 반환합니다.
7.1.4 ToNumber ( arg )
추상 연산 ToNumber. 인수 arg (ECMAScript 언어 값 ). 반환값: Number를 포함하는 정상 완료 또는 throw 완료 . arg 를 Number 타입 의 값으로 변환합니다. 호출되면 다음 단계를 수행한다.
arg 가 Number이면, arg 를 반환합니다.arg 가 Symbol 또는 BigInt이면, TypeError 예외를 던집니다.arg 가 undefined 이면, NaN 을 반환합니다.arg 가 null 또는 false 이면, +0 𝔽 을 반환합니다.arg 가 true 이면, 1 𝔽 을 반환합니다.arg 가 String이면, StringToNumber (arg )를 반환합니다.단언 : arg 는 Object입니다.primitiveValue 를 ? ToPrimitive (arg , number )로 둡니다.단언 : primitiveValue 는 Object가 아닙니다.? ToNumber (primitiveValue )를 반환합니다.
7.1.4.1 String 타입에 적용되는 ToNumber
추상 연산 StringToNumber 는 다음 문법을 사용하여 String 값을 Number 값 으로 변환하는 방법을 명시합니다.
구문
StringNumericLiteral :::
StrWhiteSpace opt
StrWhiteSpace opt
StrNumericLiteral
StrWhiteSpace opt
StrWhiteSpace :::
StrWhiteSpaceChar
StrWhiteSpace opt
StrWhiteSpaceChar :::
WhiteSpace
LineTerminator
StrNumericLiteral :::
StrDecimalLiteral
NonDecimalIntegerLiteral [~Sep]
StrDecimalLiteral :::
StrUnsignedDecimalLiteral
+
StrUnsignedDecimalLiteral
-
StrUnsignedDecimalLiteral
StrUnsignedDecimalLiteral :::
Infinity
DecimalDigits [~Sep]
.
DecimalDigits [~Sep] opt
ExponentPart [~Sep] opt
.
DecimalDigits [~Sep]
ExponentPart [~Sep] opt
DecimalDigits [~Sep]
ExponentPart [~Sep] opt
위에서 명시적으로 정의되지 않은 모든 문법 기호에는 숫자 리터럴의 어휘 문법(12.9.3 )에서 사용하는 정의가 적용됩니다.
참고
StringNumericLiteral 과 NumericLiteral 의 구문에는 다음과 같은 몇 가지 차이가 있음을 유의하시기 바랍니다:
7.1.4.1.1 StringToNumber ( string )
추상 연산 StringToNumber. 인수 string (String). 반환값: Number. 호출되면 다음 단계를 수행한다.
literal 을 ParseText (string , StringNumericLiteral )로 둡니다.literal 이 오류의 List 이면, NaN 을 반환합니다.literal 의 StringNumericValue 를 반환합니다.
7.1.4.1.2 Runtime Semantics: StringNumericValue
구문 지향 연산 StringNumericValue. 인수 없음. 반환값: Number.
참고
다음 생성 규칙별로 정의된다.
StringNumericLiteral ::: StrWhiteSpace opt
+0 𝔽 을 반환합니다.
StringNumericLiteral :::
StrWhiteSpace opt
StrNumericLiteral
StrWhiteSpace opt
StrNumericLiteral 의 StringNumericValue 를 반환합니다.
StrNumericLiteral ::: NonDecimalIntegerLiteral
𝔽 (NonDecimalIntegerLiteral 의 MV)를 반환합니다.
StrDecimalLiteral :::
-
StrUnsignedDecimalLiteral
a 를 StrUnsignedDecimalLiteral 의 StringNumericValue 로 둡니다.a 가 +0 𝔽 이면, -0 𝔽 을 반환합니다.-a 를 반환합니다.
StrUnsignedDecimalLiteral ::: Infinity
+∞ 𝔽 을 반환합니다.
StrUnsignedDecimalLiteral :::
DecimalDigits
.
DecimalDigits opt
ExponentPart opt
a 를 첫 번째 DecimalDigits 의 MV로 둡니다.두 번째 DecimalDigits 가 존재하면, 다음을 수행합니다.b 를 두 번째 DecimalDigits 의 MV로 둡니다.n 을 두 번째 DecimalDigits 의 코드 포인트 수로 둡니다. 그렇지 않으면,b 를 0으로 둡니다.n 을 0으로 둡니다. ExponentPart 가 존재하면 e 를 ExponentPart 의 MV로 둡니다. 그렇지 않으면 e 를 0으로 둡니다.RoundMVResult ((a + (b × 10-n )) × 10e )를 반환합니다.
StrUnsignedDecimalLiteral :::
.
DecimalDigits
ExponentPart opt
b 를 DecimalDigits 의 MV로 둡니다.ExponentPart 가 존재하면 e 를 ExponentPart 의 MV로 둡니다. 그렇지 않으면 e 를 0으로 둡니다.n 을 DecimalDigits 의 코드 포인트 수로 둡니다.RoundMVResult (b × 10e - n )를 반환합니다.
StrUnsignedDecimalLiteral :::
DecimalDigits
ExponentPart opt
a 를 DecimalDigits 의 MV로 둡니다.ExponentPart 가 존재하면 e 를 ExponentPart 의 MV로 둡니다. 그렇지 않으면 e 를 0으로 둡니다.RoundMVResult (a × 10e )를 반환합니다.
7.1.4.1.3 RoundMVResult ( n )
추상 연산 RoundMVResult. 인수 n (수학적 값 ). 반환값: Number. 구현체 정의 방식으로 n 을 Number로 변환합니다. 이 추상 연산 에서 숫자가 0이 아니거나, 그 왼쪽에 0이 아닌 숫자가 있고 오른쪽에도 0이 아닌 숫자가 있으면 해당 숫자는 유효한 것으로 간주됩니다. 이 추상 연산 에서 수학적 값 의 표현이 “나타내는 수학적 값 ”은 수학적 값 의 “십진 표현”의 역변환입니다. 호출되면 다음 단계를 수행한다.
n 의 십진 표현에 유효 숫자가 20개 이하이면, 𝔽 (n )을 반환합니다.option1 을 n 의 십진 표현에서 20번째 이후의 각 유효 숫자를 0 숫자로 바꾼 결과가 나타내는 수학적 값 으로 둡니다.option2 를 n 의 십진 표현에서 20번째 이후의 각 유효 숫자를 0 숫자로 바꾼 다음 20번째 위치의 값을 1 증가시킨 결과(필요한 경우 올림 포함)가 나타내는 수학적 값 으로 둡니다.chosen 을 option1 또는 option2 중 구현체 정의 방식으로 선택한 값으로 둡니다.𝔽 (chosen )을 반환합니다.
7.1.5 ToIntegerOrInfinity ( arg )
추상 연산 ToIntegerOrInfinity. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: (정수 , +∞ 또는 -∞)) 또는 throw 완료 ). arg 를 소수 부분을 잘라낸 Number 값 을 나타내는 정수 로 변환하거나, 해당 Number 값 이 무한이면 +∞ 또는 -∞로 변환합니다. 호출되면 다음 단계를 수행한다.
number 를 ? ToNumber (arg )로 둡니다.number 가 NaN , +0 𝔽 또는 -0 𝔽 중 하나이면, 0을 반환합니다.number 가 +∞ 𝔽 이면, +∞를 반환합니다.number 가 -∞ 𝔽 이면, -∞를 반환합니다.truncate (ℝ (number ))를 반환합니다.
참고
𝔽 (ToIntegerOrInfinity(
x ))는
x 의 어떤 값에 대해서도
-0 𝔽 을 반환하지 않습니다. 소수 부분의 절삭은
x 를
수학적 값 으로 변환한 후 수행됩니다.
7.1.6 SnapToInteger ( arg , nonIntHandling [ , minimum [ , maximum ] ] )
추상 연산 SnapToInteger. 인수 arg (ECMAScript 언어 값 ) 및 nonIntHandling ((reject 또는 truncate )) 및 선택적 인수 minimum (정수 ) 및 maximum (정수 ). 반환값: (정상 완료 (값: 정수 ) 또는 throw 완료 ). arg 를 해당 Number 값 을 나타내는 정수 로 변환하며, 유한하지 않은 값을 거부하고 유한하지만 정수 가 아닌 값은 거부하거나 절삭하여 처리하며, 선택적으로 양 끝을 포함하는 제한 범위를 적용합니다. 호출되면 다음 단계를 수행한다.
number 를 ? ToNumber (arg )로 둡니다.number 가 NaN , +∞ 𝔽 또는 -∞ 𝔽 중 하나이면, RangeError 예외를 던집니다.mv 를 ℝ (number )로 둡니다.nonIntHandling 이 truncate 이면, mv 를 truncate (mv )로 설정합니다.mv 가 정수 가 아니면, RangeError 예외를 던집니다.minimum 이 존재하고 mv < minimum 이면, RangeError 예외를 던집니다.maximum 이 존재하고 mv > maximum 이면, RangeError 예외를 던집니다.mv 를 반환합니다.
7.1.7 ToFixedSizeInteger ( int , signed , bitWidth )
추상 연산 ToFixedSizeInteger. 인수 int ((정수 , +∞ 또는 -∞)), signed ((unsigned 또는 signed )) 및 bitWidth (양의 정수). 반환값: 정수 . int 를 2bitWidth 개의 정수 중 하나로 매핑합니다. signed 가 unsigned 이면 0부터 2bitWidth - 1까지의 닫힌 구간 에 있는 정수 로, signed 가 signed 이면 -2bitWidth - 1 부터 2bitWidth - 1 - 1까지의 닫힌 구간 에 있는 정수 로 매핑합니다. 호출되면 다음 단계를 수행한다.
int = +∞ 또는 int = -∞이면, 0을 반환합니다.fixedInt 를 int modulo 2bitWidth 로 둡니다.참고 : 다음 단계는 fixedInt 의 2의 보수 표현을 변경하지 않습니다.signed 가 signed 이고 fixedInt ≥ 2bitWidth - 1 이면, fixedInt 를 fixedInt - 2bitWidth 로 설정합니다.fixedInt 를 반환합니다.
참고
ToFixedSizeInteger는 멱등성을 가집니다. 즉, 임의의 ECMAScript 언어 값 x 에 대해 ToFixedSizeInteger(ToFixedSizeInteger(x , signed , bitWidth ), signed , bitWidth )는 ToFixedSizeInteger(x , signed , bitWidth )와 같습니다. 실제로 +∞와 -∞가 0으로 매핑되므로 이 불변 조건은 signed 를 반대로 바꾸더라도 유지됩니다(예: ToFixedSizeInteger(ToFixedSizeInteger(x , signed , 32), unsigned , 32)는 ToFixedSizeInteger(x , unsigned , 32)와 같습니다).
7.1.8 ToInt32 ( arg )
추상 연산 ToInt32. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 정수인 Number ) 또는 throw 완료 ). arg 를 𝔽 (-231 )부터 𝔽 (231 - 1)까지의 닫힌 구간 에 있는 232 개의 정수인 Number 값 중 하나로 변환하며, -0 𝔽 은 제외합니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (arg )로 둡니다.𝔽 (ToFixedSizeInteger (int , signed , 32))를 반환합니다.
7.1.9 ToUint32 ( arg )
추상 연산 ToUint32. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 정수인 Number ) 또는 throw 완료 ). arg 를 +0 𝔽 부터 𝔽 (232 - 1)까지의 닫힌 구간 에 있는 232 개의 정수인 Number 값 중 하나로 변환합니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (arg )로 둡니다.𝔽 (ToFixedSizeInteger (int , unsigned , 32))를 반환합니다.
7.1.10 ToInt16 ( arg )
추상 연산 ToInt16. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 정수인 Number ) 또는 throw 완료 ). arg 를 𝔽 (-215 )부터 𝔽 (215 - 1)까지의 닫힌 구간 에 있는 216 개의 정수인 Number 값 중 하나로 변환하며, -0 𝔽 은 제외합니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (arg )로 둡니다.𝔽 (ToFixedSizeInteger (int , signed , 16))를 반환합니다.
7.1.11 ToUint16 ( arg )
추상 연산 ToUint16. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 정수인 Number ) 또는 throw 완료 ). arg 를 +0 𝔽 부터 𝔽 (216 - 1)까지의 닫힌 구간 에 있는 216 개의 정수인 Number 값 중 하나로 변환합니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (arg )로 둡니다.𝔽 (ToFixedSizeInteger (int , unsigned , 16))를 반환합니다.
7.1.12 ToInt8 ( arg )
추상 연산 ToInt8. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 정수인 Number ) 또는 throw 완료 ). arg 를 -128 𝔽 부터 127 𝔽 까지의 닫힌 구간 에 있는 28 개의 정수인 Number 값 중 하나로 변환하며, -0 𝔽 은 제외합니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (arg )로 둡니다.𝔽 (ToFixedSizeInteger (int , signed , 8))를 반환합니다.
7.1.13 ToUint8 ( arg )
추상 연산 ToUint8. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 정수인 Number ) 또는 throw 완료 ). arg 를 +0 𝔽 부터 255 𝔽 까지의 닫힌 구간 에 있는 28 개의 정수인 Number 값 중 하나로 변환합니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (arg )로 둡니다.𝔽 (ToFixedSizeInteger (int , unsigned , 8))를 반환합니다.
7.1.14 ToUint8Clamp ( arg )
추상 연산 ToUint8Clamp. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 정수인 Number ) 또는 throw 완료 ). arg 를 제한하고 반올림하여 +0 𝔽 부터 255 𝔽 까지의 닫힌 구간 에 있는 28 개의 정수인 Number 값 중 하나로 변환합니다. 호출되면 다음 단계를 수행한다.
number 를 ? ToNumber (arg )로 둡니다.number 가 NaN 이면, +0 𝔽 을 반환합니다.mv 를 number 의 확장된 수학적 값 으로 둡니다.clamped 를 mv 를 0과 255 사이로 제한한 결과로 둡니다.f 를 floor (clamped )로 둡니다.clamped < f + 0.5이면, 𝔽 (f )를 반환합니다.clamped > f + 0.5이면, 𝔽 (f + 1)을 반환합니다.f 가 짝수이면, 𝔽 (f )를 반환합니다.𝔽 (f + 1)을 반환합니다.
참고
대부분의 다른 ECMAScript 정수 변환 연산과 달리 ToUint8Clamp는 정수 가 아닌 값을 절삭하지 않고 반올림합니다. 또한 “가장 가까운 짝수로 절반 반올림” 동률 결정 방식을 사용하며, 이는 Math.round 의 “절반 올림” 동률 결정 방식과 다릅니다.
7.1.15 ToBigInt ( arg )
추상 연산 ToBigInt. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: BigInt) 또는 throw 완료 ). arg 를 BigInt 값 으로 변환하며, Number에서 암묵적 변환이 필요하면 예외를 던집니다. 호출되면 다음 단계를 수행한다.
primitive 를 ? ToPrimitive (arg , number )로 둡니다.표 12 에서 primitive 에 대응하는 값을 반환합니다.
표 12: BigInt 변환
인수 타입
결과
Undefined
TypeError 예외를 던집니다.
Null
TypeError 예외를 던집니다.
Boolean
primitive 가 true 이면 1n을 반환하고, primitive 가 false 이면 0n을 반환합니다.
BigInt
primitive 를 반환합니다.
Number
TypeError 예외를 던집니다.
String
n 을 StringToBigInt (primitive )로 둡니다.n 이 undefined 이면, SyntaxError 예외를 던집니다.n 을 반환합니다.
Symbol
TypeError 예외를 던집니다.
7.1.16 StringToBigInt ( string )
추상 연산 StringToBigInt. 인수 string (String). 반환값: (BigInt 또는 undefined ). 호출되면 다음 단계를 수행한다.
literal 을 ParseText (string , StringIntegerLiteral )로 둡니다.literal 이 오류의 List 이면, undefined 를 반환합니다.mv 를 literal 의 MV로 둡니다.단언 : mv 는 정수 입니다.ℤ (mv )를 반환합니다.
7.1.16.1 StringIntegerLiteral 문법
StringToBigInt 는 다음 문법을 사용합니다.
구문
StringIntegerLiteral :::
StrWhiteSpace opt
StrWhiteSpace opt
StrIntegerLiteral
StrWhiteSpace opt
StrIntegerLiteral :::
SignedInteger [~Sep]
NonDecimalIntegerLiteral [~Sep]
7.1.16.2 Runtime Semantics: MV
7.1.17 ToBigInt64 ( arg )
추상 연산 ToBigInt64. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: BigInt) 또는 throw 완료 ). arg 를 ℤ (-263 )부터 ℤ (263 - 1)까지의 닫힌 구간 에 있는 264 개의 BigInt 값 중 하나로 변환합니다. 호출되면 다음 단계를 수행한다.
int 를 ℝ (? ToBigInt (arg ))로 둡니다.ℤ (ToFixedSizeInteger (int , signed , 64))를 반환합니다.
7.1.18 ToBigUint64 ( arg )
추상 연산 ToBigUint64. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: BigInt) 또는 throw 완료 ). arg 를 0 ℤ 부터 ℤ (264 - 1)까지의 닫힌 구간 에 있는 264 개의 BigInt 값 중 하나로 변환합니다. 호출되면 다음 단계를 수행한다.
int 를 ℝ (? ToBigInt (arg ))로 둡니다.ℤ (ToFixedSizeInteger (int , unsigned , 64))를 반환합니다.
7.1.19 ToString ( arg )
추상 연산 ToString. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: String) 또는 throw 완료 ). arg 를 String 타입 의 값으로 변환합니다. 호출되면 다음 단계를 수행한다.
arg 가 String이면, arg 를 반환합니다.arg 가 Symbol이면, TypeError 예외를 던집니다.arg 가 undefined 이면, "undefined" 를 반환합니다.arg 가 null 이면, "null" 을 반환합니다.arg 가 true 이면, "true" 를 반환합니다.arg 가 false 이면, "false" 를 반환합니다.arg 가 Number이면, Number::toString (arg , 10)을 반환합니다.arg 가 BigInt이면, BigInt::toString (arg , 10)을 반환합니다.단언 : arg 는 Object입니다.primitiveValue 를 ? ToPrimitive (arg , string )로 둡니다.단언 : primitiveValue 는 Object가 아닙니다.? ToString (primitiveValue )를 반환합니다.
7.1.20 ToObject ( arg )
추상 연산 ToObject. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: Object) 또는 throw 완료 ). arg 를 Object 타입 의 값으로 변환합니다. 호출되면 다음 단계를 수행한다.
arg 가 undefined 또는 null 이면, TypeError 예외를 던집니다.arg 가 Boolean이면, [[BooleanData]] 내부 슬롯이 arg 로 설정된 새로운 Boolean 객체를 반환합니다. Boolean 객체에 대한 설명은 20.3 를 참조하시기 바랍니다.arg 가 Number이면, [[NumberData]] 내부 슬롯이 arg 로 설정된 새로운 Number 객체를 반환합니다. Number 객체에 대한 설명은 21.1 를 참조하시기 바랍니다.arg 가 String이면, [[StringData]] 내부 슬롯이 arg 로 설정된 새로운 String 객체를 반환합니다. String 객체에 대한 설명은 22.1 를 참조하시기 바랍니다.arg 가 Symbol이면, [[SymbolData]] 내부 슬롯이 arg 로 설정된 새로운 Symbol 객체를 반환합니다. Symbol 객체에 대한 설명은 20.4 를 참조하시기 바랍니다.arg 가 BigInt이면, [[BigIntData]] 내부 슬롯이 arg 로 설정된 새로운 BigInt 객체를 반환합니다. BigInt 객체에 대한 설명은 21.2 를 참조하시기 바랍니다.단언 : arg 는 Object입니다.arg 를 반환합니다.
7.1.21 ToPropertyKey ( arg )
추상 연산 ToPropertyKey. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 프로퍼티 키 ) 또는 throw 완료 ). arg 를 프로퍼티 키 로 사용할 수 있는 값으로 변환합니다. 호출되면 다음 단계를 수행한다.
key 를 ? ToPrimitive (arg , string )로 둡니다.key 가 Symbol이면, 다음을 수행합니다.key 를 반환합니다.! ToString (key )을 반환합니다.
7.1.22 ToLength ( arg )
추상 연산 ToLength. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: 음이 아닌 정수인 Number) 또는 throw 완료 ). arg 를 제한하고 절삭하여 배열과 유사한 객체 의 길이로 사용하기에 적합한 음이 아닌 정수인 Number 로 변환합니다. 호출되면 다음 단계를 수행한다.
length 를 ? ToIntegerOrInfinity (arg )로 둡니다.clampedLength 를 length 를 0과 253 - 1 사이로 제한한 결과로 둡니다.𝔽 (clampedLength )를 반환합니다.
7.1.23 CanonicalNumericIndexString ( arg )
추상 연산 CanonicalNumericIndexString. 인수 arg (String). 반환값: (Number 또는 undefined ). arg 가 "-0" 이거나 어떤 Number 값 n 에 대한 ToString (n )과 정확히 일치하면 각각에 대응하는 Number 값 을 반환합니다. 그렇지 않으면 undefined 를 반환합니다. 호출되면 다음 단계를 수행한다.
arg 가 "-0" 이면, -0 𝔽 을 반환합니다.n 을 ! ToNumber (arg )로 둡니다.! ToString (n )이 arg 이면, n 을 반환합니다. undefined 를 반환합니다.
정규 숫자 문자열 은 CanonicalNumericIndexString 추상 연산 이 undefined 를 반환하지 않는 모든 String입니다.
7.1.24 ToIndex ( arg )
추상 연산 ToIndex. 인수 arg (ECMAScript 언어 값 ). 반환값: 음이 아닌 정수 를 포함하는 정상 완료 또는 throw 완료 . arg 를 정수 로 변환하고 해당 정수 가 음이 아니며 정수 인덱스 에 대응하면 그 정수 를 반환합니다. 그렇지 않으면 예외를 던집니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (arg )로 둡니다.int 가 0부터 253 - 1까지의 닫힌 구간 에 없으면, RangeError 예외를 던집니다.int 를 반환합니다.
7.1.25 ToAbsoluteIndex ( value , length )
추상 연산 ToAbsoluteIndex. 인수 value (ECMAScript 언어 값 ) 및 length (음이 아닌 정수). 반환값: (정상 완료 (값: (정수 , +∞ 또는 -∞)) 또는 throw 완료 ). value 를 정수 , +∞ 또는 -∞로 변환하며, 음수 값은 length 를 기준으로 상대적으로 해석합니다. 호출되면 다음 단계를 수행한다.
int 를 ? ToIntegerOrInfinity (value )로 둡니다.int 가 유한하고 int < 0이면, int 를 length + int 로 설정합니다.int 를 반환합니다.
7.1.26 ToClampedIndex ( value , length )
추상 연산 ToClampedIndex. 인수 value (ECMAScript 언어 값 ) 및 length (음이 아닌 정수). 반환값: (정상 완료 (값: 음이 아닌 정수) 또는 throw 완료 ). value 를 정수 로 변환하고(음수 값은 length 를 기준으로 상대적으로 해석), 그 결과를 0부터 length 까지의 닫힌 구간 으로 제한합니다. 호출되면 다음 단계를 수행한다.
index 를 ? ToAbsoluteIndex (value , length )로 둡니다.index 를 0과 length 사이로 제한한 결과를 반환합니다.
7.2 검사 및 비교 연산
7.2.1 RequireObjectCoercible ( arg )
추상 연산 RequireObjectCoercible. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). arg 가 ToObject 를 사용하여 Object로 변환할 수 없는 값이면 오류를 던집니다. 호출되면 다음 단계를 수행한다.
arg 가 undefined 또는 null 이면, TypeError 예외를 던집니다.unused 를 반환합니다.
7.2.2 IsArray ( arg )
추상 연산 IsArray. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
arg 가 Object가 아니면, false 를 반환합니다.arg 가 Array 특수 객체 이면, true 를 반환합니다.arg 가 Proxy 특수 객체 이면, 다음을 수행합니다.? ValidateNonRevokedProxy (arg )를 수행합니다. proxyTarget 을 arg .[[ProxyTarget]] 으로 둡니다.? IsArray (proxyTarget )를 반환합니다. false 를 반환합니다.
7.2.3 IsCallable ( arg )
추상 연산 IsCallable. 인수 arg (ECMAScript 언어 값 ). 반환값: Boolean. arg 가 [[Call]] 내부 메서드를 갖는 호출 가능한 함수인지 결정합니다. 호출되면 다음 단계를 수행한다.
arg 가 Object가 아니면, false 를 반환합니다.arg 에 [[Call]] 내부 메서드가 있으면, true 를 반환합니다.false 를 반환합니다.
7.2.4 IsConstructor ( arg )
추상 연산 IsConstructor. 인수 arg (ECMAScript 언어 값 ). 반환값: Boolean. arg 가 [[Construct]] 내부 메서드를 갖는 함수 객체 인지 결정합니다. 호출되면 다음 단계를 수행한다.
arg 가 Object가 아니면, false 를 반환합니다.arg 에 [[Construct]] 내부 메서드가 있으면, true 를 반환합니다.false 를 반환합니다.
7.2.5 IsExtensible ( obj )
추상 연산 IsExtensible. 인수 obj (Object). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료 ). obj 에 추가 프로퍼티를 추가할 수 있는지 결정하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
? obj .[[IsExtensible]] () 를 반환합니다.
7.2.6 IsRegExp ( arg )
추상 연산 IsRegExp. 인수 arg (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
arg 가 Object가 아니면, false 를 반환합니다.matcher 를 ? Get (arg , %Symbol.match% )로 둡니다.matcher 가 undefined 가 아니면, ToBoolean (matcher )을 반환합니다.arg 에 [[RegExpMatcher]] 내부 슬롯이 있으면, true 를 반환합니다.false 를 반환합니다.
7.2.7 Static Semantics: IsStringWellFormedUnicode ( string )
추상 연산 IsStringWellFormedUnicode. 인수 string (String). 반환값: Boolean. 6.1.4 에 설명된 대로 string 을 UTF-16로 인코딩된 코드 포인트 시퀀스로 해석하고, 이것이 올바른 형식 의 UTF-16 시퀀스인지 결정합니다. 호출되면 다음 단계를 수행한다.
length 를 string 의 길이로 둡니다.k 를 0으로 둡니다.k < length 인 동안 다음을 반복합니다.codePoint 를 CodePointAt (string , k )으로 둡니다.codePoint .[[IsUnpairedSurrogate]] 가 true 이면, false 를 반환합니다.k 를 k + codePoint .[[CodeUnitCount]] 로 설정합니다.true 를 반환합니다.
7.2.8 SameType ( x , y )
추상 연산 SameType. 인수 x (ECMAScript 언어 값 ) 및 y (ECMAScript 언어 값 ). 반환값: Boolean. 두 인수가 같은 타입인지 결정합니다. 호출되면 다음 단계를 수행한다.
x 가 undefined 이고 y 가 undefined 이면, true 를 반환합니다.x 가 null 이고 y 가 null 이면, true 를 반환합니다.x 가 Boolean이고 y 가 Boolean이면, true 를 반환합니다.x 가 Number이고 y 가 Number이면, true 를 반환합니다.x 가 BigInt이고 y 가 BigInt이면, true 를 반환합니다.x 가 Symbol이고 y 가 Symbol이면, true 를 반환합니다.x 가 String이고 y 가 String이면, true 를 반환합니다.x 가 Object이고 y 가 Object이면, true 를 반환합니다.false 를 반환합니다.
7.2.9 SameValue ( x , y )
추상 연산 SameValue. 인수 x (ECMAScript 언어 값 ) 및 y (ECMAScript 언어 값 ). 반환값: Boolean. 두 인수가 같은 값인지 결정합니다. 호출되면 다음 단계를 수행한다.
SameType (x , y )이 false 이면, false 를 반환합니다.x 가 Number이면, 다음을 수행합니다.Number::sameValue (x , y )를 반환합니다.SameValueNonNumber (x , y )를 반환합니다.
참고
이 알고리즘은 모든 NaN 값을 동등하게 취급하고 +0 𝔽 과 -0 𝔽 을 구별한다는 점에서 IsStrictlyEqual 알고리즘과 다릅니다.
7.2.10 SameValueZero ( x , y )
추상 연산 SameValueZero. 인수 x (ECMAScript 언어 값 ) 및 y (ECMAScript 언어 값 ). 반환값: Boolean. 두 인수가 같은 값인지 결정합니다(+0 𝔽 과 -0 𝔽 의 차이는 무시합니다). 호출되면 다음 단계를 수행한다.
SameType (x , y )이 false 이면, false 를 반환합니다.x 가 Number이면, 다음을 수행합니다.Number::sameValueZero (x , y )를 반환합니다.SameValueNonNumber (x , y )를 반환합니다.
참고
SameValueZero는 +0 𝔽 과 -0 𝔽 을 동등하게 취급한다는 점에서만 SameValue 와 다릅니다.
7.2.11 SameValueNonNumber ( x , y )
추상 연산 SameValueNonNumber. 인수 x (Number가 아닌 ECMAScript 언어 값 ) 및 y (Number가 아닌 ECMAScript 언어 값 ). 반환값: Boolean. 호출되면 다음 단계를 수행한다.
단언 : SameType (x , y )은 true 입니다.x 가 undefined 또는 null 이면, true 를 반환합니다.x 가 BigInt이면, 다음을 수행합니다.BigInt::equal (x , y )를 반환합니다.x 가 String이면, 다음을 수행합니다.x 와 y 의 길이가 같고 동일한 위치에 동일한 코드 단위가 있으면, true 를 반환합니다.false 를 반환합니다.x 가 Boolean이면, 다음을 수행합니다.x 가 true 이고 y 가 true 이면, true 를 반환합니다.x 가 false 이고 y 가 false 이면, true 를 반환합니다.false 를 반환합니다.참고 : 그 밖의 모든 ECMAScript 언어 값 은 동일성으로 비교됩니다.x 가 y 이면, true 를 반환합니다.false 를 반환합니다.
참고 1
설명을 위해 필요하지 않은 경우에도 일부 경우를 이 알고리즘 내에서 별도로 처리합니다.
참고 2
“
x 가
y 이다”가 구체적으로 무엇을 의미하는지는
5.2.8 에 자세히 설명되어 있습니다.
7.2.12 IsLessThan ( x , y , leftFirst )
추상 연산 IsLessThan. 인수 x (ECMAScript 언어 값 ), y (ECMAScript 언어 값 ) 및 leftFirst (Boolean). 반환값: Boolean 또는 undefined 를 포함하는 정상 완료 또는 throw 완료 . 비교 x < y 의 의미론을 제공하며, true , false 또는 undefined (피연산자를 동일한 숫자 타입의 비교 가능한 값으로 강제 변환할 수 없음을 나타냅니다)를 반환합니다. leftFirst 플래그는 x 와 y 에 대해 관찰 가능한 부작용이 있을 수 있는 연산을 수행하는 순서를 제어하는 데 사용됩니다. ECMAScript가 표현식의 왼쪽에서 오른쪽 평가를 명시하기 때문에 필요합니다. leftFirst 가 true 이면 x 매개변수는 y 매개변수에 대응하는 표현식보다 왼쪽에 나타나는 표현식에 대응합니다. leftFirst 가 false 이면 반대이며, x 보다 y 에 대한 연산을 먼저 수행해야 합니다. 호출되면 다음 단계를 수행한다.
leftFirst 가 true 이면, 다음을 수행합니다.px 를 ? ToPrimitive (x , number )로 둡니다.py 를 ? ToPrimitive (y , number )로 둡니다.그렇지 않으면,참고 : 왼쪽에서 오른쪽 평가를 유지하기 위해 평가 순서를 반대로 해야 합니다.py 를 ? ToPrimitive (y , number )로 둡니다.px 를 ? ToPrimitive (x , number )로 둡니다. px 가 String이고 py 가 String이면, 다음을 수행합니다.lx 를 px 의 길이로 둡니다.ly 를 py 의 길이로 둡니다.0 ≤ i < min (lx , ly )를 만족하는 각 정수 i 에 대해 오름차순으로 다음을 수행합니다.cx 를 px 내 인덱스 i 에 있는 코드 단위의 숫자 값으로 둡니다.cy 를 py 내 인덱스 i 에 있는 코드 단위의 숫자 값으로 둡니다.cx < cy 이면, true 를 반환합니다.cx > cy 이면, false 를 반환합니다. lx < ly 이면, true 를 반환합니다.false 를 반환합니다.px 가 BigInt이고 py 가 String이면, 다음을 수행합니다.ny 를 StringToBigInt (py )로 둡니다.ny 가 undefined 이면, undefined 를 반환합니다.BigInt::lessThan (px , ny )을 반환합니다.px 가 String이고 py 가 BigInt이면, 다음을 수행합니다.nx 를 StringToBigInt (px )로 둡니다.nx 가 undefined 이면, undefined 를 반환합니다.BigInt::lessThan (nx , py )을 반환합니다.참고 : px 와 py 는 원시값이므로 평가 순서는 중요하지 않습니다.nx 를 ? ToNumeric (px )로 둡니다.ny 를 ? ToNumeric (py )로 둡니다.SameType (nx , ny )이 true 이면, 다음을 수행합니다.nx 가 Number이면, Number::lessThan (nx , ny )을 반환합니다.단언 : nx 는 BigInt입니다.BigInt::lessThan (nx , ny )을 반환합니다.단언 : nx 가 BigInt이고 ny 가 Number이거나, nx 가 Number이고 ny 가 BigInt입니다.nx 가 NaN 이거나 ny 가 NaN 이면, undefined 를 반환합니다.nx 가 -∞ 𝔽 이거나 ny 가 +∞ 𝔽 이면, true 를 반환합니다.nx 가 +∞ 𝔽 이거나 ny 가 -∞ 𝔽 이면, false 를 반환합니다.ℝ (nx ) < ℝ (ny )이면, true 를 반환합니다.false 를 반환합니다.
참고 1
3 단계는 덧셈 연산자 +를 처리하는 알고리즘(13.15.3 )의 1.c 단계와 달리 논리 OR 연산 대신 논리 AND 연산을 사용합니다.
참고 2
String 비교에서는 UTF-16 코드 단위 값의 시퀀스에 대한 단순한 사전식 순서를 사용합니다. 유니코드 명세에 정의된 더 복잡하고 의미론 중심적인 문자 또는 문자열 동등성과 정렬 순서 정의를 사용하려는 시도는 하지 않습니다. 따라서 유니코드 표준에 따라 정규적으로 동등하지만 동일한 정규화 형식이 아닌 String 값은 서로 같지 않은 것으로 판정될 수 있습니다. 또한 서로게이트 쌍 을 포함하는 String의 경우 코드 단위 에 따른 사전식 순서는 코드 포인트 에 따른 순서와 다르다는 점에 유의하시기 바랍니다.
7.2.13 IsLooselyEqual ( x , y )
추상 연산 IsLooselyEqual. 인수 x (ECMAScript 언어 값 ) 및 y (ECMAScript 언어 값 ). 반환값: Boolean을 포함하는 정상 완료 또는 throw 완료 . == 연산자의 의미론을 제공합니다. 호출되면 다음 단계를 수행한다.
SameType (x , y )가 true 이면 다음을 수행합니다.IsStrictlyEqual (x , y )을 반환합니다.x 가 null 이고 y 가 undefined 이면 true 를 반환합니다.x 가 undefined 이고 y 가 null 이면 true 를 반환합니다.Normative Optional
호스트 가 웹 브라우저이거나 그 밖의 방식으로 [[IsHTMLDDA]] 내부 슬롯 을 지원하면 다음을 수행합니다.x 가 Object이고, x 에 [[IsHTMLDDA]] 내부 슬롯이 있으며, y 가 undefined 또는 null 중 하나이면 true 를 반환합니다.x 가 undefined 또는 null 중 하나이고, y 가 Object이며, y 에 [[IsHTMLDDA]] 내부 슬롯이 있으면 true 를 반환합니다.x 가 Number이고 y 가 String이면 ! IsLooselyEqual (x , ! ToNumber (y ))을 반환합니다.x 가 String이고 y 가 Number이면 ! IsLooselyEqual (! ToNumber (x ), y )를 반환합니다.x 가 BigInt이고 y 가 String이면 다음을 수행합니다.n 을 StringToBigInt (y )로 둡니다.n 이 undefined 이면 false 를 반환합니다.! IsLooselyEqual (x , n )을 반환합니다. x 가 String이고 y 가 BigInt이면 ! IsLooselyEqual (y , x )를 반환합니다.x 가 Boolean이면 ! IsLooselyEqual (! ToNumber (x ), y )를 반환합니다.y 가 Boolean이면 ! IsLooselyEqual (x , ! ToNumber (y ))을 반환합니다.x 가 String, Number, BigInt 또는 Symbol 중 하나이고 y 가 Object이면 ! IsLooselyEqual (x , ? ToPrimitive (y ))을 반환합니다.x 가 Object이고 y 가 String, Number, BigInt 또는 Symbol 중 하나이면 ! IsLooselyEqual (? ToPrimitive (x ), y )를 반환합니다.x 가 BigInt이고 y 가 유한 Number 이거나, x 가 유한 Number 이고 y 가 BigInt이면 다음을 수행합니다.ℝ (x ) = ℝ (y )이면 true 를 반환합니다.false 를 반환합니다.false 를 반환합니다.
7.2.14 IsStrictlyEqual ( x , y )
추상 연산 IsStrictlyEqual. 인수 x (ECMAScript 언어 값 ) 및 y (ECMAScript 언어 값 ). 반환값: Boolean. === 연산자의 의미론을 제공합니다. 호출되면 다음 단계를 수행한다.
SameType (x , y )이 false 이면, false 를 반환합니다.x 가 Number이면, 다음을 수행합니다.Number::equal (x , y )을 반환합니다.SameValueNonNumber (x , y )을 반환합니다.
참고
이 알고리즘은 부호가 있는 0과 NaN을 처리하는 방식에서 SameValue 알고리즘과 다릅니다.
7.3 객체에 대한 연산
7.3.1 MakeBasicObject ( internalSlotsList )
추상 연산 MakeBasicObject. 인수 internalSlotsList (내부 슬롯 이름의 List ). 반환값: Object. 일반 객체 와 특수 객체 를 모두 포함하여 알고리즘으로 생성되는 모든 ECMAScript 객체의 출처입니다. 모든 객체 생성에 공통으로 사용하는 단계를 분리하고 객체 생성을 중앙화합니다. 호출되면 다음 단계를 수행한다.
internalSlotsList 를 internalSlotsList 와 « [[PrivateElements]] »의 목록 연결 로 설정합니다.obj 를 internalSlotsList 의 각 이름에 대한 내부 슬롯을 갖는 새로 생성된 객체로 둡니다.참고 : Object 내부 메서드와 내부 슬롯 에 설명된 대로 달리 명시되지 않는 한 이러한 각 내부 슬롯의 초기값은 undefined 입니다.obj .[[PrivateElements]] 를 새로운 빈 List 로 설정합니다.obj 의 필수 내부 메서드를 10.1 에 명시된 기본 일반 객체 정의로 설정합니다.단언 : 호출자가 obj 의 [[GetPrototypeOf]] 및 [[SetPrototypeOf]] 필수 내부 메서드를 모두 재정의하지 않을 예정이면, internalSlotsList 에는 [[Prototype]] 이 포함됩니다.단언 : 호출자가 obj 의 [[SetPrototypeOf]] , [[IsExtensible]] 및 [[PreventExtensions]] 필수 내부 메서드를 모두 재정의하지 않을 예정이면, internalSlotsList 에는 [[Extensible]] 이 포함됩니다.internalSlotsList 에 [[Extensible]] 이 포함되어 있으면, obj .[[Extensible]] 을 true 로 설정합니다.obj 를 반환합니다.
참고
이 명세에서 특수 객체 는 ArrayCreate 및 BoundFunctionCreate 와 같은 추상 연산 에서 먼저 MakeBasicObject를 호출하여 기본적인 기반 객체를 얻은 다음, 해당 객체의 일부 또는 모든 내부 메서드를 재정의하여 생성합니다. 특수 객체 생성을 캡슐화하기 위해 객체의 필수 내부 메서드는 이러한 연산 외부에서는 절대로 수정하지 않습니다.
7.3.2 Get ( obj , propertyKey )
추상 연산 Get. 인수 obj (Object) 및 propertyKey (프로퍼티 키 ). 반환값: ECMAScript 언어 값 을 포함하는 정상 완료 또는 throw 완료 . 객체의 특정 프로퍼티 값을 가져오는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
? obj .[[Get]] (propertyKey , obj ) 를 반환합니다.
7.3.3 GetV ( value , propertyKey )
추상 연산 GetV. 인수 value (ECMAScript 언어 값 ) 및 propertyKey (프로퍼티 키 ). 반환값: ECMAScript 언어 값 을 포함하는 정상 완료 또는 throw 완료 . ECMAScript 언어 값 의 특정 프로퍼티 값을 가져오는 데 사용됩니다. 값이 객체가 아닌 경우 해당 값 타입에 적합한 래퍼 객체를 사용하여 프로퍼티 조회를 수행합니다. 호출되면 다음 단계를 수행한다.
obj 를 ? ToObject (value )로 둡니다.? obj .[[Get]] (propertyKey , value ) 를 반환합니다.
7.3.4 Set ( obj , propertyKey , value , throw )
추상 연산 Set. 인수 obj (Object), propertyKey (프로퍼티 키 ), value (ECMAScript 언어 값 ) 및 throw (Boolean). 반환값: unused 를 포함하는 정상 완료 또는 throw 완료 . 객체의 특정 프로퍼티 값을 설정하는 데 사용됩니다. value 는 프로퍼티의 새 값입니다. 호출되면 다음 단계를 수행한다.
success 를 ? obj .[[Set]] (propertyKey , value , obj ) 로 둡니다.success 가 false 이고 throw 가 true 이면, TypeError 예외를 던집니다.unused 를 반환합니다.
7.3.5 CreateDataProperty ( obj , propertyKey , value )
추상 연산 CreateDataProperty. 인수 obj (Object), propertyKey (프로퍼티 키 ) 및 value (ECMAScript 언어 값 ). 반환값: Boolean을 포함하는 정상 완료 또는 throw 완료 . 객체에 새로운 자체 프로퍼티를 생성하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
newDesc 를 PropertyDescriptor { [[Value]] : value , [[Writable]] : true , [[Enumerable]] : true , [[Configurable]] : true }로 둡니다.? obj .[[DefineOwnProperty]] (propertyKey , newDesc ) 를 반환합니다.
참고
이 추상 연산 은 ECMAScript 언어의 할당 연산자가 생성하는 프로퍼티에 사용되는 기본값과 동일하게 속성이 설정된 프로퍼티를 생성합니다. 일반적으로 해당 프로퍼티는 이미 존재하지 않습니다. 이미 존재하면서 구성 가능하지 않거나 obj 가 확장 가능하지 않으면 [[DefineOwnProperty]] 는 false 를 반환합니다.
7.3.6 CreateDataPropertyOrThrow ( obj , propertyKey , value )
추상 연산 CreateDataPropertyOrThrow. 인수 obj (Object), propertyKey (프로퍼티 키 ) 및 value (ECMAScript 언어 값 ). 반환값: unused 를 포함하는 정상 완료 또는 throw 완료 . 객체에 새로운 자체 프로퍼티를 생성하는 데 사용됩니다. 요청한 프로퍼티 갱신을 수행할 수 없으면 TypeError 예외를 던집니다. 호출되면 다음 단계를 수행한다.
success 를 ? CreateDataProperty (obj , propertyKey , value )로 둡니다.success 가 false 이면, TypeError 예외를 던집니다.unused 를 반환합니다.
참고
이 추상 연산 은 ECMAScript 언어의 할당 연산자가 생성하는 프로퍼티에 사용되는 기본값과 동일하게 속성이 설정된 프로퍼티를 생성합니다. 일반적으로 해당 프로퍼티는 이미 존재하지 않습니다. 이미 존재하면서 구성 가능하지 않거나 obj 가 확장 가능하지 않으면 [[DefineOwnProperty]] 는 false 를 반환하여 이 연산이 TypeError 예외를 던지게 합니다.
7.3.7 CreateNonEnumerableDataPropertyOrThrow ( obj , propertyKey , value )
추상 연산 CreateNonEnumerableDataPropertyOrThrow. 인수 obj (Object), propertyKey (프로퍼티 키 ) 및 value (ECMAScript 언어 값 ). 반환값: unused . 일반 객체 에 열거할 수 없는 새로운 자체 프로퍼티를 생성하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
단언 : obj 는 구성 불가능한 프로퍼티가 없는 일반 확장 가능 객체입니다.newDesc 를 PropertyDescriptor { [[Value]] : value , [[Writable]] : true , [[Enumerable]] : false , [[Configurable]] : true }로 둡니다.! DefinePropertyOrThrow (obj , propertyKey , newDesc )를 수행합니다. unused 를 반환합니다.
참고
이 추상 연산 은 열거 가능하지 않다는 점을 제외하면 ECMAScript 언어의 할당 연산자가 생성하는 프로퍼티에 사용되는 기본값과 동일하게 속성이 설정된 프로퍼티를 생성합니다. 일반적으로 해당 프로퍼티는 이미 존재하지 않습니다. 이미 존재하더라도 DefinePropertyOrThrow 는 정상적으로 완료됨이 보장됩니다.
7.3.8 DefinePropertyOrThrow ( obj , propertyKey , propertyDesc )
추상 연산 DefinePropertyOrThrow. 인수 obj (Object), propertyKey (프로퍼티 키 ) 및 propertyDesc (프로퍼티 서술자 ). 반환값: unused 를 포함하는 정상 완료 또는 throw 완료 . 요청한 프로퍼티 갱신을 수행할 수 없는 경우 TypeError 예외를 던지는 방식으로 객체의 [[DefineOwnProperty]] 내부 메서드를 호출하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
success 를 ? obj .[[DefineOwnProperty]] (propertyKey , propertyDesc ) 로 둡니다.success 가 false 이면, TypeError 예외를 던집니다.unused 를 반환합니다.
7.3.9 DeletePropertyOrThrow ( obj , propertyKey )
추상 연산 DeletePropertyOrThrow. 인수 obj (Object) 및 propertyKey (프로퍼티 키 ). 반환값: unused 를 포함하는 정상 완료 또는 throw 완료 . 객체의 특정 자체 프로퍼티를 제거하는 데 사용됩니다. 프로퍼티가 구성 가능하지 않으면 예외를 던집니다. 호출되면 다음 단계를 수행한다.
success 를 ? obj .[[Delete]] (propertyKey ) 로 둡니다.success 가 false 이면, TypeError 예외를 던집니다.unused 를 반환합니다.
7.3.10 GetMethod ( value , propertyKey )
추상 연산 GetMethod. 인수 value (ECMAScript 언어 값 ) 및 propertyKey (프로퍼티 키 ). 반환값: 함수 객체 또는 undefined 를 포함하는 정상 완료 또는 throw 완료 . 프로퍼티의 값이 함수일 것으로 예상되는 경우 ECMAScript 언어 값 의 특정 프로퍼티 값을 가져오는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
func 를 ? GetV (value , propertyKey )로 둡니다.func 가 undefined 또는 null 이면, undefined 를 반환합니다.IsCallable (func )이 false 이면, TypeError 예외를 던집니다.func 를 반환합니다.
7.3.11 HasProperty ( obj , propertyKey )
추상 연산 HasProperty. 인수 obj (Object) 및 propertyKey (프로퍼티 키 ). 반환값: Boolean을 포함하는 정상 완료 또는 throw 완료 . 객체가 지정된 프로퍼티 키 를 갖는 프로퍼티를 보유하는지 결정하는 데 사용됩니다. 프로퍼티는 자체 프로퍼티 또는 상속된 프로퍼티일 수 있습니다. 호출되면 다음 단계를 수행한다.
? obj .[[HasProperty]] (propertyKey ) 를 반환합니다.
7.3.12 HasOwnProperty ( obj , propertyKey )
추상 연산 HasOwnProperty. 인수 obj (Object) 및 propertyKey (프로퍼티 키 ). 반환값: Boolean을 포함하는 정상 완료 또는 throw 완료 . 객체가 지정된 프로퍼티 키 를 갖는 자체 프로퍼티를 보유하는지 결정하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
propertyDesc 를 ? obj .[[GetOwnProperty]] (propertyKey ) 로 둡니다.propertyDesc 가 undefined 이면, false 를 반환합니다.true 를 반환합니다.
7.3.13 Call ( func , thisValue [ , argList ] )
추상 연산 Call. 인수 func (ECMAScript 언어 값 ) 및 thisValue (ECMAScript 언어 값 ) 및 선택적 인수 argList (리스트 (요소: ECMAScript 언어 값 )). 반환값: (정상 완료 (값: ECMAScript 언어 값 ) 또는 throw 완료 ). 함수 객체 의 [[Call]] 내부 메서드를 호출하는 데 사용됩니다. func 는 함수 객체 이고, thisValue 는 [[Call]] 의 this 값인 ECMAScript 언어 값 이며, argList 는 내부 메서드의 대응하는 인수에 전달되는 값입니다. argList 가 존재하지 않으면 새로운 빈 List 를 값으로 사용합니다. 호출되면 다음 단계를 수행한다.
argList 가 존재하지 않으면, argList 를 새로운 빈 List 로 설정합니다.IsCallable (func )이 false 이면, TypeError 예외를 던집니다.? func .[[Call]] (thisValue , argList ) 를 반환합니다.
7.3.14 Construct ( ctor [ , argList [ , newTarget ] ] )
추상 연산 Construct. 인수 ctor (생성자 ) 및 선택적 인수 argList (리스트 (요소: ECMAScript 언어 값 )) 및 newTarget (생성자 ). 반환값: (정상 완료 (값: Object) 또는 throw 완료 ). 함수 객체 의 [[Construct]] 내부 메서드를 호출하는 데 사용됩니다. argList 와 newTarget 은 내부 메서드의 대응하는 인수로 전달되는 값입니다. argList 가 존재하지 않으면 새로운 빈 List 를 값으로 사용합니다. newTarget 이 존재하지 않으면 ctor 를 값으로 사용합니다. 호출되면 다음 단계를 수행한다.
newTarget 이 존재하지 않으면, newTarget 을 ctor 로 설정합니다.argList 가 존재하지 않으면, argList 를 새로운 빈 List 로 설정합니다.? ctor .[[Construct]] (argList , newTarget ) 를 반환합니다.
참고
newTarget 이 존재하지 않으면 이 연산은 new F(...argumentsList)와 동등합니다.
7.3.15 SetIntegrityLevel ( obj , level )
추상 연산 SetIntegrityLevel. 인수 obj (Object) 및 level ((sealed 또는 frozen )). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료 ). 객체의 자체 프로퍼티 집합을 고정하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
status 를 ? obj .[[PreventExtensions]] ()로 둡니다.status 가 false 이면, false 를 반환합니다.keys 를 ? obj .[[OwnPropertyKeys]] ()로 둡니다.level 이 sealed 이면, 다음을 수행합니다.keys 의 각 요소 key 에 대해 다음을 수행합니다.? DefinePropertyOrThrow (obj , key , PropertyDescriptor { [[Configurable]] : false })를 수행합니다. 그렇지 않으면,단언 : level 은 frozen 입니다.keys 의 각 요소 key 에 대해 다음을 수행합니다.currentDesc 를 ? obj .[[GetOwnProperty]] (key ) 로 둡니다.currentDesc 가 undefined 가 아니면, 다음을 수행합니다.IsAccessorDescriptor (currentDesc )가 true 이면, 다음을 수행합니다.propertyDesc 를 PropertyDescriptor { [[Configurable]] : false }로 둡니다.그렇지 않으면,propertyDesc 를 PropertyDescriptor { [[Configurable]] : false , [[Writable]] : false }로 둡니다. ? DefinePropertyOrThrow (obj , key , propertyDesc )를 수행합니다. true 를 반환합니다.
7.3.16 TestIntegrityLevel ( obj , level )
추상 연산 TestIntegrityLevel. 인수 obj (Object) 및 level ((sealed 또는 frozen )). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료 ). 객체의 자체 프로퍼티 집합이 고정되어 있는지 결정하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
extensible 을 ? IsExtensible (obj )로 둡니다.extensible 이 true 이면, false 를 반환합니다.참고 : 객체가 확장 가능하면 해당 객체의 프로퍼티는 검사하지 않습니다.keys 를 ? obj .[[OwnPropertyKeys]] ()로 둡니다.keys 의 각 요소 key 에 대해 다음을 수행합니다.currentDesc 를 ? obj .[[GetOwnProperty]] (key ) 로 둡니다.currentDesc 가 undefined 가 아니면, 다음을 수행합니다.currentDesc .[[Configurable]] 이 true 이면, false 를 반환합니다.level 이 frozen 이고 IsDataDescriptor (currentDesc )가 true 이면, 다음을 수행합니다.currentDesc .[[Writable]] 이 true 이면, false 를 반환합니다.true 를 반환합니다.
7.3.17 CreateArrayFromList ( elements )
추상 연산 CreateArrayFromList. 인수 elements (리스트 (요소: ECMAScript 언어 값 )). 반환값: Array. elements 가 제공하는 요소를 갖는 Array를 생성하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
array 를 ! ArrayCreate (0)으로 둡니다.n 을 0으로 둡니다.elements 의 각 요소 element 에 대해 다음을 수행합니다.! CreateDataPropertyOrThrow (array , ! ToString (𝔽 (n )), element )를 수행합니다. n 을 n + 1로 설정합니다.array 를 반환합니다.
7.3.18 LengthOfArrayLike ( obj )
추상 연산 LengthOfArrayLike. 인수 obj (Object). 반환값: (정상 완료 (값: 음이 아닌 정수) 또는 throw 완료 ). 배열과 유사한 객체의 "length" 프로퍼티 값을 반환합니다. 호출되면 다음 단계를 수행한다.
ℝ (? ToLength (? Get (obj , "length" )))를 반환합니다.
배열과 유사한 객체 는 이 연산이 정상 완료 를 반환하는 모든 객체입니다.
참고 1
일반적으로 배열과 유사한 객체에는
정수 인덱스 이름을 갖는 프로퍼티도 일부 있을 수 있습니다. 그러나 이는 이 정의의 요구 사항은 아닙니다.
참고 2
Array와 String 객체는 배열과 유사한 객체의 예입니다.
7.3.19 CreateListFromArrayLike ( obj [ , validElementTypes ] )
추상 연산 CreateListFromArrayLike. 인수 obj (ECMAScript 언어 값 ) 및 선택적 인수 validElementTypes ((any 또는 property-key )). 반환값: ECMAScript 언어 값 의 List 를 포함하는 정상 완료 또는 예외 완료. obj 의 인덱스 속성에서 요소를 가져오는 List 값을 생성하는 데 사용됩니다. validElementTypes 는 요소로 허용되는 값의 유형을 나타냅니다. 호출되면 다음 단계를 수행한다.
validElementTypes 가 제공되지 않았으면 validElementTypes 를 any 로 설정합니다.obj 가 Object가 아니면 TypeError 예외를 던집니다.length 를 ? LengthOfArrayLike (obj )로 둡니다.list 를 새로운 빈 List 로 둡니다.index 를 0으로 둡니다.index < length 인 동안 다음 단계를 반복합니다,indexName 을 ! ToString (𝔽 (index ))으로 둡니다.next 를 ? Get (obj , indexName )로 둡니다.validElementTypes 가 property-key 이고 next 가 속성 키가 아니면 TypeError 예외를 던집니다.next 를 list 에 추가합니다.index 를 index + 1로 설정합니다.list 를 반환합니다.
7.3.20 Invoke ( value , propertyKey [ , argList ] )
추상 연산 Invoke. 인수 value (ECMAScript 언어 값 ) 및 propertyKey (프로퍼티 키 ) 및 선택적 인수 argList (리스트 (요소: ECMAScript 언어 값 )). 반환값: (정상 완료 (값: ECMAScript 언어 값 ) 또는 throw 완료 ). ECMAScript 언어 값 의 메서드 프로퍼티를 호출하는 데 사용됩니다. value 는 프로퍼티 조회 지점이면서 호출의 this 값이기도 합니다. argList 는 메서드에 전달되는 인수 값의 목록입니다. argList 가 존재하지 않으면 새로운 빈 List 를 값으로 사용합니다. 호출되면 다음 단계를 수행한다.
argList 가 존재하지 않으면, argList 를 새로운 빈 List 로 설정합니다.func 를 ? GetV (value , propertyKey )로 둡니다.? Call (func , value , argList )를 반환합니다.
7.3.21 OrdinaryHasInstance ( ctor , instance )
추상 연산 OrdinaryHasInstance. 인수 ctor (ECMAScript 언어 값 ) 및 instance (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료 ). instance 가 ctor 가 제공하는 인스턴스 객체 상속 경로에서 상속하는지를 결정하는 기본 알고리즘을 구현합니다. 호출되면 다음 단계를 수행한다.
IsCallable (ctor )이 false 이면, false 를 반환합니다.ctor 에 [[BoundTargetFunction]] 내부 슬롯이 있으면, 다음을 수행합니다.boundCtor 를 ctor .[[BoundTargetFunction]] 으로 둡니다.? InstanceofOperator (instance , boundCtor )를 반환합니다. instance 가 Object가 아니면, false 를 반환합니다.proto 를 ? Get (ctor , "prototype" )로 둡니다.proto 가 Object가 아니면, TypeError 예외를 던집니다.다음을 반복합니다.instance 를 ? instance .[[GetPrototypeOf]] () 로 설정합니다.instance 가 null 이면, false 를 반환합니다.SameValue (proto , instance )가 true 이면, true 를 반환합니다.
7.3.22 SpeciesConstructor ( obj , defaultCtor )
추상 연산 SpeciesConstructor. 인수 obj (Object) 및 defaultCtor (생성자 ). 반환값: (정상 완료 (값: 생성자 ) 또는 throw 완료 ). obj 에서 파생되는 새로운 객체를 생성하는 데 사용해야 하는 생성자 를 가져오는 데 사용됩니다. defaultCtor 는 obj 에서 시작하여 생성자 %Symbol.species% 프로퍼티를 찾을 수 없는 경우 사용할 생성자 입니다. 호출되면 다음 단계를 수행한다.
ctor 를 ? Get (obj , "constructor" )로 둡니다.ctor 가 undefined 이면, defaultCtor 를 반환합니다.ctor 가 Object가 아니면, TypeError 예외를 던집니다.species 를 ? Get (ctor , %Symbol.species% )로 둡니다.species 가 undefined 또는 null 이면, defaultCtor 를 반환합니다.IsConstructor (species )가 true 이면, species 를 반환합니다.TypeError 예외를 던집니다.
7.3.23 EnumerableOwnProperties ( obj , kind )
추상 연산 EnumerableOwnProperties. 인수 obj (Object) 및 kind ((key , value 또는 key+value )). 반환값: (정상 완료 (값: 리스트 (요소: ECMAScript 언어 값 )) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
ownKeys 를 ? obj .[[OwnPropertyKeys]] () 로 둡니다.results 를 새로운 빈 List 로 둡니다.ownKeys 의 각 요소 key 에 대해 다음을 수행합니다.key 가 String이면, 다음을 수행합니다.propertyDesc 를 ? obj .[[GetOwnProperty]] (key ) 로 둡니다.propertyDesc 가 undefined 가 아니고 propertyDesc .[[Enumerable]] 이 true 이면, 다음을 수행합니다.kind 가 key 이면, 다음을 수행합니다.key 를 results 에 추가합니다.그렇지 않으면,value 를 ? Get (obj , key )로 둡니다.kind 가 value 이면, 다음을 수행합니다.value 를 results 에 추가합니다.그렇지 않으면,단언 : kind 는 key+value 입니다.entry 를 CreateArrayFromList (« key , value »)로 둡니다.entry 를 results 에 추가합니다. results 를 반환합니다.
7.3.24 GetFunctionRealm ( func )
추상 연산 GetFunctionRealm. 인수 func (함수 객체 ). 반환값: (정상 완료 (값: Realm 레코드 ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
func 에 [[Realm]] 내부 슬롯이 있으면, 다음을 수행합니다.func .[[Realm]] 을 반환합니다.func 가 바인딩된 함수 특수 객체 이면, 다음을 수행합니다.boundTargetFunc 를 func .[[BoundTargetFunction]] 으로 둡니다.? GetFunctionRealm (boundTargetFunc )을 반환합니다. func 가 Proxy 특수 객체 이면, 다음을 수행합니다.? ValidateNonRevokedProxy (func )를 수행합니다. proxyTarget 을 func .[[ProxyTarget]] 으로 둡니다.단언 : proxyTarget 은 함수 객체 입니다.? GetFunctionRealm (proxyTarget )을 반환합니다. 현재 Realm Record 를 반환합니다.
참고
4 단계에는 func 가 [[Realm]] 내부 슬롯을 갖지 않는 비표준 함수 특수 객체 인 경우에만 도달합니다.
7.3.25 CopyDataProperties ( target , source , excludedItems )
추상 연산 CopyDataProperties. 인수 target (Object), source (ECMAScript 언어 값 ) 및 excludedItems (리스트 (요소: 프로퍼티 키 )). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
source 가 undefined 또는 null 이면, unused 를 반환합니다.from 을 ! ToObject (source )로 둡니다.keys 를 ? from .[[OwnPropertyKeys]] () 로 둡니다.keys 의 각 요소 nextKey 에 대해 다음을 수행합니다.excluded 를 false 로 둡니다.excludedItems 의 각 요소 element 에 대해 다음을 수행합니다.SameValue (element , nextKey )가 true 이면, 다음을 수행합니다.excluded 를 true 로 설정합니다.excluded 가 false 이면, 다음을 수행합니다.propertyDesc 를 ? from .[[GetOwnProperty]] (nextKey ) 로 둡니다.propertyDesc 가 undefined 가 아니고 propertyDesc .[[Enumerable]] 이 true 이면, 다음을 수행합니다.propertyValue 를 ? Get (from , nextKey )로 둡니다.! CreateDataPropertyOrThrow (target , nextKey , propertyValue )를 수행합니다. unused 를 반환합니다.
참고
여기에 전달되는 대상은 항상 새로 생성된 객체이며, 오류가 던져진 경우 직접 접근할 수 없습니다.
7.3.26 PrivateElementFind ( obj , privateName )
추상 연산 PrivateElementFind. 인수 obj (Object) 및 privateName (비공개 이름 ). 반환값: (PrivateElement 또는 empty ). 호출되면 다음 단계를 수행한다.
obj .[[PrivateElements]] 에 entry .[[Key]] 가 privateName 인 PrivateElement entry 가 포함되어 있으면, 다음을 수행합니다.entry 를 반환합니다.empty 를 반환합니다.
7.3.27 PrivateFieldAdd ( obj , privateName , value )
추상 연산 PrivateFieldAdd. 인수 obj (Object), privateName (비공개 이름 ) 및 value (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
호스트 가 웹 브라우저이면, 다음을 수행합니다.? HostEnsureCanAddPrivateElement (obj )를 수행합니다. entry 를 PrivateElementFind (obj , privateName )로 둡니다.entry 가 empty 가 아니면, TypeError 예외를 던집니다.PrivateElement { [[Key]] : privateName , [[Kind]] : field , [[Value]] : value }를 obj .[[PrivateElements]] 에 추가합니다.unused 를 반환합니다.
7.3.28 PrivateMethodOrAccessorAdd ( obj , method )
추상 연산 PrivateMethodOrAccessorAdd. 인수 obj (Object) 및 method (PrivateElement ). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
단언 : method .[[Kind]] 는 method 또는 accessor 입니다.호스트 가 웹 브라우저이면, 다음을 수행합니다.? HostEnsureCanAddPrivateElement (obj )를 수행합니다. entry 를 PrivateElementFind (obj , method .[[Key]] )로 둡니다.entry 가 empty 가 아니면, TypeError 예외를 던집니다.method 를 obj .[[PrivateElements]] 에 추가합니다.unused 를 반환합니다.
참고
비공개 메서드와 접근자의 값은 인스턴스 간에 공유됩니다. 이 연산은 메서드 또는 접근자의 새 복사본을 생성하지 않습니다.
7.3.29 HostEnsureCanAddPrivateElement ( obj )
호스트 정의 추상 연산 HostEnsureCanAddPrivateElement. 인수 obj (Object). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호스트 환경 이 특정 호스트 정의 특수 객체 에 비공개 요소를 추가하는 것을 방지할 수 있도록 합니다.
HostEnsureCanAddPrivateElement의 구현은 다음 요구 사항을 준수해야 합니다:
HostEnsureCanAddPrivateElement의 기본 구현은 NormalCompletion (unused )을 반환하는 것입니다.
이 추상 연산 은 웹 브라우저인 ECMAScript 호스트 에서만 호출됩니다.
7.3.30 PrivateGet ( obj , privateName )
추상 연산 PrivateGet. 인수 obj (Object) 및 privateName (비공개 이름 ). 반환값: (정상 완료 (값: ECMAScript 언어 값 ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
entry 를 PrivateElementFind (obj , privateName )로 둡니다.entry 가 empty 이면, TypeError 예외를 던집니다.entry .[[Kind]] 가 field 또는 method 이면, 다음을 수행합니다.entry .[[Value]] 를 반환합니다.단언 : entry .[[Kind]] 는 accessor 입니다.entry .[[Getter]] 가 undefined 이면, TypeError 예외를 던집니다.getter 를 entry .[[Getter]] 로 둡니다.? Call (getter , obj )를 반환합니다.
7.3.31 PrivateSet ( obj , privateName , value )
추상 연산 PrivateSet. 인수 obj (Object), privateName (비공개 이름 ) 및 value (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
entry 를 PrivateElementFind (obj , privateName )로 둡니다.entry 가 empty 이면, TypeError 예외를 던집니다.entry .[[Kind]] 가 method 이면, TypeError 예외를 던집니다.entry .[[Kind]] 가 field 이면, 다음을 수행합니다.entry .[[Value]] 를 value 로 설정합니다.그렇지 않으면,단언 : entry .[[Kind]] 는 accessor 입니다.entry .[[Setter]] 가 undefined 이면, TypeError 예외를 던집니다.setter 를 entry .[[Setter]] 로 둡니다.? Call (setter , obj , « value »)를 수행합니다. unused 를 반환합니다.
7.3.32 DefineField ( receiver , fieldRecord )
추상 연산 DefineField. 인수 receiver (Object) 및 fieldRecord (ClassFieldDefinition 레코드 ). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
fieldName 을 fieldRecord .[[Name]] 으로 둡니다.initializer 를 fieldRecord .[[Initializer]] 로 둡니다.initializer 가 empty 가 아니면, 다음을 수행합니다.initValue 를 ? Call (initializer , receiver )로 둡니다.그렇지 않으면,initValue 를 undefined 로 둡니다. fieldName 이 Private Name 이면, 다음을 수행합니다.? PrivateFieldAdd (receiver , fieldName , initValue )를 수행합니다. 그렇지 않으면,단언 : fieldName 은 프로퍼티 키 입니다.? CreateDataPropertyOrThrow (receiver , fieldName , initValue )를 수행합니다. unused 를 반환합니다.
7.3.33 InitializeInstanceElements ( obj , ctor )
추상 연산 InitializeInstanceElements. 인수 obj (Object) 및 ctor ((ECMAScript 함수 객체 또는 내장 함수 객체)). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
methods 를 ctor .[[PrivateMethods]] 로 둡니다.methods 의 각 PrivateElement method 에 대해 다음을 수행합니다.? PrivateMethodOrAccessorAdd (obj , method )를 수행합니다. fields 를 ctor .[[Fields]] 로 둡니다.fields 의 각 요소 fieldRecord 에 대해 다음을 수행합니다.? DefineField (obj , fieldRecord )를 수행합니다. unused 를 반환합니다.
7.3.34 AddValueToKeyedGroup ( groups , key , value )
추상 연산 AddValueToKeyedGroup. 인수 groups (리스트 (요소: 레코드 (필드: [[Key]] (ECMAScript 언어 값 ), [[Elements]] (리스트 (요소: ECMAScript 언어 값 ))))), key (ECMAScript 언어 값 ) 및 value (ECMAScript 언어 값 ). 반환값: unused . 호출되면 다음 단계를 수행한다.
groups 의 각 Record { [[Key]] , [[Elements]] } group 에 대해 다음을 수행합니다.SameValue (group .[[Key]] , key )가 true 이면, 다음을 수행합니다.단언 : groups 의 정확히 하나의 요소만 이 기준을 만족합니다.value 를 group .[[Elements]] 에 추가합니다.unused 를 반환합니다.group 을 Record { [[Key]] : key , [[Elements]] : « value » }로 둡니다.group 을 groups 에 추가합니다.unused 를 반환합니다.
7.3.35 GroupBy ( items , callback , keyCoercion )
추상 연산 GroupBy. 인수 items (ECMAScript 언어 값 ), callback (ECMAScript 언어 값 ) 및 keyCoercion ((property 또는 collection )). 반환값: (정상 완료 (값: 리스트 (요소: 레코드 (필드: [[Key]] (ECMAScript 언어 값 ), [[Elements]] (리스트 (요소: ECMAScript 언어 값 ))))) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
? RequireObjectCoercible (items )를 수행합니다. IsCallable (callback )이 false 이면, TypeError 예외를 던집니다.groups 를 새로운 빈 List 로 둡니다.iteratorRecord 를 ? GetIterator (items , sync )로 둡니다.k 를 0으로 둡니다.다음을 반복합니다.k ≥ 253 - 1이면, 다음을 수행합니다.error 를 ThrowCompletion (새로 생성된 TypeError 객체)으로 둡니다.? IteratorClose (iteratorRecord , error )를 반환합니다. next 를 ? IteratorStepValue (iteratorRecord )로 둡니다.next 가 done 이면, 다음을 수행합니다.groups 를 반환합니다.value 를 next 로 둡니다.key 를 Completion (Call (callback , undefined , « value , 𝔽 (k ) »))으로 둡니다.IfAbruptCloseIterator (key , iteratorRecord ).keyCoercion 이 property 이면, 다음을 수행합니다.key 를 Completion (ToPropertyKey (key ))으로 설정합니다.IfAbruptCloseIterator (key , iteratorRecord ).그렇지 않으면,단언 : keyCoercion 은 collection 입니다.key 를 CanonicalizeKeyedCollectionKey (key )로 설정합니다. AddValueToKeyedGroup (groups , key , value )를 수행합니다.k 를 k + 1로 설정합니다.
7.3.36 GetOptionsObject ( options )
추상 연산 GetOptionsObject. 인수 options (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: Object) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
options 가 undefined 이면, 다음을 수행합니다.OrdinaryObjectCreate (null )을 반환합니다.options 가 Object이면, 다음을 수행합니다.options 를 반환합니다.TypeError 예외를 던집니다.
7.3.37 SetterThatIgnoresPrototypeProperties ( thisValue , home , propertyKey , value )
추상 연산 SetterThatIgnoresPrototypeProperties. 인수 thisValue (ECMAScript 언어 값 ), home (Object), propertyKey (프로퍼티 키 ) 및 value (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: unused ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
thisValue 가 Object가 아니면, 다음을 수행합니다.TypeError 예외를 던집니다.SameValue (thisValue , home )가 true 이면, 다음을 수행합니다.참고 : 여기에서 예외를 던지는 것은 엄격 모드 코드 에서 home 객체의 쓰기 불가능한 데이터 프로퍼티 에 할당하는 동작을 모방합니다.TypeError 예외를 던집니다.propertyDesc 를 ? thisValue .[[GetOwnProperty]] (propertyKey )로 둡니다.propertyDesc 가 undefined 이면, 다음을 수행합니다.? CreateDataPropertyOrThrow (thisValue , propertyKey , value )를 수행합니다. 그렇지 않으면,? Set (thisValue , propertyKey , value , true )를 수행합니다. unused 를 반환합니다.
7.4 Iterator 객체에 대한 연산
공통 반복 인터페이스(27.1 )를 참조하시기 바랍니다.
7.4.1 Iterator Record
Iterator Record 는 이터레이터 또는 비동기 이터레이터와 next 메서드를 함께 캡슐화하는 데 사용하는 Record 입니다.
Iterator Record에는 표 13 에 나열된 필드가 있습니다.
표 13: Iterator Record 필드
필드 이름
값
의미
[[Iterator]]
Object
이터레이터 인터페이스 또는 비동기 이터레이터 인터페이스를 준수하는 객체입니다.
[[NextMethod]]
ECMAScript 언어 값
[[Iterator]] 객체의 next 메서드입니다.
[[Done]]
Boolean
이터레이터가 완료되었거나 닫혔는지를 나타냅니다.
7.4.2 GetIteratorDirect ( obj )
추상 연산 GetIteratorDirect. 인수 obj (Object). 반환값: Iterator Record 를 포함하는 정상 완료 또는 throw 완료 . 호출되면 다음 단계를 수행한다.
nextMethod 를 ? Get (obj , "next" )로 둡니다.iteratorRecord 를 Iterator Record { [[Iterator]] : obj , [[NextMethod]] : nextMethod , [[Done]] : false }로 둡니다.iteratorRecord 를 반환합니다.
7.4.3 GetIteratorFromMethod ( obj , method )
추상 연산 GetIteratorFromMethod. 인수 obj (ECMAScript 언어 값 ) 및 method (함수 객체 ). 반환값: Iterator Record 를 포함하는 정상 완료 또는 throw 완료 . 호출되면 다음 단계를 수행한다.
iterator 를 ? Call (method , obj )로 둡니다.iterator 가 Object가 아니면, TypeError 예외를 던집니다.? GetIteratorDirect (iterator )를 반환합니다.
7.4.4 GetIterator ( obj , kind )
추상 연산 GetIterator. 인수 obj (ECMAScript 언어 값 ) 및 kind (sync 또는 async ). 반환값: Iterator Record 를 포함하는 정상 완료 또는 throw 완료 . 호출되면 다음 단계를 수행한다.
kind 가 async 이면, 다음을 수행합니다.method 를 ? GetMethod (obj , %Symbol.asyncIterator% )로 둡니다.method 가 undefined 이면, 다음을 수행합니다.syncMethod 를 ? GetMethod (obj , %Symbol.iterator% )로 둡니다.syncMethod 가 undefined 이면, TypeError 예외를 던집니다.syncIteratorRecord 를 ? GetIteratorFromMethod (obj , syncMethod )로 둡니다.CreateAsyncFromSyncIterator (syncIteratorRecord )를 반환합니다.그렇지 않으면,method 를 ? GetMethod (obj , %Symbol.iterator% )로 둡니다. method 가 undefined 이면, TypeError 예외를 던집니다.? GetIteratorFromMethod (obj , method )를 반환합니다.
7.4.5 GetIteratorFlattenable ( obj , primitiveHandling )
추상 연산 GetIteratorFlattenable. 인수 obj (ECMAScript 언어 값 ) 및 primitiveHandling (iterate-string-primitives 또는 reject-primitives ). 반환값: Iterator Record 를 포함하는 정상 완료 또는 throw 완료 . 호출되면 다음 단계를 수행한다.
obj 가 Object가 아니면, 다음을 수행합니다.primitiveHandling 이 reject-primitives 이면, TypeError 예외를 던집니다.단언 : primitiveHandling 은 iterate-string-primitives 입니다.obj 가 String이 아니면, TypeError 예외를 던집니다.method 를 ? GetMethod (obj , %Symbol.iterator% )로 둡니다.method 가 undefined 이면, 다음을 수행합니다.iterator 를 obj 로 둡니다.그렇지 않으면,iterator 를 ? Call (method , obj )로 둡니다. iterator 가 Object가 아니면, TypeError 예외를 던집니다.? GetIteratorDirect (iterator )를 반환합니다.
7.4.6 IteratorNext ( iteratorRecord [ , value ] )
추상 연산 IteratorNext. 인수 iteratorRecord (Iterator 레코드 ) 및 선택적 인수 value (ECMAScript 언어 값 ). 반환값: (정상 완료 (값: Object) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
value 가 존재하지 않으면, 다음을 수행합니다.result 를 Completion (Call (iteratorRecord .[[NextMethod]] , iteratorRecord .[[Iterator]] ))으로 둡니다.그렇지 않으면,result 를 Completion (Call (iteratorRecord .[[NextMethod]] , iteratorRecord .[[Iterator]] , « value »))으로 둡니다. result 가 throw 완료 이면, 다음을 수행합니다.iteratorRecord .[[Done]] 을 true 로 설정합니다.? result 를 반환합니다. result 를 ! result 로 설정합니다.result 가 Object가 아니면, 다음을 수행합니다.iteratorRecord .[[Done]] 을 true 로 설정합니다.TypeError 예외를 던집니다.result 를 반환합니다.
7.4.7 IteratorComplete ( iteratorResult )
추상 연산 IteratorComplete. 인수 iteratorResult (Object). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
ToBoolean (? Get (iteratorResult , "done" ))을 반환합니다.
7.4.8 IteratorValue ( iteratorResult )
추상 연산 IteratorValue. 인수 iteratorResult (Object). 반환값: (정상 완료 (값: ECMAScript 언어 값 ) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
? Get (iteratorResult , "value" )를 반환합니다.
7.4.9 IteratorStep ( iteratorRecord )
추상 연산 IteratorStep. 인수 iteratorRecord (Iterator 레코드 ). 반환값: (정상 완료 (값: (Object 또는 done )) 또는 throw 완료 ). iteratorRecord .[[NextMethod]] 을 호출하여 iteratorRecord .[[Iterator]] 에서 다음 값을 요청하고, 이터레이터가 끝에 도달했음을 나타내는 done 또는 다음 값이 있으면 IteratorResult 객체를 반환합니다. 호출되면 다음 단계를 수행한다.
result 를 ? IteratorNext (iteratorRecord )로 둡니다.done 을 Completion (IteratorComplete (result ))으로 둡니다.done 이 throw 완료 이면, 다음을 수행합니다.iteratorRecord .[[Done]] 을 true 로 설정합니다.? done 을 반환합니다. done 을 ! done 으로 설정합니다.done 이 true 이면, 다음을 수행합니다.iteratorRecord .[[Done]] 을 true 로 설정합니다.done 을 반환합니다.result 를 반환합니다.
7.4.10 IteratorStepValue ( iteratorRecord )
추상 연산 IteratorStepValue. 인수 iteratorRecord (Iterator 레코드 ). 반환값: (정상 완료 (값: (ECMAScript 언어 값 또는 done )) 또는 throw 완료 ). iteratorRecord .[[NextMethod]] 을 호출하여 iteratorRecord .[[Iterator]] 에서 다음 값을 요청하고, 이터레이터가 끝에 도달했음을 나타내는 done 또는 다음 값이 있으면 IteratorResult 객체의 값을 반환합니다. 호출되면 다음 단계를 수행한다.
result 를 ? IteratorStep (iteratorRecord )로 둡니다.result 가 done 이면, 다음을 수행합니다.done 을 반환합니다.value 를 Completion (IteratorValue (result ))으로 둡니다.value 가 throw 완료 이면, 다음을 수행합니다.iteratorRecord .[[Done]] 을 true 로 설정합니다.? value 를 반환합니다.
7.4.11 IteratorClose ( iteratorRecord , completion )
추상 연산 IteratorClose. 인수 iteratorRecord (Iterator 레코드 ) 및 completion (완료 레코드 ). 반환값: 완료 레코드 . 이터레이터가 완료 상태에 도달했을 때 일반적으로 수행하는 동작을 수행해야 함을 해당 이터레이터에 알리는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
단언 : iteratorRecord .[[Iterator]] 는 Object입니다.iterator 를 iteratorRecord .[[Iterator]] 로 둡니다.innerResult 를 Completion (GetMethod (iterator , "return" ))으로 둡니다.innerResult 가 정상 완료 이면, 다음을 수행합니다.return 을 innerResult .[[Value]] 로 둡니다.return 이 undefined 이면, ? completion 을 반환합니다.innerResult 를 Completion (Call (return , iterator ))으로 설정합니다.completion 이 throw 완료 이면, ? completion 을 반환합니다.innerResult 가 throw 완료 이면, ? innerResult 를 반환합니다.innerResult .[[Value]] 가 Object가 아니면, TypeError 예외를 던집니다.? completion 을 반환합니다.
7.4.12 IteratorCloseAll ( iterators , completion )
추상 연산 IteratorCloseAll. 인수 iterators (리스트 (요소: Iterator 레코드 )) 및 completion (완료 레코드 ). 반환값: 완료 레코드 . 호출되면 다음 단계를 수행한다.
iterators 의 각 요소 iterator 에 대해 List 역순으로 다음을 수행합니다.completion 을 Completion (IteratorClose (iterator , completion ))으로 설정합니다.? completion 을 반환합니다.
7.4.13 IfAbruptCloseIterator ( value , iteratorRecord )
IfAbruptCloseIterator는 Iterator Record 를 사용하는 알고리즘 단계 시퀀스의 축약 표현입니다. 다음 형식의 알고리즘 단계:
IfAbruptCloseIterator (value , iteratorRecord ).
는 다음과 같은 의미입니다:
단언 : value 는 Completion Record 입니다.value 가 비정상 완료 이면, ? IteratorClose (iteratorRecord , value )를 반환합니다.value 를 ! value 로 설정합니다.
7.4.14 IfAbruptCloseIterators ( value , iteratorRecords )
IfAbruptCloseIterators는 Iterator Record 의 목록을 사용하는 알고리즘 단계 시퀀스의 축약 표현입니다. 다음 형식의 알고리즘 단계:
IfAbruptCloseIterators (value , iteratorRecords ).
는 다음과 같은 의미입니다:
단언 : value 는 Completion Record 입니다.value 가 비정상 완료 이면, ? IteratorCloseAll (iteratorRecords , value )을 반환합니다.value 를 ! value 로 설정합니다.
7.4.15 AsyncIteratorClose ( iteratorRecord , completion )
추상 연산 AsyncIteratorClose. 인수 iteratorRecord (Iterator 레코드 ) 및 completion (완료 레코드 ). 반환값: 완료 레코드 . 비동기 이터레이터가 완료 상태에 도달했을 때 일반적으로 수행하는 동작을 수행해야 함을 해당 이터레이터에 알리는 데 사용됩니다. 호출되면 다음 단계를 수행한다.
단언 : iteratorRecord .[[Iterator]] 는 Object입니다.iterator 를 iteratorRecord .[[Iterator]] 로 둡니다.innerResult 를 Completion (GetMethod (iterator , "return" ))으로 둡니다.innerResult 가 정상 완료 이면, 다음을 수행합니다.return 을 innerResult .[[Value]] 로 둡니다.return 이 undefined 이면, ? completion 을 반환합니다.innerResult 를 Completion (Call (return , iterator ))으로 설정합니다.innerResult 가 정상 완료 이면, innerResult 를 Completion (Await (innerResult .[[Value]] ))으로 설정합니다.completion 이 throw 완료 이면, ? completion 을 반환합니다.innerResult 가 throw 완료 이면, ? innerResult 를 반환합니다.innerResult .[[Value]] 가 Object가 아니면, TypeError 예외를 던집니다.? completion 을 반환합니다.
7.4.16 IfAbruptCloseAsyncIterator ( value , iteratorRecord )
IfAbruptCloseAsyncIterator는 Iterator Record 를 사용하는 알고리즘 단계 시퀀스의 축약 표현입니다. 다음 형식의 알고리즘 단계:
IfAbruptCloseAsyncIterator (value , iteratorRecord ).
는 다음과 같은 의미입니다:
단언 : value 는 Completion Record 입니다.value 가 비정상 완료 이면, ? AsyncIteratorClose (iteratorRecord , value )를 반환합니다.value 를 ! value 로 설정합니다.
7.4.17 CreateIteratorResultObject ( value , done )
추상 연산 CreateIteratorResultObject. 인수 value (ECMAScript 언어 값 ) 및 done (Boolean). 반환값: an Object that conforms to the IteratorResult interface. IteratorResult 인터페이스 를 준수하는 객체를 생성합니다. 호출되면 다음 단계를 수행한다.
obj 를 OrdinaryObjectCreate (%Object.prototype% )로 둡니다.! CreateDataPropertyOrThrow (obj , "value" , value )를 수행합니다. ! CreateDataPropertyOrThrow (obj , "done" , done )을 수행합니다. obj 를 반환합니다.
7.4.18 CreateListIteratorRecord ( list )
추상 연산 CreateListIteratorRecord. 인수 list (리스트 (요소: ECMAScript 언어 값 )). 반환값: Iterator 레코드 . [[NextMethod]] 가 list 의 연속된 요소를 반환하는 Iterator Record 를 생성합니다. 호출되면 다음 단계를 수행한다.
closure 를 매개변수가 없고 list 를 캡처하며 호출될 때 다음 단계를 수행하는 새로운 Abstract Closure 로 둡니다:list 의 각 요소 value 에 대해 다음을 수행합니다.? GeneratorYield (CreateIteratorResultObject (value , false ))를 수행합니다. NormalCompletion (undefined )을 반환합니다.iterator 를 CreateIteratorFromClosure (closure , empty , %Iterator.prototype% )로 둡니다.Iterator Record { [[Iterator]] : iterator , [[NextMethod]] : %GeneratorPrototype.next%, [[Done]] : false }를 반환합니다.
참고
목록 이터레이터 객체에는 ECMAScript 코드에서 직접 접근할 수 없습니다.
7.4.19 IteratorToList ( iteratorRecord )
추상 연산 IteratorToList. 인수 iteratorRecord (Iterator 레코드 ). 반환값: (정상 완료 (값: 리스트 (요소: ECMAScript 언어 값 )) 또는 throw 완료 ). 호출되면 다음 단계를 수행한다.
values 를 새로운 빈 List 로 둡니다.다음을 반복합니다.next 를 ? IteratorStepValue (iteratorRecord )로 둡니다.next 가 done 이면, 다음을 수행합니다.values 를 반환합니다.next 를 values 에 추가합니다.