페이지 표시 설정

20 기본 객체

20.1 Object 객체

20.1.1 Object 생성자

Object 생성자는:

  • %Object%입니다.
  • 전역 객체의 "Object" 프로퍼티 초기 값입니다.
  • 생성자로 호출되면 새로운 일반 객체를 생성합니다.
  • 생성자가 아니라 함수로 호출되면 타입 변환을 수행합니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있습니다.

20.1.1.1 Object ( value )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. NewTarget이 undefined도 활성 함수 객체도 아니면, 다음을 수행합니다.
    1. ? OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%")를 반환합니다.
  2. value가 undefined 또는 null이면 OrdinaryObjectCreate(%Object.prototype%)를 반환합니다.
  3. ! ToObject(value)를 반환합니다.

20.1.2 Object 생성자의 프로퍼티

Object 생성자는:

  • 값이 %Function.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • 다음과 같은 추가 프로퍼티를 갖습니다:

20.1.2.1 Object.assign ( target, ...sources )

이 함수는 하나 이상의 소스 객체에서 열거 가능한 모든 자체 프로퍼티의 값을 target 객체로 복사합니다.

호출되면 다음 단계를 수행합니다:

  1. targetObj를 ? ToObject(target)로 둡니다.
  2. 인수가 하나만 전달되었으면 targetObj를 반환합니다.
  3. sources의 각 요소 nextSource에 대해 다음을 수행합니다.
    1. nextSource가 undefined도 null도 아니면, 다음을 수행합니다.
      1. from을 ! ToObject(nextSource)로 둡니다.
      2. keys를 ? from.[[OwnPropertyKeys]]()로 둡니다.
      3. keys의 각 요소 nextKey에 대해 다음을 수행합니다.
        1. propertyDesc를 ? from.[[GetOwnProperty]](nextKey)로 둡니다.
        2. propertyDesc가 undefined가 아니고 propertyDesc.[[Enumerable]]이 true이면, 다음을 수행합니다.
          1. propertyValue를 ? Get(from, nextKey)로 둡니다.
          2. ? Set(targetObj, nextKey, propertyValue, true)를 수행합니다.
  4. targetObj를 반환합니다.

이 함수의 "length" 프로퍼티는 2𝔽입니다.

20.1.2.2 Object.create ( proto, properties )

이 함수는 지정된 프로토타입을 갖는 새로운 객체를 생성합니다.

호출되면 다음 단계를 수행합니다:

  1. proto가 Object가 아니고 proto가 null도 아니면 TypeError 예외를 던집니다.
  2. obj를 OrdinaryObjectCreate(proto)로 둡니다.
  3. properties가 undefined가 아니면, 다음을 수행합니다.
    1. ? ObjectDefineProperties(obj, properties)를 반환합니다.
  4. obj를 반환합니다.

20.1.2.3 Object.defineProperties ( obj, properties )

이 함수는 객체에 자체 프로퍼티를 추가하거나 기존 자체 프로퍼티의 속성을 갱신합니다.

호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 TypeError 예외를 던집니다.
  2. ? ObjectDefineProperties(obj, properties)를 반환합니다.

20.1.2.3.1 ObjectDefineProperties ( obj, properties )

추상 연산 ObjectDefineProperties. 인수 obj (Object) 및 properties (ECMAScript 언어 값). 반환값: (정상 완료 (값: Object) 또는 throw 완료). 호출되면 다음 단계를 수행한다.

  1. properties를 ? ToObject(properties)로 설정합니다.
  2. keys를 ? properties.[[OwnPropertyKeys]]()로 둡니다.
  3. propertyDescs를 새로운 빈 List로 둡니다.
  4. keys의 각 요소 nextKey에 대해 다음을 수행합니다.
    1. currentPropertyDesc를 ? properties.[[GetOwnProperty]](nextKey)로 둡니다.
    2. currentPropertyDesc가 undefined가 아니고 currentPropertyDesc.[[Enumerable]]이 true이면, 다음을 수행합니다.
      1. propertyDescObj를 ? Get(properties, nextKey)로 둡니다.
      2. propertyDesc를 ? ToPropertyDescriptor(propertyDescObj)로 둡니다.
      3. Record { [[Key]]: nextKey, [[Descriptor]]: propertyDesc }를 propertyDescs에 추가합니다.
  5. propertyDescs의 각 요소 property에 대해 다음을 수행합니다.
    1. ? DefinePropertyOrThrow(obj, property.[[Key]], property.[[Descriptor]])를 수행합니다.
  6. obj를 반환합니다.

20.1.2.4 Object.defineProperty ( obj, key, attrs )

이 함수는 객체에 자체 프로퍼티를 추가하거나 기존 자체 프로퍼티의 속성을 갱신합니다.

호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 TypeError 예외를 던집니다.
  2. propertyKey를 ? ToPropertyKey(key)로 둡니다.
  3. propertyDesc를 ? ToPropertyDescriptor(attrs)로 둡니다.
  4. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc)를 수행합니다.
  5. obj를 반환합니다.

20.1.2.5 Object.entries ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. coerced를 ? ToObject(obj)로 둡니다.
  2. entryList를 ? EnumerableOwnProperties(coerced, key+value)로 둡니다.
  3. CreateArrayFromList(entryList)를 반환합니다.

20.1.2.6 Object.freeze ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 obj를 반환합니다.
  2. status를 ? SetIntegrityLevel(obj, frozen)으로 둡니다.
  3. status가 false이면 TypeError 예외를 던집니다.
  4. obj를 반환합니다.

20.1.2.7 Object.fromEntries ( iterable )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. ? RequireObjectCoercible(iterable)을 수행합니다.
  2. obj를 OrdinaryObjectCreate(%Object.prototype%)로 둡니다.
  3. 단언: obj는 자체 프로퍼티가 없는 확장 가능한 일반 객체입니다.
  4. closure를 매개변수 (key, value)를 갖고 obj를 캡처하며 호출될 때 다음 단계를 수행하는 새로운 Abstract Closure로 둡니다:
    1. propertyKey를 ? ToPropertyKey(key)로 둡니다.
    2. ! CreateDataPropertyOrThrow(obj, propertyKey, value)를 수행합니다.
    3. NormalCompletion(undefined)을 반환합니다.
  5. adder를 CreateBuiltinFunction(closure, 2, "", « »)로 둡니다.
  6. ? AddEntriesFromIterable(obj, iterable, adder)를 반환합니다.
참고
adder를 위해 생성된 함수는 ECMAScript 코드에서 절대로 직접 접근할 수 없습니다.

20.1.2.8 Object.getOwnPropertyDescriptor ( obj, key )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. coerced를 ? ToObject(obj)로 둡니다.
  2. propertyKey를 ? ToPropertyKey(key)로 둡니다.
  3. propertyDesc를 ? coerced.[[GetOwnProperty]](propertyKey)로 둡니다.
  4. FromPropertyDescriptor(propertyDesc)를 반환합니다.

20.1.2.9 Object.getOwnPropertyDescriptors ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. coerced를 ? ToObject(obj)로 둡니다.
  2. ownKeys를 ? coerced.[[OwnPropertyKeys]]()로 둡니다.
  3. descs를 OrdinaryObjectCreate(%Object.prototype%)로 둡니다.
  4. ownKeys의 각 요소 key에 대해 다음을 수행합니다.
    1. propertyDesc를 ? coerced.[[GetOwnProperty]](key)로 둡니다.
    2. propertyDescObj를 FromPropertyDescriptor(propertyDesc)로 둡니다.
    3. propertyDescObj가 undefined가 아니면 ! CreateDataPropertyOrThrow(descs, key, propertyDescObj)를 수행합니다.
  5. descs를 반환합니다.

20.1.2.10 Object.getOwnPropertyNames ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. CreateArrayFromList(? GetOwnPropertyKeys(obj, string))를 반환합니다.

20.1.2.11 Object.getOwnPropertySymbols ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. CreateArrayFromList(? GetOwnPropertyKeys(obj, symbol))를 반환합니다.

20.1.2.11.1 GetOwnPropertyKeys ( value, type )

추상 연산 GetOwnPropertyKeys. 인수 value (ECMAScript 언어 값) 및 type ((string 또는 symbol)). 반환값: (정상 완료 (값: 리스트 (요소: 프로퍼티 키)) 또는 throw 완료). 호출되면 다음 단계를 수행한다.

  1. obj를 ? ToObject(value)로 둡니다.
  2. keys를 ? obj.[[OwnPropertyKeys]]()로 둡니다.
  3. nameList를 새로운 빈 List로 둡니다.
  4. keys의 각 요소 nextKey에 대해 다음을 수행합니다.
    1. nextKey가 Symbol이고 type이 symbol이거나, nextKey가 String이고 type이 string이면, 다음을 수행합니다.
      1. nextKey를 nameList에 추가합니다.
  5. nameList를 반환합니다.

20.1.2.12 Object.getPrototypeOf ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. coerced를 ? ToObject(obj)로 둡니다.
  2. ? coerced.[[GetPrototypeOf]]()를 반환합니다.

20.1.2.13 Object.groupBy ( items, callback )

참고

callback은 두 개의 인수를 받는 함수여야 합니다. groupBy는 items의 각 요소에 대해 오름차순으로 callback을 한 번씩 호출하고 새로운 객체를 구성합니다. callback이 반환한 각 값은 프로퍼티 키로 강제 변환됩니다. 이러한 각 프로퍼티 키에 대해 결과 객체는 해당 키를 프로퍼티 키로 하고 callback 반환 값이 해당 키로 강제 변환된 모든 요소를 포함하는 배열을 값으로 하는 프로퍼티를 갖습니다.

callback은 요소의 값과 요소의 인덱스라는 두 개의 인수로 호출됩니다.

groupBy의 반환 값은 %Object.prototype%에서 상속하지 않는 객체입니다.

이 함수는 호출되면 다음 단계를 수행합니다:

  1. groups를 ? GroupBy(items, callback, property)로 둡니다.
  2. obj를 OrdinaryObjectCreate(null)로 둡니다.
  3. groups의 각 Record { [[Key]], [[Elements]] } group에 대해 다음을 수행합니다.
    1. elements를 CreateArrayFromList(group.[[Elements]])로 둡니다.
    2. ! CreateDataPropertyOrThrow(obj, group.[[Key]], elements)를 수행합니다.
  4. obj를 반환합니다.

20.1.2.14 Object.hasOwn ( obj, key )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. coerced를 ? ToObject(obj)로 둡니다.
  2. propertyKey를 ? ToPropertyKey(key)로 둡니다.
  3. ? HasOwnProperty(coerced, propertyKey)를 반환합니다.

20.1.2.15 Object.is ( value1, value2 )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. SameValue(value1, value2)를 반환합니다.

20.1.2.16 Object.isExtensible ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 false를 반환합니다.
  2. ? IsExtensible(obj)을 반환합니다.

20.1.2.17 Object.isFrozen ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 true를 반환합니다.
  2. ? TestIntegrityLevel(obj, frozen)을 반환합니다.

20.1.2.18 Object.isSealed ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 true를 반환합니다.
  2. ? TestIntegrityLevel(obj, sealed)을 반환합니다.

20.1.2.19 Object.keys ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. coerced를 ? ToObject(obj)로 둡니다.
  2. keyList를 ? EnumerableOwnProperties(coerced, key)로 둡니다.
  3. CreateArrayFromList(keyList)를 반환합니다.

20.1.2.20 Object.preventExtensions ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 obj를 반환합니다.
  2. status를 ? obj.[[PreventExtensions]]()로 둡니다.
  3. status가 false이면 TypeError 예외를 던집니다.
  4. obj를 반환합니다.

20.1.2.21 Object.prototype

Object.prototype의 초기 값은 Object 프로토타입 객체입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.1.2.22 Object.seal ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. obj가 Object가 아니면 obj를 반환합니다.
  2. status를 ? SetIntegrityLevel(obj, sealed)로 둡니다.
  3. status가 false이면 TypeError 예외를 던집니다.
  4. obj를 반환합니다.

20.1.2.23 Object.setPrototypeOf ( obj, proto )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. ? RequireObjectCoercible(obj)을 수행합니다.
  2. proto가 Object가 아니고 proto가 null도 아니면 TypeError 예외를 던집니다.
  3. obj가 Object가 아니면 obj를 반환합니다.
  4. status를 ? obj.[[SetPrototypeOf]](proto)로 둡니다.
  5. status가 false이면 TypeError 예외를 던집니다.
  6. obj를 반환합니다.

20.1.2.24 Object.values ( obj )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. coerced를 ? ToObject(obj)로 둡니다.
  2. valueList를 ? EnumerableOwnProperties(coerced, value)로 둡니다.
  3. CreateArrayFromList(valueList)를 반환합니다.

20.1.3 Object 프로토타입 객체의 프로퍼티

Object 프로토타입 객체는:

  • %Object.prototype%입니다.
  • 값이 true인 [[Extensible]] 내부 슬롯을 갖습니다.
  • 10.4.7.1에 정의된 [[SetPrototypeOf]] 메서드를 제외하고 일반 객체에 정의된 내부 메서드를 갖습니다. (따라서 불변 프로토타입 특수 객체입니다.)
  • 값이 null인 [[Prototype]] 내부 슬롯을 갖습니다.

20.1.3.1 Object.prototype.constructor

Object.prototype.constructor의 초기 값은 %Object%입니다.

20.1.3.2 Object.prototype.hasOwnProperty ( value )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. propertyKey를 ? ToPropertyKey(value)로 둡니다.
  2. obj를 ? ToObject(this 값)로 둡니다.
  3. ? HasOwnProperty(obj, propertyKey)를 반환합니다.
참고

1 및 2 단계의 순서는 this 값이 undefined 또는 null인 경우에도 이 명세의 이전 판에서 1 단계가 던졌을 예외가 계속 던져지도록 하기 위해 선택되었습니다.

20.1.3.3 Object.prototype.isPrototypeOf ( value )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. value가 Object가 아니면 false를 반환합니다.
  2. obj를 ? ToObject(this 값)로 둡니다.
  3. 다음을 반복합니다.
    1. value를 ? value.[[GetPrototypeOf]]()로 설정합니다.
    2. value가 null이면 false를 반환합니다.
    3. SameValue(obj, value)가 true이면 true를 반환합니다.
참고

1 및 2 단계의 순서는 value가 객체가 아니고 this 값이 undefined 또는 null인 경우에 대해 이 명세의 이전 판에서 명시한 동작을 보존합니다.

20.1.3.4 Object.prototype.propertyIsEnumerable ( value )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. propertyKey를 ? ToPropertyKey(value)로 둡니다.
  2. obj를 ? ToObject(this 값)로 둡니다.
  3. propertyDesc를 ? obj.[[GetOwnProperty]](propertyKey)로 둡니다.
  4. propertyDesc가 undefined이면 false를 반환합니다.
  5. propertyDesc.[[Enumerable]]을 반환합니다.
참고 1

이 메서드는 프로토타입 체인의 객체를 고려하지 않습니다.

참고 2

1 및 2 단계의 순서는 this 값이 undefined 또는 null인 경우에도 이 명세의 이전 판에서 1 단계가 던졌을 예외가 계속 던져지도록 하기 위해 선택되었습니다.

20.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. thisValue를 this 값으로 둡니다.
  2. ? Invoke(thisValue, "toString")을 반환합니다.

이 메서드의 선택적 매개변수는 사용되지 않지만 ECMA-402 toLocaleString 메서드가 사용하는 매개변수 패턴에 대응하도록 의도되었습니다. ECMA-402 지원을 포함하지 않는 구현체는 해당 매개변수 위치를 다른 목적으로 사용해서는 안 됩니다.

참고 1

이 메서드는 로케일에 민감한 toString 동작을 갖지 않는 객체에 대한 일반적인 toLocaleString 구현을 제공합니다. Array, Number, Date 및 %TypedArray%는 각자의 로케일에 민감한 toLocaleString 메서드를 제공합니다.

참고 2

ECMA-402는 의도적으로 이 기본 구현의 대안을 제공하지 않습니다.

20.1.3.6 Object.prototype.toString ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. this 값이 undefined이면 "[object Undefined]"를 반환합니다.
  2. this 값이 null이면 "[object Null]"을 반환합니다.
  3. obj를 ! ToObject(this 값)로 둡니다.
  4. isArray를 ? IsArray(obj)로 둡니다.
  5. isArray가 true이면 builtinTag를 "Array"로 둡니다.
  6. 그렇지 않고 obj가 [[ParameterMap]] 내부 슬롯을 가지면 builtinTag를 "Arguments"로 둡니다.
  7. 그렇지 않고 obj가 [[Call]] 내부 메서드를 가지면 builtinTag를 "Function"으로 둡니다.
  8. 그렇지 않고 obj가 [[ErrorData]] 내부 슬롯을 가지면 builtinTag를 "Error"로 둡니다.
  9. 그렇지 않고 obj가 [[BooleanData]] 내부 슬롯을 가지면 builtinTag를 "Boolean"으로 둡니다.
  10. 그렇지 않고 obj가 [[NumberData]] 내부 슬롯을 가지면 builtinTag를 "Number"로 둡니다.
  11. 그렇지 않고 obj가 [[StringData]] 내부 슬롯을 가지면 builtinTag를 "String"으로 둡니다.
  12. 그렇지 않고 obj가 [[DateValue]] 내부 슬롯을 가지면 builtinTag를 "Date"로 둡니다.
  13. 그렇지 않고 obj가 [[RegExpMatcher]] 내부 슬롯을 가지면 builtinTag를 "RegExp"로 둡니다.
  14. 그렇지 않으면 builtinTag를 "Object"로 둡니다.
  15. tag를 ? Get(obj, %Symbol.toStringTag%)로 둡니다.
  16. tag가 String이 아니면 tag를 builtinTag로 설정합니다.
  17. "[object ", tag 및 "]"의 문자열 연결을 반환합니다.
참고

역사적으로 이 메서드는 이 명세의 이전 판에서 다양한 내장 객체의 명목상 타입 태그로 사용된 [[Class]] 내부 슬롯의 String 값에 접근하는 데 간혹 사용되었습니다. 위의 toString 정의는 이러한 특정 종류의 내장 객체를 검사하기 위해 toString을 사용하는 레거시 코드와의 호환성을 보존합니다. 다른 종류의 내장 객체 또는 프로그램 정의 객체에 대해서는 신뢰할 수 있는 타입 검사 메커니즘을 제공하지 않습니다. 또한 프로그램은 이러한 레거시 타입 검사의 신뢰성을 무효화하는 방식으로 %Symbol.toStringTag%를 사용할 수 있습니다.

20.1.3.7 Object.prototype.valueOf ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. ? ToObject(this 값)를 반환합니다.
규정 선택 사항, 레거시

20.1.3.8 Object.prototype.__proto__

Object.prototype.__proto__는 { [[Enumerable]]: false, [[Configurable]]: true } 속성을 갖는 접근자 프로퍼티입니다. [[Getter]] 및 [[Setter]] 속성은 다음과 같이 정의됩니다:

20.1.3.8.1 get Object.prototype.__proto__

[[Getter]] 속성의 값은 인수를 필요로 하지 않는 내장 함수입니다. 호출되면 다음 단계를 수행합니다:

  1. obj를 ? ToObject(this 값)로 둡니다.
  2. ? obj.[[GetPrototypeOf]]()를 반환합니다.

20.1.3.8.2 set Object.prototype.__proto__

[[Setter]] 속성의 값은 인수 proto를 받는 내장 함수입니다. 호출되면 다음 단계를 수행합니다:

  1. thisValue를 this 값으로 둡니다.
  2. ? RequireObjectCoercible(thisValue)을 수행합니다.
  3. proto가 Object가 아니고 proto가 null도 아니면 undefined를 반환합니다.
  4. thisValue가 Object가 아니면 undefined를 반환합니다.
  5. status를 ? thisValue.[[SetPrototypeOf]](proto)로 둡니다.
  6. status가 false이면 TypeError 예외를 던집니다.
  7. undefined를 반환합니다.
규정 선택 사항, 레거시

20.1.3.9 레거시 Object.prototype 접근자 메서드

20.1.3.9.1 Object.prototype.__defineGetter__ ( key, getter )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. obj를 ? ToObject(this 값)로 둡니다.
  2. IsCallable(getter)가 false이면 TypeError 예외를 던집니다.
  3. propertyDesc를 PropertyDescriptor { [[Getter]]: getter, [[Enumerable]]: true, [[Configurable]]: true }로 둡니다.
  4. propertyKey를 ? ToPropertyKey(key)로 둡니다.
  5. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc)를 수행합니다.
  6. undefined를 반환합니다.

20.1.3.9.2 Object.prototype.__defineSetter__ ( key, setter )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. obj를 ? ToObject(this 값)로 둡니다.
  2. IsCallable(setter)가 false이면 TypeError 예외를 던집니다.
  3. propertyDesc를 PropertyDescriptor { [[Setter]]: setter, [[Enumerable]]: true, [[Configurable]]: true }로 둡니다.
  4. propertyKey를 ? ToPropertyKey(key)로 둡니다.
  5. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc)를 수행합니다.
  6. undefined를 반환합니다.

20.1.3.9.3 Object.prototype.__lookupGetter__ ( key )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. obj를 ? ToObject(this 값)로 둡니다.
  2. propertyKey를 ? ToPropertyKey(key)로 둡니다.
  3. 다음을 반복합니다.
    1. propertyDesc를 ? obj.[[GetOwnProperty]](propertyKey)로 둡니다.
    2. propertyDesc가 undefined가 아니면, 다음을 수행합니다.
      1. IsAccessorDescriptor(propertyDesc)가 true이면 propertyDesc.[[Getter]]를 반환합니다.
      2. undefined를 반환합니다.
    3. obj를 ? obj.[[GetPrototypeOf]]()로 설정합니다.
    4. obj가 null이면 undefined를 반환합니다.

20.1.3.9.4 Object.prototype.__lookupSetter__ ( key )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. obj를 ? ToObject(this 값)로 둡니다.
  2. propertyKey를 ? ToPropertyKey(key)로 둡니다.
  3. 다음을 반복합니다.
    1. propertyDesc를 ? obj.[[GetOwnProperty]](propertyKey)로 둡니다.
    2. propertyDesc가 undefined가 아니면, 다음을 수행합니다.
      1. IsAccessorDescriptor(propertyDesc)가 true이면 propertyDesc.[[Setter]]를 반환합니다.
      2. undefined를 반환합니다.
    3. obj를 ? obj.[[GetPrototypeOf]]()로 설정합니다.
    4. obj가 null이면 undefined를 반환합니다.

20.1.4 Object 인스턴스의 프로퍼티

Object 인스턴스에는 Object 프로토타입 객체에서 상속된 프로퍼티 외에 특별한 프로퍼티가 없습니다.

20.2 Function 객체

20.2.1 Function 생성자

Function 생성자는:

  • %Function%입니다.
  • 전역 객체의 "Function" 프로퍼티 초기 값입니다.
  • 생성자가 아니라 함수로 호출되면 새로운 함수 객체를 생성하고 초기화합니다. 따라서 함수 호출 Function(…)은 동일한 인수를 사용한 객체 생성 표현식 new Function(…)과 동등합니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있습니다. 명시된 Function 동작을 상속하려는 하위 클래스 생성자는 내장 함수 동작에 필요한 내부 슬롯을 갖는 하위 클래스 인스턴스를 생성하고 초기화하기 위해 Function 생성자에 대한 super 호출을 포함해야 합니다. 함수 객체를 정의하는 모든 ECMAScript 구문 형식은 Function의 인스턴스를 생성합니다. 내장 GeneratorFunction, AsyncFunction 및 AsyncGeneratorFunction 하위 클래스를 제외하고 Function 하위 클래스의 인스턴스를 생성하는 구문적 방법은 없습니다.

20.2.1.1 Function ( ...paramArgs, bodyArg )

마지막 인수(있는 경우)는 함수의 본문(실행 가능한 코드)을 지정하며, 그 앞의 모든 인수는 형식 매개변수를 지정합니다.

이 함수는 호출되면 다음 단계를 수행합니다:

  1. ctor를 활성 함수 객체로 둡니다.
  2. bodyArg가 존재하지 않으면 bodyArg를 빈 String으로 설정합니다.
  3. ? CreateDynamicFunction(ctor, NewTarget, normal, paramArgs, bodyArg)을 반환합니다.
참고

지정할 각 형식 매개변수마다 하나의 인수를 갖는 것은 허용되지만 필수는 아닙니다. 예를 들어 다음 세 표현식은 모두 동일한 결과를 생성합니다:

new Function("a", "b", "c", "return a+b+c")
new Function("a, b, c", "return a+b+c")
new Function("a,b", "c", "return a+b+c")

20.2.1.1.1 CreateDynamicFunction ( ctor, newTarget, kind, paramArgs, bodyArg )

추상 연산 CreateDynamicFunction. 인수 ctor (생성자), newTarget ((생성자 또는 undefined)), kind ((normal, generator, async 또는 async-generator)), paramArgs (리스트 (요소: ECMAScript 언어 값)) 및 bodyArg (ECMAScript 언어 값). 반환값: (정상 완료 (값: ECMAScript 함수 객체) 또는 throw 완료). ctor는 이 동작을 수행하는 생성자 함수입니다. newTarget은 처음 new가 적용된 생성자입니다. paramArgs와 bodyArg는 ctor에 전달된 인수 값을 반영합니다. 호출되면 다음 단계를 수행한다.

  1. newTarget이 undefined이면 newTarget을 ctor로 설정합니다.
  2. kind가 normal이면, 다음을 수행합니다.
    1. prefix를 "function"으로 둡니다.
    2. exprGrammar를 문법 기호 FunctionExpression로 둡니다.
    3. bodyGrammar를 문법 기호 FunctionBody[~Yield, ~Await]로 둡니다.
    4. paramGrammar를 문법 기호 FormalParameters[~Yield, ~Await]로 둡니다.
    5. fallbackProto를 "%Function.prototype%"로 둡니다.
  3. 그렇지 않고 kind가 generator이면, 다음을 수행합니다.
    1. prefix를 "function*"으로 둡니다.
    2. exprGrammar를 문법 기호 GeneratorExpression로 둡니다.
    3. bodyGrammar를 문법 기호 GeneratorBody로 둡니다.
    4. paramGrammar를 문법 기호 FormalParameters[+Yield, ~Await]로 둡니다.
    5. fallbackProto를 "%GeneratorFunction.prototype%"로 둡니다.
  4. 그렇지 않고 kind가 async이면, 다음을 수행합니다.
    1. prefix를 "async function"으로 둡니다.
    2. exprGrammar를 문법 기호 AsyncFunctionExpression로 둡니다.
    3. bodyGrammar를 문법 기호 AsyncFunctionBody로 둡니다.
    4. paramGrammar를 문법 기호 FormalParameters[~Yield, +Await]로 둡니다.
    5. fallbackProto를 "%AsyncFunction.prototype%"로 둡니다.
  5. 그렇지 않으면,
    1. 단언: kind는 async-generator입니다.
    2. prefix를 "async function*"으로 둡니다.
    3. exprGrammar를 문법 기호 AsyncGeneratorExpression로 둡니다.
    4. bodyGrammar를 문법 기호 AsyncGeneratorBody로 둡니다.
    5. paramGrammar를 문법 기호 FormalParameters[+Yield, +Await]로 둡니다.
    6. fallbackProto를 "%AsyncGeneratorFunction.prototype%"로 둡니다.
  6. argCount를 paramArgs의 요소 수로 둡니다.
  7. paramStrings를 새로운 빈 List로 둡니다.
  8. paramArgs의 각 요소 arg에 대해 다음을 수행합니다.
    1. ? ToString(arg)을 paramStrings에 추가합니다.
  9. bodyString을 ? ToString(bodyArg)으로 둡니다.
  10. currentRealm을 현재 Realm Record로 둡니다.
  11. ? HostEnsureCanCompileStrings(currentRealm, paramStrings, bodyString, false)를 수행합니다.
  12. paramString을 빈 String으로 둡니다.
  13. argCount > 0이면, 다음을 수행합니다.
    1. paramString을 paramStrings[0]으로 설정합니다.
    2. k를 1로 둡니다.
    3. k < argCount인 동안 다음을 반복합니다.
      1. nextArgString을 paramStrings[k]로 둡니다.
      2. paramString을 paramString, "," (쉼표) 및 nextArgString의 문자열 연결로 설정합니다.
      3. k를 k + 1로 설정합니다.
  14. bodyParseString을 0x000A (LINE FEED), bodyString 및 0x000A (LINE FEED)의 문자열 연결로 둡니다.
  15. sourceString을 prefix, " anonymous(", paramString, 0x000A (LINE FEED), ") {", bodyParseString 및 "}"의 문자열 연결로 둡니다.
  16. sourceText를 StringToCodePoints(sourceString)로 둡니다.
  17. params를 ParseText(paramString, paramGrammar)로 둡니다.
  18. params가 오류의 List이면 SyntaxError 예외를 던집니다.
  19. body를 ParseText(bodyParseString, bodyGrammar)로 둡니다.
  20. body가 오류의 List이면 SyntaxError 예외를 던집니다.
  21. 참고: 매개변수와 본문은 각각 독립적으로 유효함을 보장하기 위해 별도로 파싱됩니다. 예를 들어 new Function("/*", "*/ ) {")는 함수로 평가되지 않습니다.
  22. 참고: 이 단계에 도달하면 sourceText는 exprGrammar의 구문을 가져야 합니다(반대 방향의 함의는 성립하지 않음). 다음 두 단계의 목적은 exprGrammar에 직접 적용되는 모든 조기 오류 규칙을 적용하는 것입니다.
  23. expr을 ParseText(sourceText, exprGrammar)로 둡니다.
  24. expr이 오류의 List이면 SyntaxError 예외를 던집니다.
  25. funcProto를 ? GetPrototypeFromConstructor(newTarget, fallbackProto)로 둡니다.
  26. envRecord를 currentRealm.[[GlobalEnv]]로 둡니다.
  27. privateEnv를 null로 둡니다.
  28. func를 OrdinaryFunctionCreate(funcProto, sourceText, params, body, non-lexical-this, envRecord, privateEnv)로 둡니다.
  29. SetFunctionName(func, "anonymous")을 수행합니다.
  30. kind가 generator이면, 다음을 수행합니다.
    1. protoProto를 OrdinaryObjectCreate(%GeneratorPrototype%)로 둡니다.
    2. ! DefinePropertyOrThrow(func, "prototype", PropertyDescriptor { [[Value]]: protoProto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false })를 수행합니다.
  31. 그렇지 않고 kind가 async-generator이면, 다음을 수행합니다.
    1. protoProto를 OrdinaryObjectCreate(%AsyncGeneratorPrototype%)로 둡니다.
    2. ! DefinePropertyOrThrow(func, "prototype", PropertyDescriptor { [[Value]]: protoProto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false })를 수행합니다.
  32. 그렇지 않고 kind가 normal이면, 다음을 수행합니다.
    1. MakeConstructor(func)를 수행합니다.
  33. 참고: kind가 async인 함수는 생성할 수 없으며 [[Construct]] 내부 메서드 또는 "prototype" 프로퍼티를 갖지 않습니다.
  34. func를 반환합니다.
참고

CreateDynamicFunction은 생성자로 사용될 가능성을 제공하기 위해 kind가 async가 아닌 생성하는 모든 함수에 "prototype" 프로퍼티를 정의합니다.

20.2.2 Function 생성자의 프로퍼티

Function 생성자는:

  • 그 자체가 내장 함수 객체입니다.
  • 값이 %Function.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • 값이 1𝔽인 "length" 프로퍼티를 갖습니다.
  • 다음 프로퍼티를 갖습니다:

20.2.2.1 Function.prototype

Function.prototype의 값은 Function 프로토타입 객체입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.2.3 Function 프로토타입 객체의 프로퍼티

Function 프로토타입 객체는:

  • %Function.prototype%입니다.
  • 그 자체가 내장 함수 객체입니다.
  • 어떤 인수든 허용하며 호출되면 undefined를 반환합니다.
  • [[Construct]] 내부 메서드를 갖지 않으므로 new 연산자와 함께 생성자로 사용할 수 없습니다.
  • 값이 %Object.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • "prototype" 프로퍼티를 갖지 않습니다.
  • 값이 +0𝔽인 "length" 프로퍼티를 갖습니다.
  • 값이 빈 String인 "name" 프로퍼티를 갖습니다.
참고

Function 프로토타입 객체는 ECMAScript 2015 명세 이전에 작성된 ECMAScript 코드와의 호환성을 보장하기 위해 함수 객체로 명시됩니다.

20.2.3.1 Function.prototype.apply ( thisArg, argArray )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. func를 this 값으로 둡니다.
  2. IsCallable(func)이 false이면 TypeError 예외를 던집니다.
  3. argArray가 undefined 또는 null이면, 다음을 수행합니다.
    1. PrepareForTailCall()을 수행합니다.
    2. ? Call(func, thisArg)를 반환합니다.
  4. argList를 ? CreateListFromArrayLike(argArray)로 둡니다.
  5. PrepareForTailCall()을 수행합니다.
  6. ? Call(func, thisArg, argList)를 반환합니다.
참고 1

thisArg 값은 수정되지 않은 채 this 값으로 전달됩니다. 이는 undefined 또는 null인 thisArg를 전역 객체로 바꾸고 그 밖의 모든 값에 ToObject를 적용한 결과를 this 값으로 전달하던 Edition 3에서 변경된 사항입니다. thisArg가 수정되지 않고 전달되더라도 비엄격 함수는 함수 진입 시 여전히 이러한 변환을 수행합니다.

참고 2

func가 화살표 함수 또는 바인드된 함수 특수 객체 중 하나이면 6 단계의 함수 [[Call]]에서 thisArg는 무시됩니다.

20.2.3.2 Function.prototype.bind ( thisArg, ...args )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. target을 this 값으로 둡니다.
  2. IsCallable(target)이 false이면 TypeError 예외를 던집니다.
  3. boundFunc를 ? BoundFunctionCreate(target, thisArg, args)로 둡니다.
  4. length를 0으로 둡니다.
  5. targetHasLength를 ? HasOwnProperty(target, "length")로 둡니다.
  6. targetHasLength가 true이면, 다음을 수행합니다.
    1. targetLength를 ? Get(target, "length")로 둡니다.
    2. targetLength가 Number이면, 다음을 수행합니다.
      1. targetLengthAsInt를 ! ToIntegerOrInfinity(targetLength)로 둡니다.
      2. targetLengthAsInt = +∞이면, 다음을 수행합니다.
        1. length를 +∞로 설정합니다.
      3. 그렇지 않고 targetLengthAsInt = -∞이면, 다음을 수행합니다.
        1. length를 0으로 설정합니다.
      4. 그렇지 않으면,
        1. argCount를 args의 요소 수로 둡니다.
        2. length를 max(targetLengthAsInt - argCount, 0)으로 설정합니다.
  7. SetFunctionLength(boundFunc, length)를 수행합니다.
  8. targetName을 ? Get(target, "name")로 둡니다.
  9. targetName이 String이 아니면 targetName을 빈 String으로 설정합니다.
  10. SetFunctionName(boundFunc, targetName, "bound")를 수행합니다.
  11. boundFunc를 반환합니다.
참고 1

Function.prototype.bind를 사용하여 생성된 Function 객체는 특수 객체입니다. 또한 "prototype" 프로퍼티를 갖지 않습니다.

참고 2

target이 화살표 함수 또는 바인드된 함수 특수 객체 중 하나이면 이 메서드에 전달된 thisArg는 이후 func 호출에서 사용되지 않습니다.

20.2.3.3 Function.prototype.call ( thisArg, ...args )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. func를 this 값으로 둡니다.
  2. IsCallable(func)이 false이면 TypeError 예외를 던집니다.
  3. PrepareForTailCall()을 수행합니다.
  4. ? Call(func, thisArg, args)를 반환합니다.
참고 1

thisArg 값은 수정되지 않은 채 this 값으로 전달됩니다. 이는 undefined 또는 null인 thisArg를 전역 객체로 바꾸고 그 밖의 모든 값에 ToObject를 적용한 결과를 this 값으로 전달하던 Edition 3에서 변경된 사항입니다. thisArg가 수정되지 않고 전달되더라도 비엄격 함수는 함수 진입 시 여전히 이러한 변환을 수행합니다.

참고 2

func가 화살표 함수 또는 바인드된 함수 특수 객체 중 하나이면 4 단계의 함수 [[Call]]에서 thisArg는 무시됩니다.

20.2.3.4 Function.prototype.constructor

Function.prototype.constructor의 초기 값은 %Function%입니다.

20.2.3.5 Function.prototype.toString ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. func를 this 값으로 둡니다.
  2. func가 Object이고, func가 [[SourceText]] 내부 슬롯을 가지며, func.[[SourceText]]가 유니코드 코드 포인트의 시퀀스이고, HostHasSourceTextAvailable(func)이 true이면, 다음을 수행합니다.
    1. CodePointsToString(func.[[SourceText]])을 반환합니다.
  3. func가 내장 함수 객체이면 func의 구현체 정의 String 소스 코드 표현을 반환합니다. 표현은 NativeFunction의 구문을 가져야 합니다. 또한 func에 [[InitialName]] 내부 슬롯이 있고 func.[[InitialName]]이 String이면 반환된 String에서 NativeFunctionAccessoropt PropertyName과 일치하는 부분은 func.[[InitialName]]이어야 합니다.
  4. func가 Object이고 IsCallable(func)이 true이면 func의 구현체 정의 String 소스 코드 표현을 반환합니다. 표현은 NativeFunction의 구문을 가져야 합니다.
  5. TypeError 예외를 던집니다.
NativeFunction : function NativeFunctionAccessoropt PropertyName[~Yield, ~Await]opt ( FormalParameters[~Yield, ~Await] ) { [ native code ] } NativeFunctionAccessor : get set

20.2.3.6 Function.prototype [ %Symbol.hasInstance% ] ( value )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. thisValue를 this 값으로 둡니다.
  2. ? OrdinaryHasInstance(thisValue, value)를 반환합니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

참고

이는 대부분의 함수가 상속하는 %Symbol.hasInstance%의 기본 구현입니다. %Symbol.hasInstance%는 값이 특정 생성자의 인스턴스인지 결정하기 위해 instanceof 연산자가 호출합니다. 다음과 같은 표현식은

v instanceof F

다음과 같이 평가됩니다.

F[%Symbol.hasInstance%](v)

생성자 함수는 함수에 다른 %Symbol.hasInstance% 메서드를 노출하여 instanceof가 어떤 객체를 자신의 인스턴스로 인식할지 제어할 수 있습니다.

이 프로퍼티는 바인드된 함수의 대상 함수를 전역적으로 노출하는 데 사용될 수 있는 변조를 방지하기 위해 쓰기 불가능하고 구성 불가능합니다.

이 메서드의 "name" 프로퍼티 값은 "[Symbol.hasInstance]"입니다.

20.2.4 Function 인스턴스

모든 Function 인스턴스는 ECMAScript 함수 객체이며 표 26에 나열된 내부 슬롯을 갖습니다. Function.prototype.bind 메서드(20.2.3.2)를 사용하여 생성된 Function 객체는 표 27에 나열된 내부 슬롯을 갖습니다.

Function 인스턴스는 다음 프로퍼티를 갖습니다:

20.2.4.1 length

"length" 프로퍼티의 값은 함수가 일반적으로 예상하는 인수 수를 나타내는 정수 Number입니다. 그러나 언어는 다른 수의 인수로 함수를 호출하는 것을 허용합니다. "length" 프로퍼티에 명시된 수와 다른 수의 인수로 함수가 호출되었을 때의 동작은 함수에 따라 달라집니다. 이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 속성을 갖습니다.

20.2.4.2 name

"name" 프로퍼티의 값은 함수를 설명하는 String입니다. 이름에는 의미론적 중요성이 없지만 일반적으로 ECMAScript 소스 텍스트에서 함수가 정의된 위치에서 해당 함수를 참조하는 데 사용하는 변수 또는 프로퍼티 이름입니다. 이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 속성을 갖습니다.

이 명세에 의해 문맥적 이름이 연결되지 않은 익명 함수 객체는 빈 String을 "name" 프로퍼티의 값으로 사용합니다.

20.2.4.3 prototype

생성자로 사용할 수 있는 Function 인스턴스는 "prototype" 프로퍼티를 갖습니다. 이러한 Function 인스턴스가 생성될 때마다 또 다른 일반 객체도 생성되며 함수의 "prototype" 프로퍼티 초기 값이 됩니다. 달리 명시되지 않는 한 "prototype" 프로퍼티의 값은 해당 함수가 생성자로 호출될 때 생성되는 객체의 [[Prototype]] 내부 슬롯을 초기화하는 데 사용됩니다.

이 프로퍼티는 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

참고

Function.prototype.bind를 사용하여 생성되거나 MethodDefinition(GeneratorMethod 또는 AsyncGeneratorMethod이 아닌 것) 또는 ArrowFunction을 평가하여 생성된 Function 객체는 "prototype" 프로퍼티를 갖지 않습니다.

20.2.5 HostHasSourceTextAvailable ( func )

호스트 정의 추상 연산 HostHasSourceTextAvailable. 인수 func (함수 객체). 반환값: Boolean. 호스트 환경이 func의 소스 텍스트 제공을 막을 수 있도록 합니다.

HostHasSourceTextAvailable 구현은 다음 요구 사항을 준수해야 합니다:

  • 매개변수에 대해 결정적이어야 합니다. 특정 func를 인수로 호출될 때마다 동일한 결과를 반환해야 합니다.

HostHasSourceTextAvailable의 기본 구현은 true를 반환합니다.

20.3 Boolean 객체

20.3.1 Boolean 생성자

Boolean 생성자는:

  • %Boolean%입니다.
  • 전역 객체의 "Boolean" 프로퍼티 초기 값입니다.
  • 생성자로 호출되면 새로운 Boolean 객체를 생성하고 초기화합니다.
  • 생성자가 아니라 함수로 호출되면 타입 변환을 수행합니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있습니다. 명시된 Boolean 동작을 상속하려는 하위 클래스 생성자는 [[BooleanData]] 내부 슬롯을 갖는 하위 클래스 인스턴스를 생성하고 초기화하기 위해 Boolean 생성자에 대한 super 호출을 포함해야 합니다.

20.3.1.1 Boolean ( value )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. bool을 ToBoolean(value)으로 둡니다.
  2. NewTarget이 undefined이면 bool을 반환합니다.
  3. obj를 ? OrdinaryCreateFromConstructor(NewTarget, "%Boolean.prototype%", « [[BooleanData]] »)로 둡니다.
  4. obj.[[BooleanData]]를 bool로 설정합니다.
  5. obj를 반환합니다.

20.3.2 Boolean 생성자의 프로퍼티

Boolean 생성자는:

  • 값이 %Function.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • 다음 프로퍼티를 갖습니다:

20.3.2.1 Boolean.prototype

Boolean.prototype의 초기 값은 Boolean 프로토타입 객체입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.3.3 Boolean 프로토타입 객체의 프로퍼티

Boolean 프로토타입 객체는:

  • %Boolean.prototype%입니다.
  • 일반 객체입니다.
  • 그 자체가 Boolean 객체이며 값이 false인 [[BooleanData]] 내부 슬롯을 갖습니다.
  • 값이 %Object.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.

20.3.3.1 Boolean.prototype.constructor

Boolean.prototype.constructor의 초기 값은 %Boolean%입니다.

20.3.3.2 Boolean.prototype.toString ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. bool을 ? ThisBooleanValue(this 값)로 둡니다.
  2. bool이 true이면 "true"를 반환합니다.
  3. "false"를 반환합니다.

20.3.3.3 Boolean.prototype.valueOf ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. ? ThisBooleanValue(this 값)를 반환합니다.

20.3.3.3.1 ThisBooleanValue ( arg )

추상 연산 ThisBooleanValue. 인수 arg (ECMAScript 언어 값). 반환값: (정상 완료 (값: Boolean) 또는 throw 완료). 호출되면 다음 단계를 수행한다.

  1. arg가 Boolean이면 arg를 반환합니다.
  2. arg가 Object이고 arg에 [[BooleanData]] 내부 슬롯이 있으면, 다음을 수행합니다.
    1. bool을 arg.[[BooleanData]]로 둡니다.
    2. 단언: bool은 Boolean입니다.
    3. bool을 반환합니다.
  3. TypeError 예외를 던집니다.

20.3.4 Boolean 인스턴스의 프로퍼티

Boolean 인스턴스는 Boolean 프로토타입 객체에서 프로퍼티를 상속하는 일반 객체입니다. Boolean 인스턴스에는 [[BooleanData]] 내부 슬롯이 있습니다. [[BooleanData]] 내부 슬롯은 이 Boolean 객체가 나타내는 Boolean 값입니다.

20.4 Symbol 객체

20.4.1 Symbol 생성자

Symbol 생성자는:

  • %Symbol%입니다.
  • 전역 객체의 "Symbol" 프로퍼티 초기 값입니다.
  • 함수로 호출되면 새로운 Symbol 값을 반환합니다.
  • new 연산자와 함께 사용하도록 의도되지 않았습니다.
  • 하위 클래스를 만들도록 의도되지 않았습니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있지만 이에 대한 super 호출은 예외를 발생시킵니다.

20.4.1.1 Symbol ( [ description ] )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. NewTarget이 undefined가 아니면 TypeError 예외를 던집니다.
  2. description이 undefined이면 descString을 undefined로 둡니다.
  3. 그렇지 않으면 descString을 ? ToString(description)으로 둡니다.
  4. descString을 [[Description]]으로 갖는 새로운 Symbol을 반환합니다.

20.4.2 Symbol 생성자의 프로퍼티

Symbol 생성자는:

  • 값이 %Function.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • 다음 프로퍼티를 갖습니다:

20.4.2.1 Symbol.asyncDispose

Symbol.asyncDispose의 초기 값은 잘 알려진 symbol %Symbol.asyncDispose%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.2 Symbol.asyncIterator

Symbol.asyncIterator의 초기 값은 잘 알려진 symbol %Symbol.asyncIterator%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.3 Symbol.dispose

Symbol.dispose의 초기 값은 잘 알려진 symbol %Symbol.dispose%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.4 Symbol.for ( key )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. stringKey를 ? ToString(key)로 둡니다.
  2. agentRecord를 주변 agent의 Agent Record로 둡니다.
  3. globalSymbolRegistry를 agentRecord.[[GlobalSymbolRegistry]]로 둡니다.
  4. globalSymbolRegistry의 각 요소 element에 대해 다음을 수행합니다.
    1. element.[[Key]]가 stringKey이면 element.[[Symbol]]을 반환합니다.
  5. 단언: globalSymbolRegistry에는 현재 stringKey에 대한 항목이 없습니다.
  6. newSymbol을 [[Description]]이 stringKey인 새로운 Symbol로 둡니다.
  7. GlobalSymbolRegistry Record { [[Key]]: stringKey, [[Symbol]]: newSymbol }을 globalSymbolRegistry에 추가합니다.
  8. newSymbol을 반환합니다.

20.4.2.5 Symbol.hasInstance

Symbol.hasInstance의 초기 값은 잘 알려진 symbol %Symbol.hasInstance%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.6 Symbol.isConcatSpreadable

Symbol.isConcatSpreadable의 초기 값은 잘 알려진 symbol %Symbol.isConcatSpreadable%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.7 Symbol.iterator

Symbol.iterator의 초기 값은 잘 알려진 symbol %Symbol.iterator%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.8 Symbol.keyFor ( symbol )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. symbol이 Symbol이 아니면 TypeError 예외를 던집니다.
  2. KeyForSymbol(symbol)을 반환합니다.

20.4.2.9 Symbol.match

Symbol.match의 초기 값은 잘 알려진 symbol %Symbol.match%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.10 Symbol.matchAll

Symbol.matchAll의 초기 값은 잘 알려진 symbol %Symbol.matchAll%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.11 Symbol.prototype

Symbol.prototype의 초기 값은 Symbol 프로토타입 객체입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.12 Symbol.replace

Symbol.replace의 초기 값은 잘 알려진 symbol %Symbol.replace%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.13 Symbol.search

Symbol.search의 초기 값은 잘 알려진 symbol %Symbol.search%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.14 Symbol.species

Symbol.species의 초기 값은 잘 알려진 symbol %Symbol.species%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.15 Symbol.split

Symbol.split의 초기 값은 잘 알려진 symbol %Symbol.split%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.16 Symbol.toPrimitive

Symbol.toPrimitive의 초기 값은 잘 알려진 symbol %Symbol.toPrimitive%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.17 Symbol.toStringTag

Symbol.toStringTag의 초기 값은 잘 알려진 symbol %Symbol.toStringTag%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.2.18 Symbol.unscopables

Symbol.unscopables의 초기 값은 잘 알려진 symbol %Symbol.unscopables%입니다(표 1).

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.4.3 Symbol 프로토타입 객체의 프로퍼티

Symbol 프로토타입 객체는:

  • %Symbol.prototype%입니다.
  • 일반 객체입니다.
  • Symbol 인스턴스가 아니며 [[SymbolData]] 내부 슬롯을 갖지 않습니다.
  • 값이 %Object.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.

20.4.3.1 Symbol.prototype.constructor

Symbol.prototype.constructor의 초기 값은 %Symbol%입니다.

20.4.3.2 get Symbol.prototype.description

Symbol.prototype.description은 set 접근자 함수가 undefined인 접근자 프로퍼티입니다. get 접근자 함수는 호출되면 다음 단계를 수행합니다:

  1. symbol을 ? ThisSymbolValue(this 값)로 둡니다.
  2. symbol.[[Description]]을 반환합니다.

20.4.3.3 Symbol.prototype.toString ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. symbol을 ? ThisSymbolValue(this 값)로 둡니다.
  2. SymbolDescriptiveString(symbol)을 반환합니다.

20.4.3.3.1 SymbolDescriptiveString ( symbol )

추상 연산 SymbolDescriptiveString. 인수 symbol (Symbol). 반환값: String. 호출되면 다음 단계를 수행한다.

  1. description을 symbol.[[Description]]으로 둡니다.
  2. description이 undefined이면 description을 빈 String으로 설정합니다.
  3. 단언: description은 String입니다.
  4. "Symbol(", description 및 ")"의 문자열 연결을 반환합니다.

20.4.3.4 Symbol.prototype.valueOf ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. ? ThisSymbolValue(this 값)를 반환합니다.

20.4.3.4.1 ThisSymbolValue ( arg )

추상 연산 ThisSymbolValue. 인수 arg (ECMAScript 언어 값). 반환값: (정상 완료 (값: Symbol) 또는 throw 완료). 호출되면 다음 단계를 수행한다.

  1. arg가 Symbol이면 arg를 반환합니다.
  2. arg가 Object이고 arg에 [[SymbolData]] 내부 슬롯이 있으면, 다음을 수행합니다.
    1. symbol을 arg.[[SymbolData]]로 둡니다.
    2. 단언: symbol은 Symbol입니다.
    3. symbol을 반환합니다.
  3. TypeError 예외를 던집니다.

20.4.3.5 Symbol.prototype [ %Symbol.toPrimitive% ] ( hint )

이 메서드는 ECMAScript 언어 연산자가 Symbol 객체를 원시 값으로 변환하기 위해 호출합니다.

호출되면 다음 단계를 수행합니다:

  1. ? ThisSymbolValue(this 값)를 반환합니다.
참고

인수는 무시됩니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 속성을 갖습니다.

이 메서드의 "name" 프로퍼티 값은 "[Symbol.toPrimitive]"입니다.

20.4.3.6 Symbol.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag% 프로퍼티의 초기 값은 String 값 "Symbol"입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 속성을 갖습니다.

20.4.4 Symbol 인스턴스의 프로퍼티

Symbol 인스턴스는 Symbol 프로토타입 객체에서 프로퍼티를 상속하는 일반 객체입니다. Symbol 인스턴스에는 [[SymbolData]] 내부 슬롯이 있습니다. [[SymbolData]] 내부 슬롯은 이 Symbol 객체가 나타내는 Symbol 값입니다.

20.4.5 Symbol을 위한 추상 연산

20.4.5.1 GlobalSymbolRegistry Record

GlobalSymbolRegistry Record는 Symbol.for를 통해 등록된 String 키와 Symbol 값을 연결하는 데 사용하는 Record입니다.

GlobalSymbolRegistry Record에는 표 59에 나열된 필드가 있습니다.

표 59: GlobalSymbolRegistry Record 필드
필드 이름 값 용도
[[Key]] a String Symbol을 전역적으로 식별하는 데 사용하는 문자열 키입니다.
[[Symbol]] a Symbol 어떤 realm에서도 가져올 수 있는 symbol입니다.

20.4.5.2 KeyForSymbol ( symbol )

추상 연산 KeyForSymbol. 인수 symbol (Symbol). 반환값: (String 또는 undefined). symbol이 주변 agent의 [[GlobalSymbolRegistry]] List에 있으면 symbol을 등록하는 데 사용된 String을 반환합니다. 호출되면 다음 단계를 수행한다.

  1. agentRecord를 주변 agent의 Agent Record로 둡니다.
  2. globalSymbolRegistry를 agentRecord.[[GlobalSymbolRegistry]]로 둡니다.
  3. globalSymbolRegistry의 각 요소 element에 대해 다음을 수행합니다.
    1. SameValue(element.[[Symbol]], symbol)가 true이면 element.[[Key]]를 반환합니다.
  4. 단언: globalSymbolRegistry에는 현재 symbol에 대한 항목이 없습니다.
  5. undefined를 반환합니다.

20.5 Error 객체

런타임 오류가 발생하면 Error 객체의 인스턴스가 예외로 던져집니다. Error 객체는 사용자 정의 예외 클래스의 기본 객체 역할도 할 수 있습니다.

ECMAScript 구현체가 런타임 오류를 검출하면 20.5.5에 정의된 NativeError 객체 중 하나의 새로운 인스턴스 또는 20.5.7에 정의된 AggregateError 객체나 20.5.8에 정의된 SuppressedError 객체 중 하나의 새로운 인스턴스를 던집니다. 이러한 각 객체는 아래에 설명된 구조를 가지며, 생성자 이름으로 NativeError 대신 사용하는 이름, 프로토타입 객체의 "name" 프로퍼티, 프로토타입 객체의 구현체 정의 "message" 프로퍼티, 그리고 %AggregateError% 고유의 "errors" 프로퍼티 또는 %SuppressedError% 고유의 "error" 및 "suppressed" 프로퍼티의 존재 여부만 다릅니다.

20.5.1 Error 생성자

Error 생성자는:

  • %Error%입니다.
  • 전역 객체의 "Error" 프로퍼티 초기 값입니다.
  • 생성자가 아니라 함수로 호출되면 새로운 Error 객체를 생성하고 초기화합니다. 따라서 함수 호출 Error(…)는 동일한 인수를 사용한 객체 생성 표현식 new Error(…)와 동등합니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있습니다. 명시된 Error 동작을 상속하려는 하위 클래스 생성자는 [[ErrorData]] 내부 슬롯을 갖는 하위 클래스 인스턴스를 생성하고 초기화하기 위해 Error 생성자에 대한 super 호출을 포함해야 합니다.

20.5.1.1 Error ( message [ , options ] )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. NewTarget이 undefined이면 newTarget을 활성 함수 객체로 둡니다. 그렇지 않으면 newTarget을 NewTarget으로 둡니다.
  2. obj를 ? OrdinaryCreateFromConstructor(newTarget, "%Error.prototype%", « [[ErrorData]] »)로 둡니다.
  3. message가 undefined가 아니면, 다음을 수행합니다.
    1. messageString을 ? ToString(message)으로 둡니다.
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString)을 수행합니다.
  4. ? InstallErrorCause(obj, options)를 수행합니다.
  5. obj를 반환합니다.

20.5.2 Error 생성자의 프로퍼티

Error 생성자는:

  • 값이 %Function.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • 다음 프로퍼티를 갖습니다:

20.5.2.1 Error.isError ( arg )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. arg가 Object가 아니면 false를 반환합니다.
  2. arg에 [[ErrorData]] 내부 슬롯이 없으면 false를 반환합니다.
  3. true를 반환합니다.

20.5.2.2 Error.prototype

Error.prototype의 초기 값은 Error 프로토타입 객체입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.5.3 Error 프로토타입 객체의 프로퍼티

Error 프로토타입 객체는:

  • %Error.prototype%입니다.
  • 일반 객체입니다.
  • Error 인스턴스가 아니며 [[ErrorData]] 내부 슬롯을 갖지 않습니다.
  • 값이 %Object.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.

20.5.3.1 Error.prototype.constructor

Error.prototype.constructor의 초기 값은 %Error%입니다.

20.5.3.2 Error.prototype.message

Error.prototype.message의 초기 값은 빈 String입니다.

20.5.3.3 Error.prototype.name

Error.prototype.name의 초기 값은 "Error"입니다.

20.5.3.4 Error.prototype.toString ( )

이 메서드는 호출되면 다음 단계를 수행합니다:

  1. obj를 this 값으로 둡니다.
  2. obj가 Object가 아니면 TypeError 예외를 던집니다.
  3. name을 ? Get(obj, "name")으로 둡니다.
  4. name이 undefined이면 name을 "Error"로 설정합니다. 그렇지 않으면 name을 ? ToString(name)으로 설정합니다.
  5. message를 ? Get(obj, "message")로 둡니다.
  6. message가 undefined이면 message를 빈 String으로 설정합니다. 그렇지 않으면 message를 ? ToString(message)으로 설정합니다.
  7. name이 빈 String이면 message를 반환합니다.
  8. message가 빈 String이면 name을 반환합니다.
  9. name, 코드 단위 0x003A (COLON), 코드 단위 0x0020 (SPACE) 및 message의 문자열 연결을 반환합니다.

20.5.4 Error 인스턴스의 프로퍼티

Error 인스턴스는 Error 프로토타입 객체에서 프로퍼티를 상속하고 값이 undefined인 [[ErrorData]] 내부 슬롯을 갖는 일반 객체입니다. [[ErrorData]]의 유일한 명시된 용도는 Object.prototype.toString 및 Error.isError 안에서 Error, AggregateError, SuppressedError 및 NativeError 인스턴스를 Error 객체로 식별하는 것입니다.

20.5.5 이 표준에서 사용하는 Native Error 타입

런타임 오류가 검출되면 아래의 NativeError 객체 중 하나 또는 AggregateError 객체나 SuppressedError 객체 중 하나의 새로운 인스턴스가 던져집니다. 모든 NativeError 객체는 20.5.6에 설명된 동일한 구조를 공유합니다.

20.5.5.1 EvalError

EvalError 생성자는 %EvalError%입니다.

이 예외는 현재 이 명세 안에서 사용되지 않습니다. 이 객체는 이 명세의 이전 판과의 호환성을 위해 남아 있습니다.

20.5.5.2 RangeError

RangeError 생성자는 %RangeError%입니다.

허용되는 값의 집합 또는 범위에 속하지 않는 값을 나타냅니다.

20.5.5.3 ReferenceError

ReferenceError 생성자는 %ReferenceError%입니다.

유효하지 않은 참조가 검출되었음을 나타냅니다.

20.5.5.4 SyntaxError

SyntaxError 생성자는 %SyntaxError%입니다.

파싱 오류가 발생했음을 나타냅니다.

20.5.5.5 TypeError

TypeError 생성자는 %TypeError%입니다.

TypeError는 다른 NativeError 객체 중 어느 것도 실패 원인을 적절히 나타내지 못할 때 성공하지 못한 연산을 나타내는 데 사용됩니다.

20.5.5.6 URIError

URIError 생성자는 %URIError%입니다.

전역 URI 처리 함수 중 하나가 해당 정의와 호환되지 않는 방식으로 사용되었음을 나타냅니다.

20.5.6 NativeError 객체 구조

이러한 각 객체는 아래에 설명된 구조를 가지며, 생성자 이름으로 사용되는 이름과 프로토타입 객체의 "name" 프로퍼티만 다릅니다.

각 오류 객체에 대해 정의 안의 NativeError 참조는 20.5.5의 적절한 오류 객체 이름으로 바꿔야 합니다.

20.5.6.1 NativeError 생성자

각 NativeError 생성자는:

  • 생성자가 아니라 함수로 호출되면 새로운 NativeError 객체를 생성하고 초기화합니다. 객체를 함수로 호출하는 것은 동일한 인수로 생성자로 호출하는 것과 동등합니다. 따라서 함수 호출 NativeError(…)는 동일한 인수를 사용한 객체 생성 표현식 new NativeError(…)와 동등합니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있습니다. 명시된 NativeError 동작을 상속하려는 하위 클래스 생성자는 [[ErrorData]] 내부 슬롯을 갖는 하위 클래스 인스턴스를 생성하고 초기화하기 위해 NativeError 생성자에 대한 super 호출을 포함해야 합니다.

20.5.6.1.1 NativeError ( message [ , options ] )

각 NativeError 함수는 호출되면 다음 단계를 수행합니다:

  1. NewTarget이 undefined이면 newTarget을 활성 함수 객체로 둡니다. 그렇지 않으면 newTarget을 NewTarget으로 둡니다.
  2. obj를 ? OrdinaryCreateFromConstructor(newTarget, "%NativeError.prototype%", « [[ErrorData]] »)로 둡니다.
  3. message가 undefined가 아니면, 다음을 수행합니다.
    1. messageString을 ? ToString(message)으로 둡니다.
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString)을 수행합니다.
  4. ? InstallErrorCause(obj, options)를 수행합니다.
  5. obj를 반환합니다.

2 단계에서 전달되는 문자열의 실제 값은 정의 중인 NativeError 생성자에 따라 "%EvalError.prototype%", "%RangeError.prototype%", "%ReferenceError.prototype%", "%SyntaxError.prototype%", "%TypeError.prototype%" 또는 "%URIError.prototype%" 중 하나입니다.

20.5.6.2 NativeError 생성자의 프로퍼티

각 NativeError 생성자는:

  • 값이 %Error%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • String 값 "NativeError"을 값으로 갖는 "name" 프로퍼티를 갖습니다.
  • 다음 프로퍼티를 갖습니다:

20.5.6.2.1 NativeError.prototype

NativeError.prototype의 초기 값은 NativeError 프로토타입 객체(20.5.6.3)입니다. 각 NativeError 생성자는 서로 다른 프로토타입 객체를 갖습니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.5.6.3 NativeError 프로토타입 객체의 프로퍼티

각 NativeError 프로토타입 객체는:

  • 일반 객체입니다.
  • Error 인스턴스가 아니며 [[ErrorData]] 내부 슬롯을 갖지 않습니다.
  • 값이 %Error.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.

20.5.6.3.1 NativeError.prototype.constructor

주어진 NativeError 생성자에 대한 프로토타입의 "constructor" 프로퍼티 초기 값은 해당 생성자 자체입니다.

20.5.6.3.2 NativeError.prototype.message

주어진 NativeError 생성자에 대한 프로토타입의 "message" 프로퍼티 초기 값은 빈 String입니다.

20.5.6.3.3 NativeError.prototype.name

주어진 NativeError 생성자에 대한 프로토타입의 "name" 프로퍼티 초기 값은 생성자의 이름(NativeError 대신 사용되는 이름)으로 구성된 String 값입니다.

20.5.6.4 NativeError 인스턴스의 프로퍼티

NativeError 인스턴스는 해당 NativeError 프로토타입 객체에서 프로퍼티를 상속하고 값이 undefined인 [[ErrorData]] 내부 슬롯을 갖는 일반 객체입니다. [[ErrorData]]의 유일한 명시된 용도는 Object.prototype.toString(20.1.3.6) 및 Error.isError(20.5.2.1)가 Error, AggregateError, SuppressedError 또는 NativeError 인스턴스를 식별하는 것입니다.

20.5.7 AggregateError 객체

20.5.7.1 AggregateError 생성자

AggregateError 생성자는:

  • %AggregateError%입니다.
  • 전역 객체의 "AggregateError" 프로퍼티 초기 값입니다.
  • 생성자가 아니라 함수로 호출되면 새로운 AggregateError 객체를 생성하고 초기화합니다. 따라서 함수 호출 AggregateError(…)는 동일한 인수를 사용한 객체 생성 표현식 new AggregateError(…)와 동등합니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있습니다. 명시된 AggregateError 동작을 상속하려는 하위 클래스 생성자는 [[ErrorData]] 내부 슬롯을 갖는 하위 클래스 인스턴스를 생성하고 초기화하기 위해 AggregateError 생성자에 대한 super 호출을 포함해야 합니다.

20.5.7.1.1 AggregateError ( errors, message [ , options ] )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. NewTarget이 undefined이면 newTarget을 활성 함수 객체로 둡니다. 그렇지 않으면 newTarget을 NewTarget으로 둡니다.
  2. obj를 ? OrdinaryCreateFromConstructor(newTarget, "%AggregateError.prototype%", « [[ErrorData]] »)로 둡니다.
  3. message가 undefined가 아니면, 다음을 수행합니다.
    1. messageString을 ? ToString(message)으로 둡니다.
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString)을 수행합니다.
  4. ? InstallErrorCause(obj, options)를 수행합니다.
  5. errorsList를 ? IteratorToList(? GetIterator(errors, sync))로 둡니다.
  6. ! DefinePropertyOrThrow(obj, "errors", PropertyDescriptor { [[Configurable]]: true, [[Enumerable]]: false, [[Writable]]: true, [[Value]]: CreateArrayFromList(errorsList) })를 수행합니다.
  7. obj를 반환합니다.

20.5.7.2 AggregateError 생성자의 프로퍼티

AggregateError 생성자는:

  • 값이 %Error%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • 다음 프로퍼티를 갖습니다:

20.5.7.2.1 AggregateError.prototype

AggregateError.prototype의 초기 값은 %AggregateError.prototype%입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.5.7.3 AggregateError 프로토타입 객체의 프로퍼티

AggregateError 프로토타입 객체는:

  • %AggregateError.prototype%입니다.
  • 일반 객체입니다.
  • Error 인스턴스도 AggregateError 인스턴스도 아니며 [[ErrorData]] 내부 슬롯을 갖지 않습니다.
  • 값이 %Error.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.

20.5.7.3.1 AggregateError.prototype.constructor

AggregateError.prototype.constructor의 초기 값은 %AggregateError%입니다.

20.5.7.3.2 AggregateError.prototype.message

AggregateError.prototype.message의 초기 값은 빈 String입니다.

20.5.7.3.3 AggregateError.prototype.name

AggregateError.prototype.name의 초기 값은 "AggregateError"입니다.

20.5.7.4 AggregateError 인스턴스의 프로퍼티

AggregateError 인스턴스는 해당 AggregateError 프로토타입 객체에서 프로퍼티를 상속하고 값이 undefined인 [[ErrorData]] 내부 슬롯을 갖는 일반 객체입니다. [[ErrorData]]의 유일한 명시된 용도는 Object.prototype.toString(20.1.3.6) 및 Error.isError(20.5.2.1)가 Error, AggregateError, SuppressedError 또는 NativeError 인스턴스를 식별하는 것입니다.

20.5.8 SuppressedError 객체

20.5.8.1 SuppressedError 생성자

SuppressedError 생성자는:

  • %SuppressedError%입니다.
  • 전역 객체의 "SuppressedError" 프로퍼티 초기 값입니다.
  • 생성자가 아니라 함수로 호출되면 새로운 SuppressedError 객체를 생성하고 초기화합니다. 따라서 함수 호출 SuppressedError(…)는 동일한 인수를 사용한 객체 생성 표현식 new SuppressedError(…)와 동등합니다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있습니다. 명시된 SuppressedError 동작을 상속하려는 하위 클래스 생성자는 [[ErrorData]] 내부 슬롯을 갖는 하위 클래스 인스턴스를 생성하고 초기화하기 위해 SuppressedError 생성자에 대한 super 호출을 포함해야 합니다.

20.5.8.1.1 SuppressedError ( error, suppressed, message )

이 함수는 호출되면 다음 단계를 수행합니다:

  1. NewTarget이 undefined이면 newTarget을 활성 함수 객체로 둡니다. 그렇지 않으면 newTarget을 NewTarget으로 둡니다.
  2. obj를 ? OrdinaryCreateFromConstructor(newTarget, "%SuppressedError.prototype%", « [[ErrorData]] »)로 둡니다.
  3. message가 undefined가 아니면, 다음을 수행합니다.
    1. messageString을 ? ToString(message)으로 둡니다.
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString)을 수행합니다.
  4. CreateNonEnumerableDataPropertyOrThrow(obj, "error", error)를 수행합니다.
  5. CreateNonEnumerableDataPropertyOrThrow(obj, "suppressed", suppressed)를 수행합니다.
  6. obj를 반환합니다.

20.5.8.2 SuppressedError 생성자의 프로퍼티

SuppressedError 생성자는:

  • 값이 %Error%인 [[Prototype]] 내부 슬롯을 갖습니다.
  • 다음 프로퍼티를 갖습니다:

20.5.8.2.1 SuppressedError.prototype

SuppressedError.prototype의 초기 값은 SuppressedError 프로토타입 객체입니다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 속성을 갖습니다.

20.5.8.3 SuppressedError 프로토타입 객체의 프로퍼티

SuppressedError 프로토타입 객체는:

  • %SuppressedError.prototype%입니다.
  • 일반 객체입니다.
  • Error 인스턴스도 SuppressedError 인스턴스도 아니며 [[ErrorData]] 내부 슬롯을 갖지 않습니다.
  • 값이 %Error.prototype%인 [[Prototype]] 내부 슬롯을 갖습니다.

20.5.8.3.1 SuppressedError.prototype.constructor

SuppressedError.prototype.constructor의 초기 값은 %SuppressedError%입니다.

20.5.8.3.2 SuppressedError.prototype.message

SuppressedError.prototype.message의 초기 값은 빈 String입니다.

20.5.8.3.3 SuppressedError.prototype.name

SuppressedError.prototype.name의 초기 값은 "SuppressedError"입니다.

20.5.8.4 SuppressedError 인스턴스의 프로퍼티

SuppressedError 인스턴스는 해당 SuppressedError 프로토타입 객체에서 프로퍼티를 상속하고 값이 undefined인 [[ErrorData]] 내부 슬롯을 갖는 일반 객체입니다. [[ErrorData]]의 유일한 명시된 용도는 Object.prototype.toString 및 Error.isError 안에서 Error, AggregateError, SuppressedError 및 NativeError 인스턴스를 Error 객체로 식별하는 것입니다.

20.5.9 Error 객체를 위한 추상 연산

20.5.9.1 InstallErrorCause ( obj, options )

추상 연산 InstallErrorCause. 인수 obj (Object) 및 options (ECMAScript 언어 값). 반환값: (정상 완료 (값: unused) 또는 throw 완료). options에 "cause" 프로퍼티가 존재할 때 obj에 "cause" 프로퍼티를 생성하는 데 사용됩니다. 호출되면 다음 단계를 수행한다.

  1. options가 Object이고 ? HasProperty(options, "cause")가 true이면, 다음을 수행합니다.
    1. cause를 ? Get(options, "cause")로 둡니다.
    2. CreateNonEnumerableDataPropertyOrThrow(obj, "cause", cause)를 수행합니다.
  2. unused를 반환합니다.