23 인덱스드 컬렉션 (Indexed Collections)

23.1 Array 객체 (Array Objects)

Array 는 특정 클래스의 프로퍼티 이름에 특별한 처리를 부여하는 이그조틱(exotic) 객체이다. 이러한 특별 처리에 대한 정의는 10.4.2 를 참고.

23.1.1 Array 생성자 (The Array Constructor)

Array 생성자:

  • %Array% 이다.
  • 전역 객체"Array" 프로퍼티 초기 값이다.
  • 생성자로 호출될 때 새 Array 를 생성하고 초기화한다.
  • 생성자가 아니라 함수로 호출될 때도 새 Array 를 생성하고 초기화한다. 따라서 함수 호출 Array(…) 는 동일한 인자를 갖는 객체 생성 식 new Array(…) 와 동등하다.
  • 인자 개수와 타입에 따라 동작이 달라지는 함수이다.
  • 클래스 정의의 extends 절 값으로 사용할 수 있다. 이그조틱 Array 동작을 상속하려는 서브클래스 생성자Array 이그조틱 객체인 서브클래스 인스턴스를 초기화하기 위해 Array 생성자에 대한 super 호출을 포함해야 한다. 그러나 대부분의 Array.prototype 메서드는 this 값이 Array 이그조틱 객체일 필요가 없는 제네릭 메서드이다.

23.1.1.1 Array ( ...values )

이 함수는 호출될 때 다음 단계를 수행한다:

  1. NewTarget 이 undefined 이면 newTarget 을 활성 함수 객체로; 아니면 newTarget = NewTarget.
  2. proto 를 ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") 로 둔다.
  3. numberOfArgsvalues 의 요소 개수로 둔다.
  4. numberOfArgs = 0 이면
    1. ArrayCreate(0, proto) 를 반환.
  5. Else if numberOfArgs = 1 이면
    1. len = values[0].
    2. array = ! ArrayCreate(0, proto).
    3. len 이 Number 가 아니면
      1. CreateDataPropertyOrThrow(array, "0", len) 수행.
      2. intLen = 1𝔽.
    4. Else,
      1. intLen = ! ToUint32(len).
      2. SameValueZero(intLen, len) 이 false 이면 RangeError 예외.
    5. Set(array, "length", intLen, true) 수행.
    6. array 반환.
  6. Else,
    1. Assert: numberOfArgs ≥ 2.
    2. array = ? ArrayCreate(numberOfArgs, proto).
    3. k = 0.
    4. k < numberOfArgs 인 동안 반복
      1. Pk = ! ToString(𝔽(k)).
      2. itemK = values[k].
      3. CreateDataPropertyOrThrow(array, Pk, itemK) 수행.
      4. k = k + 1.
    5. Assert: array"length" 프로퍼티의 수학적 값numberOfArgs.
    6. array 반환.

23.1.2 Array 생성자의 프로퍼티 (Properties of the Array Constructor)

Array 생성자:

  • 값이 %Function.prototype%[[Prototype]] 내부 슬롯을 가진다.
  • 값이 1𝔽"length" 프로퍼티를 가진다.
  • 다음 프로퍼티들을 가진다:

23.1.2.1 Array.from ( items [ , mapper [ , thisArg ] ] )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. Cthis 값으로 둔다.
  2. mapperundefined 이면
    1. mapping = false.
  3. Else,
    1. IsCallable(mapper) 가 false 이면 TypeError 예외.
    2. mapping = true.
  4. usingIterator = ? GetMethod(items, %Symbol.iterator%).
  5. usingIteratorundefined 가 아니면
    1. IsConstructor(C) 가 true 이면
      1. A = ? Construct(C).
    2. Else,
      1. A = ! ArrayCreate(0).
    3. iteratorRecord = ? GetIteratorFromMethod(items, usingIterator).
    4. k = 0.
    5. 반복:
      1. k ≥ 253 - 1 이면
        1. error = ThrowCompletion(새 TypeError 객체).
        2. Return ? IteratorClose(iteratorRecord, error).
      2. Pk = ! ToString(𝔽(k)).
      3. next = ? IteratorStepValue(iteratorRecord).
      4. nextdone 이면
        1. Set(A, "length", 𝔽(k), true) 수행.
        2. A 반환.
      5. mapping = true 이면
        1. mappedValue = Completion(Call(mapper, thisArg, « next, 𝔽(k) »)).
        2. IfAbruptCloseIterator(mappedValue, iteratorRecord).
      6. Else,
        1. mappedValue = next.
      7. defineStatus = Completion(CreateDataPropertyOrThrow(A, Pk, mappedValue)).
      8. IfAbruptCloseIterator(defineStatus, iteratorRecord).
      9. k = k + 1.
  6. NOTE: items 는 이터러블이 아니므로 array-like 객체로 가정.
  7. arrayLike = ! ToObject(items).
  8. len = ? LengthOfArrayLike(arrayLike).
  9. IsConstructor(C) 가 true 이면
    1. A = ? Construct(C, « 𝔽(len) »).
  10. Else,
    1. A = ? ArrayCreate(len).
  11. k = 0.
  12. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ? Get(arrayLike, Pk).
    3. mapping = true 이면
      1. mappedValue = ? Call(mapper, thisArg, « kValue, 𝔽(k) »).
    4. Else,
      1. mappedValue = kValue.
    5. CreateDataPropertyOrThrow(A, Pk, mappedValue) 수행.
    6. k = k + 1.
  13. Set(A, "length", 𝔽(len), true) 수행.
  14. A 반환.
Note

이 메서드는 의도적으로 제네릭한 팩토리 메서드이며 this 값이 Array 생성자일 필요가 없다. 따라서 단일 숫자 인자를 취할 수 있는 다른 생성자들로 이전되거나 상속될 수 있다.

23.1.2.2 Array.isArray ( arg )

이 함수는 호출 시 다음 단계를 수행한다:

  1. IsArray(arg) 를 반환.

23.1.2.3 Array.of ( ...items )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. len = items 의 요소 개수.
  2. lenNumber = 𝔽(len).
  3. C = this 값.
  4. IsConstructor(C) true 이면
    1. A = ? Construct(C, « lenNumber »).
  5. Else,
    1. A = ? ArrayCreate(len).
  6. k = 0.
  7. k < len 동안 반복
    1. kValue = items[k].
    2. Pk = ! ToString(𝔽(k)).
    3. CreateDataPropertyOrThrow(A, Pk, kValue) 수행.
    4. k = k + 1.
  8. Set(A, "length", lenNumber, true) 수행.
  9. A 반환.
Note

이 메서드는 의도적으로 제네릭한 팩토리 메서드이며 this 값이 Array 생성자일 필요가 없다. 그러므로 단일 숫자 인자를 받을 수 있는 다른 생성자들에게 이전되거나 상속될 수 있다.

23.1.2.4 Array.prototype

Array.prototype 의 값은 Array 프로토타입 객체이다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성을 가진다.

23.1.2.5 get Array [ %Symbol.species% ]

Array[%Symbol.species%] 는 set 접근자 함수가 undefined접근자 프로퍼티이다. get 접근자 함수는 호출 시 다음을 수행한다:

  1. this 값을 반환한다.

이 함수의 "name" 프로퍼티 값은 "get [Symbol.species]" 이다.

Note

Array 프로토타입 메서드는 일반적으로 this 값의 생성자를 사용해 파생 객체를 생성한다. 그러나 서브클래스 생성자%Symbol.species% 프로퍼티 재정의를 통해 기본 동작을 재정의할 수 있다.

23.1.3 Array 프로토타입 객체의 프로퍼티 (Properties of the Array Prototype Object)

Array 프로토타입 객체:

  • %Array.prototype% 이다.
  • Array 이그조틱 객체이며 그에 지정된 내부 메서드를 가진다.
  • 초기 값이 +0𝔽 이고 특성이 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } 인 "length" 프로퍼티를 가진다.
  • 값이 %Object.prototype%[[Prototype]] 내부 슬롯을 가진다.
Note

Array 프로토타입 객체는 ECMAScript 2015 이전에 작성된 코드와의 호환성을 보장하기 위해 Array 이그조틱 객체로 명세된다.

23.1.3.1 Array.prototype.at ( index )

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. relativeIndex = ? ToIntegerOrInfinity(index).
  4. relativeIndex ≥ 0 이면
    1. k = relativeIndex.
  5. Else,
    1. k = len + relativeIndex.
  6. k < 0 또는 klen 이면 undefined 반환.
  7. Get(O, ! ToString(𝔽(k))) 반환.

23.1.3.2 Array.prototype.concat ( ...items )

이 메서드는 객체의 배열 요소 뒤에 각 인자의 배열 요소들을 이어붙인 배열을 반환한다.

호출 시 다음 단계를 수행한다:

  1. O = ? ToObject(this value).
  2. A = ? ArraySpeciesCreate(O, 0).
  3. n = 0.
  4. items 앞에 O 를 prepend.
  5. items 의 요소 E 에 대해
    1. spreadable = ? IsConcatSpreadable(E).
    2. spreadable = true 이면
      1. len = ? LengthOfArrayLike(E).
      2. n + len > 253 - 1 이면 TypeError 예외.
      3. k = 0.
      4. k < len 동안 반복
        1. Pk = ! ToString(𝔽(k)).
        2. exists = ? HasProperty(E, Pk).
        3. exists = true 이면
          1. subElement = ? Get(E, Pk).
          2. CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), subElement) 수행.
        4. n = n + 1.
        5. k = k + 1.
    3. Else,
      1. NOTE: E 는 펼치지 않고 단일 항목으로 추가된다.
      2. n ≥ 253 - 1 이면 TypeError 예외.
      3. CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), E) 수행.
      4. n = n + 1.
  6. Set(A, "length", 𝔽(n), true) 수행.
  7. A 반환.

이 메서드의 "length" 프로퍼티는 1𝔽 이다.

Note 1

단계 6 에서 "length" 프로퍼티를 명시적으로 설정하는 것은 items 의 마지막 비어 있지 않은 요소에 후행 홀(holes)이 있거나 A 가 내장 Array 가 아닌 경우 길이가 정확하도록 하기 위함이다.

Note 2

이 메서드는 의도적으로 제네릭하며 this 값이 Array 일 필요가 없다. 따라서 다른 종류의 객체에 메서드로 이전 가능하다.

23.1.3.2.1 IsConcatSpreadable ( O )

The abstract operation IsConcatSpreadable takes argument O (ECMAScript 언어 값) and returns Boolean 을 포함하는 정상 완료 또는 throw completion. It performs the following steps when called:

  1. O 가 Object 가 아니면 false 반환.
  2. spreadable = ? Get(O, %Symbol.isConcatSpreadable%).
  3. spreadableundefined 가 아니면 ToBoolean(spreadable) 반환.
  4. IsArray(O) 반환.

23.1.3.3 Array.prototype.constructor

Array.prototype.constructor 의 초기 값은 %Array% 이다.

23.1.3.4 Array.prototype.copyWithin ( target, start [ , end ] )

Note 1

end 인자는 선택적이다. 주어지지 않으면 this 값의 길이가 사용된다.

Note 2

target 이 음수이면 배열 길이 length 에 대해 length + target 으로 간주된다. start 가 음수이면 length + start, end 가 음수이면 length + end 으로 간주.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. relativeTarget = ? ToIntegerOrInfinity(target).
  4. relativeTarget = -∞ 이면 to = 0.
  5. Else if relativeTarget < 0 이면 to = max(len + relativeTarget, 0).
  6. Else to = min(relativeTarget, len).
  7. relativeStart = ? ToIntegerOrInfinity(start).
  8. relativeStart = -∞ 이면 from = 0.
  9. Else if relativeStart < 0 이면 from = max(len + relativeStart, 0).
  10. Else from = min(relativeStart, len).
  11. endundefined 이면 relativeEnd = len; else relativeEnd = ? ToIntegerOrInfinity(end).
  12. relativeEnd = -∞ 이면 final = 0.
  13. Else if relativeEnd < 0 이면 final = max(len + relativeEnd, 0).
  14. Else final = min(relativeEnd, len).
  15. count = min(final - from, len - to).
  16. from < to 그리고 to < from + count 이면
    1. direction = -1.
    2. from = from + count - 1.
    3. to = to + count - 1.
  17. Else,
    1. direction = 1.
  18. count > 0 동안 반복
    1. fromKey = ! ToString(𝔽(from)).
    2. toKey = ! ToString(𝔽(to)).
    3. fromPresent = ? HasProperty(O, fromKey).
    4. fromPresent = true 이면
      1. fromValue = ? Get(O, fromKey).
      2. Set(O, toKey, fromValue, true) 수행.
    5. Else,
      1. Assert: fromPresent = false.
      2. DeletePropertyOrThrow(O, toKey) 수행.
    6. from = from + direction.
    7. to = to + direction.
    8. count = count - 1.
  19. O 반환.
Note 3

이 메서드는 의도적으로 제네릭하다; this 값이 Array 일 필요가 없다. 따라서 다른 객체에 이전 가능.

23.1.3.5 Array.prototype.entries ( )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = ? ToObject(this value).
  2. CreateArrayIterator(O, key+value) 반환.

23.1.3.6 Array.prototype.every ( callback [ , thisArg ] )

Note 1

callback 은 세 인자를 받고 Boolean 으로 강제 가능한 값을 반환하는 함수여야 한다. every 는 배열에 존재하는 각 요소에 대해(누락 요소 제외) 오름차순으로 callback 을 호출하며 callbackfalse 를 반환하는 요소를 찾으면 즉시 false 를 반환한다. 찾지 못하면 true 반환. 배열의 누락된 요소에 대해서는 호출되지 않는다.

thisArg 가 제공되면 각 호출의 this 값으로 사용되고, 아니면 undefined 사용.

callback 은 (요소 값, 요소 인덱스, 탐색 중인 객체) 3개 인자로 호출.

every 자체는 객체를 직접 변경하지 않지만 callback 호출로 인해 변경될 수 있다.

every 가 처리할 요소 범위는 첫 호출 전에 고정된다. 이후 추가된 요소는 방문되지 않고, 값이 변경된 기존 요소는 방문 시점의 값이 전달되며, 방문 전에 삭제된 요소는 방문하지 않는다. 공집합(빈 배열)에 대해 true 를 반환한다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. IsCallable(callback) false 이면 TypeError 예외.
  4. k = 0.
  5. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
      3. testResult = false 이면 false 반환.
    4. k = k + 1.
  6. true 반환.
Note 2

이 메서드는 제네릭하여 this 값이 Array 일 필요가 없다.

23.1.3.7 Array.prototype.fill ( value [ , start [ , end ] ] )

Note 1

start 인자는 선택적이며, 없으면 +0𝔽 사용.

end 인자는 선택적이며, 없으면 this 값의 길이 사용.

Note 2

start 음수 → length + start, end 음수 → length + end.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. relativeStart = ? ToIntegerOrInfinity(start).
  4. relativeStart = -∞ 이면 k = 0.
  5. Else if relativeStart < 0 이면 k = max(len + relativeStart, 0).
  6. Else k = min(relativeStart, len).
  7. endundefined 이면 relativeEnd = len; else relativeEnd = ? ToIntegerOrInfinity(end).
  8. relativeEnd = -∞ 이면 final = 0.
  9. Else if relativeEnd < 0 이면 final = max(len + relativeEnd, 0).
  10. Else final = min(relativeEnd, len).
  11. k < final 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. Set(O, Pk, value, true) 수행.
    3. k = k + 1.
  12. O 반환.
Note 3

이 메서드는 제네릭.

23.1.3.8 Array.prototype.filter ( callback [ , thisArg ] )

Note 1

callback 은 세 인자를 받고 Boolean 으로 강제 가능한 값을 반환하는 함수. filter 는 배열 존재 요소(누락 제외)에 대해 오름차순 호출하며 true 를 반환한 값들로 새 배열을 만든다.

thisArg 제공 시 각 호출의 this 값, 아니면 undefined.

인자: (요소 값, 인덱스, 순회 객체).

filter 자체는 직접 변이하지 않으나 callback 으로 변이 가능.

처리 범위는 시작 전에 고정. 이후 추가 요소 방문 안 함; 값 변경된 요소는 방문 시 값; 방문 전 삭제된 요소는 방문 안 함.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. IsCallable(callback) false 이면 TypeError.
  4. A = ? ArraySpeciesCreate(O, 0).
  5. k = 0.
  6. to = 0.
  7. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. selected = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
      3. selected = true 이면
        1. CreateDataPropertyOrThrow(A, ! ToString(𝔽(to)), kValue) 수행.
        2. to = to + 1.
    4. k = k + 1.
  8. A 반환.
Note 2

제네릭.

23.1.3.9 Array.prototype.find ( predicate [ , thisArg ] )

Note 1

오름차순으로 predicate 실행하여 true 로 강제 가능한 값을 반환하는 첫 요소 값을 즉시 반환, 없으면 undefined. 추가 정보는 FindViaPredicate 참조.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg).
  4. findRec.[[Value]] 반환.
Note 2

제네릭.

23.1.3.10 Array.prototype.findIndex ( predicate [ , thisArg ] )

Note 1

오름차순으로 predicate 실행해 true 로 강제 가능한 값인 첫 요소의 인덱스 반환, 없으면 -1. FindViaPredicate 참조.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg).
  4. findRec.[[Index]] 반환.
Note 2

제네릭.

23.1.3.11 Array.prototype.findLast ( predicate [ , thisArg ] )

Note 1

내림차순으로 predicate 실행하여 true 로 강제 가능한 첫 요소 값 반환, 없으면 undefined. FindViaPredicate 참조.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg).
  4. findRec.[[Value]] 반환.
Note 2

제네릭 (Array object 일 필요 없음).

23.1.3.12 Array.prototype.findLastIndex ( predicate [ , thisArg ] )

Note 1

내림차순으로 predicate 실행하여 true 로 강제 가능한 첫 요소 인덱스 반환, 없으면 -1. FindViaPredicate 참조.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg).
  4. findRec.[[Index]] 반환.
Note 2

제네릭 (Array object 일 필요 없음).

23.1.3.12.1 FindViaPredicate ( O, len, direction, predicate, thisArg )

The abstract operation FindViaPredicate takes arguments O (Object), len (음이 아닌 정수), direction (ascending 또는 descending), predicate (ECMAScript 언어 값), and thisArg (ECMAScript 언어 값) and returns [[Index]] (정수 Number), [[Value]] (ECMAScript 언어 값) 필드를 가진 Record 를 포함하는 정상 완료 또는 throw completion.

O 는 배열 유사 객체 또는 TypedArray 여야 한다. 이 연산은 direction 에 따라 오름차순 또는 내림차순 인덱스 순서로 각 요소에 대해 predicate 를 호출하고, true 로 강제 가능한 값을 반환하면 그 요소의 인덱스와 값을 담은 Record 를 반환한다. 없다면 인덱스 -1𝔽, 값 undefinedRecord 반환.

predicate 는 함수여야 하며 (요소 값, 요소 인덱스, 순회 객체)의 인자를 받는다. 반환값은 Boolean 으로 강제된다.

thisArg 는 각 호출의 this 값.

이 연산 자체는 객체를 직접 변이하지 않지만 predicate 호출로 변이될 수 있다.

처리 범위는 순회 직전 고정. 이후 추가 요소는 방문되지 않고, 변경된 요소 값은 방문 시 값, 순회 시작 후 방문 전 삭제된 요소는 여전히 방문되며 프로토타입에서 조회되거나 undefined 가 된다.

It performs the following steps when called:

  1. IsCallable(predicate) false 이면 TypeError 예외.
  2. directionascending 이면
    1. indices = 0 (포함) 부터 len (배타) 까지 정수의 오름차순 List.
  3. Else,
    1. indices = 0 (포함) 부터 len (배타) 까지 정수의 내림차순 List.
  4. 각 정수 kindices 에 대해
    1. Pk = ! ToString(𝔽(k)).
    2. NOTE: OTypedArray 인 경우 이하 Get 호출은 정상 완료.
    3. kValue = ? Get(O, Pk).
    4. testResult = ? Call(predicate, thisArg, « kValue, 𝔽(k), O »).
    5. ToBoolean(testResult) true 이면 Record { [[Index]]: 𝔽(k), [[Value]]: kValue } 반환.
  5. Record { [[Index]]: -1𝔽, [[Value]]: undefined } 반환.

23.1.3.13 Array.prototype.flat ( [ depth ] )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = ? ToObject(this value).
  2. sourceLen = ? LengthOfArrayLike(O).
  3. depthNum = 1.
  4. depthundefined 가 아니면
    1. depthNum = ? ToIntegerOrInfinity(depth).
    2. depthNum < 0 이면 depthNum = 0.
  5. A = ? ArraySpeciesCreate(O, 0).
  6. FlattenIntoArray(A, O, sourceLen, 0, depthNum) 수행.
  7. A 반환.

23.1.3.13.1 FlattenIntoArray ( target, source, sourceLen, start, depth [ , mapperFunction [ , thisArg ] ] )

The abstract operation FlattenIntoArray takes arguments target (Object), source (Object), sourceLen (음이 아닌 정수), start (음이 아닌 정수), and depth (음이 아닌 정수 또는 +∞) and optional arguments mapperFunction (함수 객체) and thisArg (ECMAScript 언어 값) and returns 음이 아닌 정수를 포함하는 정상 완료 또는 throw completion. It performs the following steps when called:

  1. Assert: mapperFunction 이 존재하면 IsCallable(mapperFunction) = true, thisArg 존재, 그리고 depth = 1.
  2. targetIndex = start.
  3. sourceIndex = +0𝔽.
  4. (sourceIndex) < sourceLen 동안 반복
    1. P = ! ToString(sourceIndex).
    2. exists = ? HasProperty(source, P).
    3. exists = true 이면
      1. element = ? Get(source, P).
      2. mapperFunction 존재하면
        1. element = ? Call(mapperFunction, thisArg, « element, sourceIndex, source »).
      3. shouldFlatten = false.
      4. depth > 0 이면
        1. shouldFlatten = ? IsArray(element).
      5. shouldFlatten = true 이면
        1. depth = +∞ 이면 newDepth = +∞; Else newDepth = depth - 1.
        2. elementLen = ? LengthOfArrayLike(element).
        3. targetIndex = ? FlattenIntoArray(target, element, elementLen, targetIndex, newDepth).
      6. Else
        1. targetIndex ≥ 253 - 1 이면 TypeError 예외.
        2. CreateDataPropertyOrThrow(target, ! ToString(𝔽(targetIndex)), element) 수행.
        3. targetIndex = targetIndex + 1.
    4. sourceIndex = sourceIndex + 1𝔽.
  5. targetIndex 반환.

23.1.3.14 Array.prototype.flatMap ( mapperFunction [ , thisArg ] )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = ? ToObject(this value).
  2. sourceLen = ? LengthOfArrayLike(O).
  3. IsCallable(mapperFunction) false 이면 TypeError 예외.
  4. A = ? ArraySpeciesCreate(O, 0).
  5. FlattenIntoArray(A, O, sourceLen, 0, 1, mapperFunction, thisArg) 수행.
  6. A 반환.

23.1.3.15 Array.prototype.forEach ( callback [ , thisArg ] )

Note 1

callback 은 3 인자를 받는 함수. forEach 는 배열 존재 요소(누락 제외)에 대해 오름차순 1회 호출한다.

thisArg 제공 시 this, 아니면 undefined.

인자: (값, 인덱스, 객체).

직접 변이하지 않지만 callback 으로 변이 가능.

처리 범위는 시작 전에 고정; 이후 추가 요소 방문 안 함; 변경 요소 값은 방문 시; 삭제된 요소는 방문 안 함.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. IsCallable(callback) false 이면 TypeError.
  4. k = 0.
  5. k < len 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. Call(callback, thisArg, « kValue, 𝔽(k), O ») 수행.
    4. k = k + 1.
  6. undefined 반환.
Note 2

제네릭.

23.1.3.16 Array.prototype.includes ( searchElement [ , fromIndex ] )

Note 1

오름차순으로 SameValueZero 알고리즘을 사용해 searchElement 를 비교하며 위치가 있으면 true, 없으면 false 반환.

두 번째 인자 fromIndex 기본값 +0𝔽. 길이 이상이면 false. -0𝔽 보다 작으면 배열 끝에서의 오프셋으로 사용. 계산된 인덱스 ≤ +0𝔽 이면 전체 검색.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. len = 0 이면 false 반환.
  4. n = ? ToIntegerOrInfinity(fromIndex).
  5. Assert: fromIndexundefined 이면 n = 0.
  6. n = +∞ 이면 false 반환.
  7. Else if n = -∞ 이면 n = 0.
  8. n ≥ 0 이면
    1. k = n.
  9. Else,
    1. k = len + n.
    2. k < 0 이면 k = 0.
  10. k < len 동안
    1. elementK = ? Get(O, ! ToString(𝔽(k))).
    2. SameValueZero(searchElement, elementK) true 이면 true 반환.
    3. k = k + 1.
  11. false 반환.
Note 2

제네릭.

Note 3

indexOf 와 다르게 SameValueZero 사용으로 NaN 탐지 가능하며 누락 요소를 건너뛰지 않고 undefined 로 처리.

23.1.3.17 Array.prototype.indexOf ( searchElement [ , fromIndex ] )

오름차순으로 IsStrictlyEqual 알고리즘으로 비교하여 발견된 가장 작은 인덱스 반환, 없으면 -1𝔽.

Note 1

두 번째 인자 fromIndex 기본 +0𝔽. 길이 이상이면 -1𝔽. -0𝔽 보다 작으면 끝에서 오프셋. 계산 인덱스 ≤ +0𝔽 이면 전체 검색.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. len = 0 이면 -1𝔽 반환.
  4. n = ? ToIntegerOrInfinity(fromIndex).
  5. Assert: fromIndex undefinedn = 0.
  6. n = +∞ 이면 -1𝔽 반환.
  7. Else if n = -∞ ⇒ n = 0.
  8. n ≥ 0 이면
    1. k = n.
  9. Else
    1. k = len + n.
    2. k < 0 ⇒ k = 0.
  10. k < len 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. elementK = ? Get(O, Pk).
      2. IsStrictlyEqual(searchElement, elementK) true 이면 𝔽(k) 반환.
    4. k = k + 1.
  11. -1𝔽 반환.
Note 2

제네릭.

23.1.3.18 Array.prototype.join ( separator )

요소들을 String 으로 변환 후 separator 로 구분해 연결한 String 반환. 구분자 생략 시 쉼표 사용.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. separatorundefined 이면 sep = ",".
  4. Else sep = ? ToString(separator).
  5. R = 빈 String.
  6. k = 0.
  7. k < len 동안
    1. k > 0 이면 R = R + sep.
    2. element = ? Get(O, ! ToString(𝔽(k))).
    3. elementundefined, null 이 아니면
      1. S = ? ToString(element).
      2. R = R + S.
    4. k = k + 1.
  8. R 반환.
Note

제네릭.

23.1.3.19 Array.prototype.keys ( )

호출 시:

  1. O = ? ToObject(this value).
  2. CreateArrayIterator(O, key) 반환.

23.1.3.20 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )

Note 1

내림차순 IsStrictlyEqual 로 비교, 발견된 가장 큰 인덱스 반환, 없으면 -1𝔽. fromIndex 기본은 길이 - 1.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. len = 0 이면 -1𝔽 반환.
  4. fromIndex 존재하면 n = ? ToIntegerOrInfinity(fromIndex); else n = len - 1.
  5. n = -∞ 이면 -1𝔽 반환.
  6. n ≥ 0 이면
    1. k = min(n, len - 1).
  7. Else
    1. k = len + n.
  8. k ≥ 0 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. elementK = ? Get(O, Pk).
      2. IsStrictlyEqual(searchElement, elementK) true 이면 𝔽(k) 반환.
    4. k = k - 1.
  9. -1𝔽 반환.
Note 2

제네릭.

23.1.3.21 Array.prototype.map ( callback [ , thisArg ] )

Note 1

각 존재 요소에 대해 오름차순으로 callback 실행하고 결과로 새 Array 구성. 누락 요소는 호출 안 함.

thisArg 있으면 this, 없으면 undefined.

인자: (값, 인덱스, 객체).

map 은 직접 변이 안 하지만 callback 으로 변이 가능.

범위는 시작 전 고정. 이후 추가 요소 방문 안 함; 변경 요소는 방문 시 값; 삭제된 요소는 방문 안 함.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. IsCallable(callback) false 이면 TypeError.
  4. A = ? ArraySpeciesCreate(O, len).
  5. k = 0.
  6. k < len 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. mappedValue = ? Call(callback, thisArg, « kValue, 𝔽(k), O »).
      3. CreateDataPropertyOrThrow(A, Pk, mappedValue) 수행.
    4. k = k + 1.
  7. A 반환.
Note 2

제네릭.

23.1.3.22 Array.prototype.pop ( )

Note 1

배열의 마지막 요소를 제거하고 그 값을 반환.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. len = 0 이면
    1. Set(O, "length", +0𝔽, true).
    2. undefined 반환.
  4. Else
    1. Assert: len > 0.
    2. newLen = 𝔽(len - 1).
    3. index = ! ToString(newLen).
    4. element = ? Get(O, index).
    5. DeletePropertyOrThrow(O, index).
    6. Set(O, "length", newLen, true).
    7. element 반환.
Note 2

제네릭.

23.1.3.23 Array.prototype.push ( ...items )

Note 1

인자들을 나타나는 순서대로 배열 끝에 추가하고 새 길이를 반환.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. argCount = items 요소 개수.
  4. len + argCount > 253 - 1 이면 TypeError 예외.
  5. items 요소 E 에 대해
    1. Set(O, ! ToString(𝔽(len)), E, true) 수행.
    2. len = len + 1.
  6. Set(O, "length", 𝔽(len), true) 수행.
  7. 𝔽(len) 반환.

이 메서드의 "length" 프로퍼티는 1𝔽.

Note 2

제네릭.

23.1.3.24 Array.prototype.reduce ( callback [ , initialValue ] )

Note 1

callback 은 네 인자를 받는 함수. reduce 는 첫 요소 이후 각 존재 요소에 대해 오름차순 호출.

인자: previousValue, currentValue, currentIndex, 순회 객체. 첫 호출 시 initialValue 가 제공되면 previousValue = initialValue, currentValue = 첫 값; 없으면 previousValue = 첫 값, currentValue = 두 번째 값. 요소 없고 initialValue 미제공 시 TypeError.

직접 변이하지 않지만 호출로 변이될 수 있음.

처리 범위는 시작 전 고정. 이후 추가 요소 방문 안 함; 변경 요소 값은 방문 시 값; 삭제된 요소 방문 안 함.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. IsCallable(callback) false 이면 TypeError.
  4. len = 0 이고 initialValue 미존재이면 TypeError.
  5. k = 0.
  6. accumulator = undefined.
  7. initialValue 존재하면
    1. accumulator = initialValue.
  8. Else
    1. kPresent = false.
    2. kPresent = false 그리고 k < len 동안
      1. Pk = ! ToString(𝔽(k)).
      2. kPresent = ? HasProperty(O, Pk).
      3. kPresent = true 이면
        1. accumulator = ? Get(O, Pk).
      4. k = k + 1.
    3. kPresent = false 이면 TypeError.
  9. k < len 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »).
    4. k = k + 1.
  10. accumulator 반환.
Note 2

제네릭.

23.1.3.25 Array.prototype.reduceRight ( callback [ , initialValue ] )

Note 1

callback 은 네 인자를 받는 함수. reduceRight 는 마지막 요소 이전 각 존재 요소를 내림차순 호출.

첫 호출 시 initialValue 있으면 previousValue = initialValue, currentValue = 마지막 값; 없으면 previousValue = 마지막 값, currentValue = 끝에서 두 번째. 요소 없고 initialValue 없으면 TypeError.

변이 규칙은 reduce 와 유사.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. IsCallable(callback) false 이면 TypeError.
  4. len = 0 이고 initialValue 미존재이면 TypeError.
  5. k = len - 1.
  6. accumulator = undefined.
  7. initialValue 존재하면
    1. accumulator = initialValue.
  8. Else
    1. kPresent = false.
    2. kPresent = false 그리고 k ≥ 0 동안
      1. Pk = ! ToString(𝔽(k)).
      2. kPresent = ? HasProperty(O, Pk).
      3. kPresent = true 이면
        1. accumulator = ? Get(O, Pk).
      4. k = k - 1.
    3. kPresent = false 이면 TypeError.
  9. k ≥ 0 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »).
    4. k = k - 1.
  10. accumulator 반환.
Note 2

제네릭.

23.1.3.26 Array.prototype.reverse ( )

Note 1

배열 요소 순서를 반대로 재배열하고 그 배열을 반환.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. middle = floor(len / 2).
  4. lower = 0.
  5. lowermiddle 동안
    1. upper = len - lower - 1.
    2. upperP = ! ToString(𝔽(upper)).
    3. lowerP = ! ToString(𝔽(lower)).
    4. lowerExists = ? HasProperty(O, lowerP).
    5. lowerExists = true 이면
      1. lowerValue = ? Get(O, lowerP).
    6. upperExists = ? HasProperty(O, upperP).
    7. upperExists = true 이면
      1. upperValue = ? Get(O, upperP).
    8. lowerExists = true 그리고 upperExists = true 이면
      1. Set(O, lowerP, upperValue, true).
      2. Set(O, upperP, lowerValue, true).
    9. Else if lowerExists = false 그리고 upperExists = true
      1. Set(O, lowerP, upperValue, true).
      2. DeletePropertyOrThrow(O, upperP).
    10. Else if lowerExists = true 그리고 upperExists = false
      1. DeletePropertyOrThrow(O, lowerP).
      2. Set(O, upperP, lowerValue, true).
    11. Else
      1. Assert: 둘 다 false.
      2. NOTE: 동작 없음.
    12. lower = lower + 1.
  6. O 반환.
Note 2

제네릭.

23.1.3.27 Array.prototype.shift ( )

배열의 첫 요소를 제거하고 그 값을 반환한다.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. len = 0 이면
    1. Set(O, "length", +0𝔽, true).
    2. undefined 반환.
  4. first = ? Get(O, "0").
  5. k = 1.
  6. k < len 동안
    1. from = ! ToString(𝔽(k)).
    2. to = ! ToString(𝔽(k - 1)).
    3. fromPresent = ? HasProperty(O, from).
    4. fromPresent = true 이면
      1. fromValue = ? Get(O, from).
      2. Set(O, to, fromValue, true).
    5. Else
      1. Assert: fromPresent = false.
      2. DeletePropertyOrThrow(O, to).
    6. k = k + 1.
  7. DeletePropertyOrThrow(O, ! ToString(𝔽(len - 1))).
  8. Set(O, "length", 𝔽(len - 1), true).
  9. first 반환.
Note

제네릭.

23.1.3.28 Array.prototype.slice ( start, end )

배열의 start 부터 (포함), end (배타) 까지 요소를 포함하는 배열을 반환 (endundefined 이면 끝까지). start 음수 → length + start, end 음수 → length + end.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. relativeStart = ? ToIntegerOrInfinity(start).
  4. relativeStart = -∞ 이면 k = 0.
  5. Else if relativeStart < 0 이면 k = max(len + relativeStart, 0).
  6. Else k = min(relativeStart, len).
  7. end undefined 이면 relativeEnd = len; else relativeEnd = ? ToIntegerOrInfinity(end).
  8. relativeEnd = -∞ 이면 final = 0.
  9. Else if relativeEnd < 0 이면 final = max(len + relativeEnd, 0).
  10. Else final = min(relativeEnd, len).
  11. count = max(final - k, 0).
  12. A = ? ArraySpeciesCreate(O, count).
  13. n = 0.
  14. k < final 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), kValue) 수행.
    4. k = k + 1.
    5. n = n + 1.
  15. Set(A, "length", 𝔽(n), true) 수행.
  16. A 반환.
Note 1

단계 15 에서 "length" 를 명시적으로 설정하는 것은 A 가 내장 Array 가 아닌 경우에도 길이가 정확하도록 하기 위함.

Note 2

제네릭.

23.1.3.29 Array.prototype.some ( callback [ , thisArg ] )

Note 1

callback 은 세 인자를 받고 Boolean 으로 강제 가능한 값을 반환. some 은 존재 요소를 오름차순으로 호출하다가 true 반환 시 즉시 true, 없으면 false. 누락 요소는 호출 안 함.

thisArg 제공 시 this, 아니면 undefined.

인자: (요소 값, 인덱스, 객체).

직접 변이하지 않지만 callback 으로 변이 가능.

처리 범위는 시작 전 고정. 이후 추가 요소 방문 안 함; 변경 요소 값은 방문 시 값; 삭제된 요소 방문 안 함. 빈 배열이면 false.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. IsCallable(callback) false 이면 TypeError.
  4. k = 0.
  5. k < len 동안
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ? HasProperty(O, Pk).
    3. kPresent = true 이면
      1. kValue = ? Get(O, Pk).
      2. testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
      3. testResult = true 이면 true 반환.
    4. k = k + 1.
  6. false 반환.
Note 2

제네릭.

23.1.3.30 Array.prototype.sort ( comparator )

배열 요소를 정렬한다. comparatorundefined 가 아니면 두 인자 x, y 를 받아 x < y 이면 음수, x > y 이면 양수, 같으면 0인 Number 를 반환하는 함수여야 한다.

호출 시:

  1. comparatorundefined 이고 IsCallable(comparator) = false 이면 TypeError.
  2. obj = ? ToObject(this value).
  3. len = ? LengthOfArrayLike(obj).
  4. SortCompare 를 (x, y) 매개변수로 하고 comparator 캡처하여 호출 시 ? CompareArrayElements(x, y, comparator) 를 반환하는 새 추상 클로저로 둔다.
  5. sortedList = ? SortIndexedProperties(obj, len, SortCompare, skip-holes).
  6. itemCount = sortedList 의 요소 수.
  7. j = 0.
  8. j < itemCount 동안
    1. Set(obj, ! ToString(𝔽(j)), sortedList[j], true) 수행.
    2. j = j + 1.
  9. NOTE: 단계 5 에서 skip-holes 사용. 남은 인덱스는 감지된 홀 수를 유지하기 위해 삭제된다.
  10. j < len 동안
    1. DeletePropertyOrThrow(obj, ! ToString(𝔽(j))) 수행.
    2. j = j + 1.
  11. obj 반환.
Note 1

존재하지 않는 프로퍼티 값은 항상 undefined 프로퍼티 값보다 크고, undefined 는 다른 어떤 값보다 크기 때문에 (CompareArrayElements 참조) undefined 값이 결과 끝에, 그 뒤에 존재하지 않는 값이 온다.

Note 2

단계 5, 6ToString 호출은 SortCompare일관 비교자가 아니게 만들 수 있다.

Note 3

제네릭.

23.1.3.30.1 SortIndexedProperties ( obj, len, SortCompare, holes )

The abstract operation SortIndexedProperties takes arguments obj (Object), len (음이 아닌 정수), SortCompare (두 매개변수 추상 클로저), and holes (skip-holes 또는 read-through-holes) and returns ECMAScript 언어 값 List 를 포함하는 정상 완료 또는 throw completion. It performs the following steps when called:

  1. items = 새 빈 List.
  2. k = 0.
  3. k < len 동안
    1. Pk = ! ToString(𝔽(k)).
    2. holesskip-holes 이면
      1. kRead = ? HasProperty(obj, Pk).
    3. Else
      1. Assert: holes = read-through-holes.
      2. kRead = true.
    4. kRead = true 이면
      1. kValue = ? Get(obj, Pk).
      2. itemskValue 추가.
    5. k = k + 1.
  4. 구현 정의 순서의 SortCompare 호출items 정렬. abrupt completion 반환 시 추가 호출 중지 후 그 Completion Record 반환.
  5. items 반환.

정렬 순서 는 위 알고리즘 단계 4 완료 후 items 의 순서. SortCompare일관 비교자가 아니면 구현 정의. Array.prototype.sort 또는 Array.prototype.toSorted 가 호출할 때 comparatorundefined 이고 특정 값에 대한 모든 ToString 적용 결과가 동일하지 않으면 정렬 순서 역시 구현 정의.

구현 정의 아닌 경우 다음 조건 충족 필요:

  • itemCount 보다 작은 음이 아닌 정수의 어떤 수학적 순열 π 가 존재하여, 모든 j 에 대해 old[j] 와 new[π(j)] 는 정확히 동일해야 한다.
  • 모든 j, k (각각 itemCount 미만) 대해 (SortCompare(old[j], old[k])) < 0이면 π(j) < π(k).
  • j < k < itemCount 이고 (SortCompare(old[j], old[k])) = 0 이면 π(j) < π(k) (안정 정렬).

old[j] 표기는 단계 4 실행 전 items[j] 를, new[j] 표기는 실행 후 items[j] 를 의미.

추상 클로저 또는 함수 comparator 가 집합 S 에 대한 일관 비교자 이려면 S 내 값 a, b, c (동일 가능)에 대해 다음 조건 만족: a <C b(comparator(a, b)) < 0, a =C b 는 0, a >C b 는 > 0 뜻.

  • 특정 (a, b) 쌍에 대해 comparator(a, b) 는 항상 동일 v (Number, NaN 아님) 반환. 따라서 정확히 하나만 성립.
  • comparator(a, b) 호출은 obj 또는 그 프로토타입 체인 객체를 수정하지 않는다.
  • a =C a (반사성)
  • a =C bb =C a (대칭성)
  • a =C b, b =C ca =C c (이행성)
  • a <C b, b <C ca <C c
  • a >C b, b >C ca >C c
Note

위 조건은 comparatorS 를 등가류로 나누고 그 등가류가 전순서를 갖도록 하는 데 필요충분.

23.1.3.30.2 CompareArrayElements ( x, y, comparator )

The abstract operation CompareArrayElements takes arguments x (ECMAScript 언어 값), y (ECMAScript 언어 값), and comparator (함수 객체 또는 undefined) and returns Number 를 포함하는 정상 완료 또는 abrupt completion. It performs the following steps when called:

  1. x, y 둘 다 undefined 이면 +0𝔽 반환.
  2. xundefined 이면 1𝔽 반환.
  3. yundefined 이면 -1𝔽 반환.
  4. comparatorundefined 이면
    1. v = ? ToNumber(? Call(comparator, undefined, « x, y »)).
    2. vNaN 이면 +0𝔽 반환.
    3. v 반환.
  5. xString = ? ToString(x).
  6. yString = ? ToString(y).
  7. xSmaller = ! IsLessThan(xString, yString, true).
  8. xSmaller = true 이면 -1𝔽 반환.
  9. ySmaller = ! IsLessThan(yString, xString, true).
  10. ySmaller = true 이면 1𝔽 반환.
  11. +0𝔽 반환.

23.1.3.31 Array.prototype.splice ( start, deleteCount, ...items )

Note 1

이 메서드는 정수 인덱스 start 부터 deleteCount 개 요소를 삭제하고 items 요소로 대체한다. 삭제된 요소(있다면)를 담은 Array 반환.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. relativeStart = ? ToIntegerOrInfinity(start).
  4. relativeStart = -∞ 이면 actualStart = 0.
  5. Else if relativeStart < 0 이면 actualStart = max(len + relativeStart, 0).
  6. Else actualStart = min(relativeStart, len).
  7. itemCount = items 요소 개수.
  8. start 미존재이면
    1. actualDeleteCount = 0.
  9. Else if deleteCount 미존재이면
    1. actualDeleteCount = len - actualStart.
  10. Else
    1. dc = ? ToIntegerOrInfinity(deleteCount).
    2. actualDeleteCount = dc 를 0 과 len - actualStart 사이로 clamp 한 값.
  11. len + itemCount - actualDeleteCount > 253 - 1 이면 TypeError.
  12. A = ? ArraySpeciesCreate(O, actualDeleteCount).
  13. k = 0.
  14. k < actualDeleteCount 동안
    1. from = ! ToString(𝔽(actualStart + k)).
    2. HasProperty(O, from) = true 이면
      1. fromValue = ? Get(O, from).
      2. CreateDataPropertyOrThrow(A, ! ToString(𝔽(k)), fromValue) 수행.
    3. k = k + 1.
  15. Set(A, "length", 𝔽(actualDeleteCount), true) 수행.
  16. itemCount < actualDeleteCount 이면
    1. k = actualStart.
    2. k < (len - actualDeleteCount) 동안
      1. from = ! ToString(𝔽(k + actualDeleteCount)).
      2. to = ! ToString(𝔽(k + itemCount)).
      3. HasProperty(O, from) = true 이면
        1. fromValue = ? Get(O, from).
        2. Set(O, to, fromValue, true).
      4. Else
        1. DeletePropertyOrThrow(O, to).
      5. k = k + 1.
    3. k = len.
    4. k > (len - actualDeleteCount + itemCount) 동안
      1. DeletePropertyOrThrow(O, ! ToString(𝔽(k - 1))).
      2. k = k - 1.
  17. Else if itemCount > actualDeleteCount 이면
    1. k = (len - actualDeleteCount).
    2. k > actualStart 동안
      1. from = ! ToString(𝔽(k + actualDeleteCount - 1)).
      2. to = ! ToString(𝔽(k + itemCount - 1)).
      3. HasProperty(O, from) = true 이면
        1. fromValue = ? Get(O, from).
        2. Set(O, to, fromValue, true).
      4. Else
        1. DeletePropertyOrThrow(O, to).
      5. k = k - 1.
  18. k = actualStart.
  19. items 요소 E 에 대해
    1. Set(O, ! ToString(𝔽(k)), E, true).
    2. k = k + 1.
  20. Set(O, "length", 𝔽(len - actualDeleteCount + itemCount), true) 수행.
  21. A 반환.
Note 2

단계 15, 20 의 명시적 설정은 내장 Array 가 아닌 경우에도 길이가 정확하도록 하기 위함.

Note 3

제네릭.

23.1.3.32 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 국제화 API 를 포함하는 구현은 ECMA-402 명세에 따라 이 메서드를 구현해야 한다. 포함하지 않으면 아래 명세를 사용.

Note 1

ECMA-402 첫 에디션은 이 메서드의 대체 명세를 포함하지 않았다.

선택적 매개변수의 의미는 ECMA-402 명세에서 정의되며, 이를 포함하지 않는 구현은 다른 용도로 사용해서는 안 된다.

호출 시:

  1. array = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(array).
  3. separator = 호스트 환경 현재 로캘에 적합한 구현 정의 목록 구분자 String (예: ", ").
  4. R = 빈 String.
  5. k = 0.
  6. k < len 동안
    1. k > 0 이면 R = R + separator.
    2. element = ? Get(array, ! ToString(𝔽(k))).
    3. elementundefined, null 이 아니면
      1. S = ? ToString(? Invoke(element, "toLocaleString")).
      2. R = R + S.
    4. k = k + 1.
  7. R 반환.
Note 2

각 요소를 toLocaleString 으로 변환하고 로캘 민감 구분자 String 으로 결합. toString 과 유사하나 로캘 민감 결과를 의도.

Note 3

제네릭.

23.1.3.33 Array.prototype.toReversed ( )

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. A = ? ArrayCreate(len).
  4. k = 0.
  5. k < len 동안
    1. from = ! ToString(𝔽(len - k - 1)).
    2. Pk = ! ToString(𝔽(k)).
    3. fromValue = ? Get(O, from).
    4. CreateDataPropertyOrThrow(A, Pk, fromValue) 수행.
    5. k = k + 1.
  6. A 반환.

23.1.3.34 Array.prototype.toSorted ( comparator )

호출 시:

  1. comparatorundefined 그리고 IsCallable(comparator) = false 이면 TypeError.
  2. O = ? ToObject(this value).
  3. len = ? LengthOfArrayLike(O).
  4. A = ? ArrayCreate(len).
  5. SortCompare 를 (x, y) → ? CompareArrayElements(x, y, comparator) 클로저로 둔다.
  6. sortedList = ? SortIndexedProperties(O, len, SortCompare, read-through-holes).
  7. j = 0.
  8. j < len 동안
    1. CreateDataPropertyOrThrow(A, ! ToString(𝔽(j)), sortedList[j]) 수행.
    2. j = j + 1.
  9. A 반환.

23.1.3.35 Array.prototype.toSpliced ( start, skipCount, ...items )

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. relativeStart = ? ToIntegerOrInfinity(start).
  4. relativeStart = -∞ 이면 actualStart = 0.
  5. Else if relativeStart < 0 이면 actualStart = max(len + relativeStart, 0).
  6. Else actualStart = min(relativeStart, len).
  7. insertCount = items 요소 개수.
  8. start 미존재이면
    1. actualSkipCount = 0.
  9. Else if skipCount 미존재이면
    1. actualSkipCount = len - actualStart.
  10. Else
    1. sc = ? ToIntegerOrInfinity(skipCount).
    2. actualSkipCount = sc 를 0 과 len - actualStart 사이로 clamp.
  11. newLen = len + insertCount - actualSkipCount.
  12. newLen > 253 - 1 이면 TypeError.
  13. A = ? ArrayCreate(newLen).
  14. i = 0.
  15. r = actualStart + actualSkipCount.
  16. i < actualStart 동안
    1. Pi = ! ToString(𝔽(i)).
    2. iValue = ? Get(O, Pi).
    3. CreateDataPropertyOrThrow(A, Pi, iValue) 수행.
    4. i = i + 1.
  17. items 요소 E 에 대해
    1. Pi = ! ToString(𝔽(i)).
    2. CreateDataPropertyOrThrow(A, Pi, E) 수행.
    3. i = i + 1.
  18. i < newLen 동안
    1. Pi = ! ToString(𝔽(i)).
    2. from = ! ToString(𝔽(r)).
    3. fromValue = ? Get(O, from).
    4. CreateDataPropertyOrThrow(A, Pi, fromValue) 수행.
    5. i = i + 1.
    6. r = r + 1.
  19. A 반환.

23.1.3.36 Array.prototype.toString ( )

호출 시:

  1. array = ? ToObject(this value).
  2. func = ? Get(array, "join").
  3. IsCallable(func) false 이면 func = 본질 함수 %Object.prototype.toString%.
  4. Call(func, array) 반환.
Note

제네릭.

23.1.3.37 Array.prototype.unshift ( ...items )

인자를 배열 앞에 추가하며, 추가된 순서를 유지.

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. argCount = items 요소 개수.
  4. argCount > 0 이면
    1. len + argCount > 253 - 1 이면 TypeError.
    2. k = len.
    3. k > 0 동안
      1. from = ! ToString(𝔽(k - 1)).
      2. to = ! ToString(𝔽(k + argCount - 1)).
      3. fromPresent = ? HasProperty(O, from).
      4. fromPresent = true 이면
        1. fromValue = ? Get(O, from).
        2. Set(O, to, fromValue, true).
      5. Else
        1. Assert: fromPresent = false.
        2. DeletePropertyOrThrow(O, to).
      6. k = k - 1.
    4. j = +0𝔽.
    5. items 요소 E 에 대해
      1. Set(O, ! ToString(j), E, true).
      2. j = j + 1𝔽.
  5. Set(O, "length", 𝔽(len + argCount), true) 수행.
  6. 𝔽(len + argCount) 반환.

이 메서드의 "length" 프로퍼티는 1𝔽.

Note

제네릭.

23.1.3.38 Array.prototype.values ( )

호출 시:

  1. O = ? ToObject(this value).
  2. CreateArrayIterator(O, value) 반환.

23.1.3.39 Array.prototype.with ( index, value )

호출 시:

  1. O = ? ToObject(this value).
  2. len = ? LengthOfArrayLike(O).
  3. relativeIndex = ? ToIntegerOrInfinity(index).
  4. relativeIndex ≥ 0 이면 actualIndex = relativeIndex; Else actualIndex = len + relativeIndex.
  5. actualIndexlen 또는 actualIndex < 0 이면 RangeError 예외.
  6. A = ? ArrayCreate(len).
  7. k = 0.
  8. k < len 동안
    1. Pk = ! ToString(𝔽(k)).
    2. k = actualIndex 이면 fromValue = value; Else fromValue = ? Get(O, Pk).
    3. CreateDataPropertyOrThrow(A, Pk, fromValue) 수행.
    4. k = k + 1.
  9. A 반환.

23.1.3.40 Array.prototype [ %Symbol.iterator% ] ( )

%Symbol.iterator% 프로퍼티의 초기 값은 23.1.3.38 에 정의된 %Array.prototype.values% 이다.

23.1.3.41 Array.prototype [ %Symbol.unscopables% ]

%Symbol.unscopables% 데이터 프로퍼티의 초기 값은 다음 단계를 통해 생성된 객체이다:

  1. unscopableList = OrdinaryObjectCreate(null).
  2. CreateDataPropertyOrThrow(unscopableList, "at", true).
  3. CreateDataPropertyOrThrow(unscopableList, "copyWithin", true).
  4. CreateDataPropertyOrThrow(unscopableList, "entries", true).
  5. CreateDataPropertyOrThrow(unscopableList, "fill", true).
  6. CreateDataPropertyOrThrow(unscopableList, "find", true).
  7. CreateDataPropertyOrThrow(unscopableList, "findIndex", true).
  8. CreateDataPropertyOrThrow(unscopableList, "findLast", true).
  9. CreateDataPropertyOrThrow(unscopableList, "findLastIndex", true).
  10. CreateDataPropertyOrThrow(unscopableList, "flat", true).
  11. CreateDataPropertyOrThrow(unscopableList, "flatMap", true).
  12. CreateDataPropertyOrThrow(unscopableList, "includes", true).
  13. CreateDataPropertyOrThrow(unscopableList, "keys", true).
  14. CreateDataPropertyOrThrow(unscopableList, "toReversed", true).
  15. CreateDataPropertyOrThrow(unscopableList, "toSorted", true).
  16. CreateDataPropertyOrThrow(unscopableList, "toSpliced", true).
  17. CreateDataPropertyOrThrow(unscopableList, "values", true).
  18. unscopableList 반환.

이 프로퍼티 특성은 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.

Note

이 객체의 자체 프로퍼티 이름들은 ECMAScript 2015 이전 Array.prototype 표준 프로퍼티가 아니던 이름들이다. 이 이름들은 with 문 바인딩 목적에서 무시되어, Array 를 바인딩 객체로 사용하는 with 문에 의해 외부 스코프 바인딩이 가려지는 기존 코드 동작을 보존한다.

"with"unscopableList 에 포함되지 않는 이유는 이미 예약어 이기 때문이다.

23.1.4 Array 인스턴스의 프로퍼티 (Properties of Array Instances)

Array 인스턴스는 Array 이그조틱 객체이며 해당 객체에 지정된 내부 메서드를 가진다. 또한 Array 프로토타입 객체로부터 프로퍼티를 상속한다.

Array 인스턴스는 "length" 프로퍼티와 배열 인덱스 이름을 가진 열거 가능한 프로퍼티 집합을 가진다.

23.1.4.1 length

Array 인스턴스의 "length" 프로퍼티는 그 값이 배열 인덱스 이름을 가진 모든 설정 가능( configurable ) 자체 프로퍼티 이름보다 항상 수치적으로 큰 데이터 프로퍼티이다.

"length" 프로퍼티는 초기 특성 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } 를 가진다.

Note

"length" 값을 줄이면 이전 길이와 새 길이 사이의 인덱스를 가진 자체 배열 요소가 삭제된다. 단, non-configurable 프로퍼티는 삭제되지 않는다. 배열의 "length" 를 기존 non-configurable array-indexed 프로퍼티의 가장 큰 수치적 이름보다 작거나 같은 값으로 설정하려 하면 길이는 그 프로퍼티 이름보다 1 큰 값으로 설정된다. 10.4.2.1 참조.

23.1.5 Array 이터레이터 객체 (Array Iterator Objects)

Array Iterator 는 특정 Array 인스턴스 객체 위의 특정 순회를 표현하는 객체이다. 이름 있는 생성자는 없으며 Array 인스턴스 객체의 특정 메서드를 호출하여 생성된다.

23.1.5.1 CreateArrayIterator ( array, kind )

The abstract operation CreateArrayIterator takes arguments array (Object) and kind (key+value, key, 또는 value) and returns Object. 이터레이터를 반환하는 Array 메서드들이 사용할 이터레이터 객체를 생성하는 데 사용된다. It performs the following steps when called:

  1. iterator = OrdinaryObjectCreate(%ArrayIteratorPrototype%, « [[IteratedArrayLike]], [[ArrayLikeNextIndex]], [[ArrayLikeIterationKind]] »).
  2. iterator.[[IteratedArrayLike]] = array.
  3. iterator.[[ArrayLikeNextIndex]] = 0.
  4. iterator.[[ArrayLikeIterationKind]] = kind.
  5. iterator 반환.

23.1.5.2 %ArrayIteratorPrototype% 객체 (The %ArrayIteratorPrototype% Object)

%ArrayIteratorPrototype% 객체:

23.1.5.2.1 %ArrayIteratorPrototype%.next ( )

  1. O = this 값.
  2. O 가 Object 가 아니면 TypeError 예외.
  3. OArray Iterator Instance 의 모든 내부 슬롯(23.1.5.3)을 갖지 않으면 TypeError 예외.
  4. array = O.[[IteratedArrayLike]].
  5. array = undefined 이면 CreateIteratorResultObject(undefined, true) 반환.
  6. index = O.[[ArrayLikeNextIndex]].
  7. kind = O.[[ArrayLikeIterationKind]].
  8. array[[TypedArrayName]] 내부 슬롯을 가지면
    1. taRecord = MakeTypedArrayWithBufferWitnessRecord(array, seq-cst).
    2. IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
    3. len = TypedArrayLength(taRecord).
  9. Else
    1. len = ? LengthOfArrayLike(array).
  10. indexlen 이면
    1. O.[[IteratedArrayLike]] = undefined.
    2. CreateIteratorResultObject(undefined, true) 반환.
  11. O.[[ArrayLikeNextIndex]] = index + 1.
  12. indexNumber = 𝔽(index).
  13. kindkey 이면
    1. result = indexNumber.
  14. Else
    1. elementKey = ! ToString(indexNumber).
    2. elementValue = ? Get(array, elementKey).
    3. kindvalue 이면
      1. result = elementValue.
    4. Else
      1. Assert: kind = key+value.
      2. result = CreateArrayFromListindexNumber, elementValue »).
  15. CreateIteratorResultObject(result, false) 반환.

23.1.5.2.2 %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag% 프로퍼티 초기 값은 String "Array Iterator".

이 프로퍼티 특성 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.

23.1.5.3 Array 이터레이터 인스턴스의 프로퍼티 (Properties of Array Iterator Instances)

Array 이터레이터 인스턴스는 %ArrayIteratorPrototype% 본질 객체로부터 프로퍼티를 상속하는 일반 객체이다. 초기 생성 시 내부 슬롯은 Table 72 에 나열된 것을 갖는다.

Table 72: Array 이터레이터 인스턴스의 내부 슬롯 (Internal Slots of Array Iterator Instances)
Internal Slot Type Description
[[IteratedArrayLike]] an Object or undefined 순회 중인 array-like 객체.
[[ArrayLikeNextIndex]] a non-negative integer 이 이터레이터가 다음에 검사할 요소의 정수 인덱스.
[[ArrayLikeIterationKind]] key+value, key, or value 각 요소에 대해 반환되는 내용을 식별하는 값.

23.2 TypedArray 객체

TypedArray 는 기본 이진 데이터 버퍼(25.1)에 대한 배열 유사 뷰를 제공한다. TypedArray 요소 타입은 특정 TypedArray 인스턴스의 모든 요소가 갖는 기본 이진 스칼라 데이터 타입이다. 지원되는 각 요소 타입마다 Table 73에 열거된 고유한 TypedArray 생성자가 있다. Table 73의 각 생성자는 그에 상응하는 별도의 프로토타입 객체를 가진다.

Table 73: TypedArray 생성자
생성자 이름 및 내재 객체 요소 타입 요소 크기 변환 연산 설명
Int8Array
%Int8Array%
int8 1 ToInt8 8비트 2의 보수 부호 있는 정수
Uint8Array
%Uint8Array%
uint8 1 ToUint8 8비트 부호 없는 정수
Uint8ClampedArray
%Uint8ClampedArray%
uint8clamped 1 ToUint8Clamp 8비트 부호 없는 정수 (클램프 변환)
Int16Array
%Int16Array%
int16 2 ToInt16 16비트 2의 보수 부호 있는 정수
Uint16Array
%Uint16Array%
uint16 2 ToUint16 16비트 부호 없는 정수
Int32Array
%Int32Array%
int32 4 ToInt32 32비트 2의 보수 부호 있는 정수
Uint32Array
%Uint32Array%
uint32 4 ToUint32 32비트 부호 없는 정수
BigInt64Array
%BigInt64Array%
bigint64 8 ToBigInt64 64비트 2의 보수 부호 있는 정수
BigUint64Array
%BigUint64Array%
biguint64 8 ToBigUint64 64비트 부호 없는 정수
Float16Array
%Float16Array%
float16 2 16비트 IEEE 부동소수점
Float32Array
%Float32Array%
float32 4 32비트 IEEE 부동소수점
Float64Array
%Float64Array%
float64 8 64비트 IEEE 부동소수점

아래 정의들에서 TypedArray 에 대한 참조는 위 표에서 해당하는 적절한 생성자 이름으로 치환되어야 한다.

23.2.1 %TypedArray% 내재 객체

%TypedArray% 내재 객체는 다음과 같다:

  • 모든 TypedArray 생성자 객체가 상속하는 생성자 함수 객체이다.
  • 연관된 프로토타입 객체와 함께 모든 TypedArray 생성자와 그 인스턴스가 상속하는 공통 프로퍼티를 제공한다.
  • 전역 이름을 가지지 않으며 전역 객체의 프로퍼티로 나타나지 않는다.
  • 여러 TypedArray 생성자의 추상 상위(super) 클래스 역할을 한다.
  • 추상 클래스 생성자이므로 호출 시 오류를 던진다. TypedArray 생성자들은 이에 대한 super 호출을 수행하지 않는다.

23.2.1.1 %TypedArray% ( )

이 함수는 호출 시 다음 단계를 수행한다:

  1. TypeError 예외를 던진다.

이 함수의 "length" 프로퍼티 값은 +0𝔽 이다.

23.2.2 %TypedArray% 내재 객체의 프로퍼티

%TypedArray% 내재 객체는 다음을 가진다:

  • 값이 %Function.prototype%[[Prototype]] 내부 슬롯.
  • 값이 "TypedArray""name" 프로퍼티.
  • 다음 프로퍼티들:

23.2.2.1 %TypedArray%.from ( source [ , mapper [ , thisArg ] ] )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. Cthis 값으로 둔다.
  2. IsConstructor(C) 가 false 이면 TypeError 예외.
  3. mapperundefined 이면
    1. mapping = false.
  4. Else,
    1. IsCallable(mapper) 가 false 이면 TypeError 예외.
    2. mapping = true.
  5. usingIterator = ? GetMethod(source, %Symbol.iterator%).
  6. usingIteratorundefined 가 아니면
    1. values = ? IteratorToList(? GetIteratorFromMethod(source, usingIterator)).
    2. len = values 의 요소 개수.
    3. targetObj = ? TypedArrayCreateFromConstructor(C, « 𝔽(len) »).
    4. k = 0.
    5. k < len 동안 반복
      1. Pk = ! ToString(𝔽(k)).
      2. kValue = values 의 첫 번째 요소.
      3. values 의 첫 요소를 제거.
      4. mapping = true 이면
        1. mappedValue = ? Call(mapper, thisArg, « kValue, 𝔽(k) »).
      5. Else,
        1. mappedValue = kValue.
      6. Set(targetObj, Pk, mappedValue, true) 수행.
      7. k = k + 1.
    6. Assert: values 는 이제 빈 List.
    7. targetObj 반환.
  7. NOTE: source 는 이터러블이 아니므로 배열 유사 객체로 간주.
  8. arrayLike = ! ToObject(source).
  9. len = ? LengthOfArrayLike(arrayLike).
  10. targetObj = ? TypedArrayCreateFromConstructor(C, « 𝔽(len) »).
  11. k = 0.
  12. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ? Get(arrayLike, Pk).
    3. mapping = true 이면
      1. mappedValue = ? Call(mapper, thisArg, « kValue, 𝔽(k) »).
    4. Else,
      1. mappedValue = kValue.
    5. Set(targetObj, Pk, mappedValue, true) 수행.
    6. k = k + 1.
  13. targetObj 반환.

23.2.2.2 %TypedArray%.of ( ...items )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. len = items 의 요소 개수.
  2. C = this 값.
  3. IsConstructor(C) 가 false 이면 TypeError 예외.
  4. newObj = ? TypedArrayCreateFromConstructor(C, « 𝔽(len) »).
  5. k = 0.
  6. k < len 동안 반복
    1. kValue = items[k].
    2. Pk = ! ToString(𝔽(k)).
    3. Set(newObj, Pk, kValue, true) 수행.
    4. k = k + 1.
  7. newObj 반환.

23.2.2.3 %TypedArray%.prototype

%TypedArray%.prototype 의 초기 값은 %TypedArray% 프로토타입 객체이다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성을 가진다.

23.2.2.4 get %TypedArray% [ %Symbol.species% ]

%TypedArray%[%Symbol.species%] 는 set 접근자 함수가 undefined접근자 프로퍼티이다. get 접근자 함수는 호출 시 다음을 수행한다:

  1. this 값을 반환.

이 함수의 "name" 프로퍼티 값은 "get [Symbol.species]" 이다.

Note

%TypedArray.prototype% 메서드는 일반적으로 자신의 this 값의 생성자를 사용해 파생 객체를 생성한다. 하지만 서브클래스 생성자%Symbol.species% 프로퍼티 재정의를 통해 그 기본 동작을 바꿀 수 있다.

23.2.3 %TypedArray% 프로토타입 객체의 프로퍼티

%TypedArray% 프로토타입 객체는 다음과 같다:

  • 값이 %Object.prototype%[[Prototype]] 내부 슬롯을 가진다.
  • %TypedArray.prototype% 이다.
  • 일반 객체이다.
  • [[ViewedArrayBuffer]] 또는 TypedArray 인스턴스 전용의 다른 내부 슬롯을 가지지 않는다.

23.2.3.1 %TypedArray%.prototype.at ( index )

  1. Othis 값으로 둔다.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. relativeIndex = ? ToIntegerOrInfinity(index).
  5. relativeIndex ≥ 0 이면
    1. k = relativeIndex.
  6. Else,
    1. k = len + relativeIndex.
  7. k < 0 또는 klen 이면 undefined 반환.
  8. Get(O, ! ToString(𝔽(k))) 반환.

23.2.3.2 get %TypedArray%.prototype.buffer

%TypedArray%.prototype.buffer 는 set 접근자 함수가 undefined접근자 프로퍼티이다. 그 get 접근자 함수는 호출 시 다음을 수행한다:

  1. O = this 값.
  2. RequireInternalSlot(O, [[TypedArrayName]]) 수행.
  3. Assert: O[[ViewedArrayBuffer]] 내부 슬롯을 가진다.
  4. buffer = O.[[ViewedArrayBuffer]].
  5. buffer 반환.

23.2.3.3 get %TypedArray%.prototype.byteLength

%TypedArray%.prototype.byteLength 는 set 접근자 함수가 undefined접근자 프로퍼티이다. 그 get 접근자 함수는 다음을 수행한다:

  1. O = this 값.
  2. RequireInternalSlot(O, [[TypedArrayName]]) 수행.
  3. Assert: O[[ViewedArrayBuffer]] 내부 슬롯을 가진다.
  4. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
  5. size = TypedArrayByteLength(taRecord).
  6. 𝔽(size) 반환.

23.2.3.4 get %TypedArray%.prototype.byteOffset

%TypedArray%.prototype.byteOffset 는 set 접근자 함수가 undefined접근자 프로퍼티이다. 그 get 접근자 함수는 다음을 수행한다:

  1. O = this 값.
  2. RequireInternalSlot(O, [[TypedArrayName]]) 수행.
  3. Assert: O[[ViewedArrayBuffer]] 내부 슬롯을 가진다.
  4. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
  5. IsTypedArrayOutOfBounds(taRecord) 가 true 이면 +0𝔽 반환.
  6. offset = O.[[ByteOffset]].
  7. 𝔽(offset) 반환.

23.2.3.5 %TypedArray%.prototype.constructor

%TypedArray%.prototype.constructor 의 초기 값은 %TypedArray% 이다.

23.2.3.6 %TypedArray%.prototype.copyWithin ( target, start [ , end ] )

이 메서드의 인자 해석과 사용은 23.1.3.4에 정의된 Array.prototype.copyWithin 과 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. relativeTarget = ? ToIntegerOrInfinity(target).
  5. relativeTarget = -∞ 이면 targetIndex = 0.
  6. Else if relativeTarget < 0 이면 targetIndex = max(len + relativeTarget, 0).
  7. Else targetIndex = min(relativeTarget, len).
  8. relativeStart = ? ToIntegerOrInfinity(start).
  9. relativeStart = -∞ 이면 startIndex = 0.
  10. Else if relativeStart < 0 이면 startIndex = max(len + relativeStart, 0).
  11. Else startIndex = min(relativeStart, len).
  12. endundefined 이면 relativeEnd = len; else relativeEnd = ? ToIntegerOrInfinity(end).
  13. relativeEnd = -∞ 이면 endIndex = 0.
  14. Else if relativeEnd < 0 이면 endIndex = max(len + relativeEnd, 0).
  15. Else endIndex = min(relativeEnd, len).
  16. count = min(endIndex - startIndex, len - targetIndex).
  17. count > 0 이면
    1. NOTE: 복사는 소스 데이터의 비트 수준 인코딩이 유지되도록 수행되어야 한다.
    2. buffer = O.[[ViewedArrayBuffer]].
    3. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
    4. IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
    5. len = TypedArrayLength(taRecord).
    6. elementSize = TypedArrayElementSize(O).
    7. byteOffset = O.[[ByteOffset]].
    8. bufferByteLimit = (len × elementSize) + byteOffset.
    9. toByteIndex = (targetIndex × elementSize) + byteOffset.
    10. fromByteIndex = (startIndex × elementSize) + byteOffset.
    11. countBytes = count × elementSize.
    12. fromByteIndex < toByteIndex 그리고 toByteIndex < fromByteIndex + countBytes 이면
      1. direction = -1.
      2. fromByteIndex = fromByteIndex + countBytes - 1.
      3. toByteIndex = toByteIndex + countBytes - 1.
    13. Else,
      1. direction = 1.
    14. countBytes > 0 동안 반복
      1. fromByteIndex < bufferByteLimit 그리고 toByteIndex < bufferByteLimit 이면
        1. value = GetValueFromBuffer(buffer, fromByteIndex, uint8, true, unordered).
        2. SetValueInBuffer(buffer, toByteIndex, uint8, value, true, unordered) 수행.
        3. fromByteIndex = fromByteIndex + direction.
        4. toByteIndex = toByteIndex + direction.
        5. countBytes = countBytes - 1.
      2. Else
        1. countBytes = 0.
  18. O 반환.

23.2.3.7 %TypedArray%.prototype.entries ( )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. ValidateTypedArray(O, seq-cst) 수행.
  3. CreateArrayIterator(O, key+value) 반환.

23.2.3.8 %TypedArray%.prototype.every ( callback [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.6에 정의된 Array.prototype.every 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. IsCallable(callback) false 이면 TypeError 예외.
  5. k = 0.
  6. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ! Get(O, Pk).
    3. testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
    4. testResult = false 이면 false 반환.
    5. k = k + 1.
  7. true 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.9 %TypedArray%.prototype.fill ( value [ , start [ , end ] ] )

이 메서드의 인자 해석과 사용은 23.1.3.7에 정의된 Array.prototype.fill 과 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. O.[[ContentType]]bigint 이면 value = ? ToBigInt(value).
  5. 아니면 value = ? ToNumber(value).
  6. relativeStart = ? ToIntegerOrInfinity(start).
  7. relativeStart = -∞ 이면 startIndex = 0.
  8. Else if relativeStart < 0 이면 startIndex = max(len + relativeStart, 0).
  9. Else startIndex = min(relativeStart, len).
  10. endundefined 이면 relativeEnd = len; else relativeEnd = ? ToIntegerOrInfinity(end).
  11. relativeEnd = -∞ 이면 endIndex = 0.
  12. Else if relativeEnd < 0 이면 endIndex = max(len + relativeEnd, 0).
  13. Else endIndex = min(relativeEnd, len).
  14. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
  15. IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
  16. len = TypedArrayLength(taRecord).
  17. endIndex = min(endIndex, len).
  18. k = startIndex.
  19. k < endIndex 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. Set(O, Pk, value, true) 수행.
    3. k = k + 1.
  20. O 반환.

23.2.3.10 %TypedArray%.prototype.filter ( callback [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.8에 정의된 Array.prototype.filter 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. IsCallable(callback) false 이면 TypeError 예외.
  5. kept = 새 빈 List.
  6. captured = 0.
  7. k = 0.
  8. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ! Get(O, Pk).
    3. selected = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
    4. selected = true 이면
      1. keptkValue 추가.
      2. captured = captured + 1.
    5. k = k + 1.
  9. A = ? TypedArraySpeciesCreate(O, « 𝔽(captured) »).
  10. n = 0.
  11. kept 요소 e 에 대해
    1. Set(A, ! ToString(𝔽(n)), e, true) 수행.
    2. n = n + 1.
  12. A 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.11 %TypedArray%.prototype.find ( predicate [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.9에 정의된 Array.prototype.find 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg).
  5. findRec.[[Value]] 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.12 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.10에 정의된 Array.prototype.findIndex 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg).
  5. findRec.[[Index]] 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.13 %TypedArray%.prototype.findLast ( predicate [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.11에 정의된 Array.prototype.findLast 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg).
  5. findRec.[[Value]] 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.14 %TypedArray%.prototype.findLastIndex ( predicate [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.12에 정의된 Array.prototype.findLastIndex 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg).
  5. findRec.[[Index]] 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.15 %TypedArray%.prototype.forEach ( callback [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.15에 정의된 Array.prototype.forEach 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. IsCallable(callback) false 이면 TypeError 예외.
  5. k = 0.
  6. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ! Get(O, Pk).
    3. Call(callback, thisArg, « kValue, 𝔽(k), O ») 수행.
    4. k = k + 1.
  7. undefined 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.16 %TypedArray%.prototype.includes ( searchElement [ , fromIndex ] )

이 메서드의 인자 해석과 사용은 23.1.3.16에 정의된 Array.prototype.includes 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. len = 0 이면 false 반환.
  5. n = ? ToIntegerOrInfinity(fromIndex).
  6. Assert: fromIndexundefined 이면 n = 0.
  7. n = +∞ 이면 false 반환.
  8. Else if n = -∞ 이면 n = 0.
  9. n ≥ 0 이면
    1. k = n.
  10. Else
    1. k = len + n.
    2. k < 0 이면 k = 0.
  11. k < len 동안 반복
    1. elementK = ! Get(O, ! ToString(𝔽(k))).
    2. SameValueZero(searchElement, elementK) true 이면 true 반환.
    3. k = k + 1.
  12. false 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.17 %TypedArray%.prototype.indexOf ( searchElement [ , fromIndex ] )

이 메서드의 인자 해석과 사용은 23.1.3.17에 정의된 Array.prototype.indexOf 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. len = 0 이면 -1𝔽 반환.
  5. n = ? ToIntegerOrInfinity(fromIndex).
  6. Assert: fromIndex undefinedn = 0.
  7. n = +∞ 이면 -1𝔽 반환.
  8. Else if n = -∞ 이면 n = 0.
  9. n ≥ 0 이면
    1. k = n.
  10. Else
    1. k = len + n.
    2. k < 0 이면 k = 0.
  11. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ! HasProperty(O, Pk).
    3. kPresent = true 이면
      1. elementK = ! Get(O, Pk).
      2. IsStrictlyEqual(searchElement, elementK) true 이면 𝔽(k) 반환.
    4. k = k + 1.
  12. -1𝔽 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.18 %TypedArray%.prototype.join ( separator )

이 메서드의 인자 해석과 사용은 23.1.3.18에 정의된 Array.prototype.join 과 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. separatorundefined 이면 sep = ",".
  5. Else sep = ? ToString(separator).
  6. R = 빈 String.
  7. k = 0.
  8. k < len 동안 반복
    1. k > 0 이면 R = R + sep.
    2. element = ! Get(O, ! ToString(𝔽(k))).
    3. elementundefined 이면
      1. S = ! ToString(element).
      2. R = R + S.
    4. k = k + 1.
  9. R 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.19 %TypedArray%.prototype.keys ( )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. ValidateTypedArray(O, seq-cst) 수행.
  3. CreateArrayIterator(O, key) 반환.

23.2.3.20 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )

이 메서드의 인자 해석과 사용은 23.1.3.20에 정의된 Array.prototype.lastIndexOf 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. len = 0 이면 -1𝔽 반환.
  5. fromIndex 존재하면 n = ? ToIntegerOrInfinity(fromIndex); else n = len - 1.
  6. n = -∞ 이면 -1𝔽 반환.
  7. n ≥ 0 이면
    1. k = min(n, len - 1).
  8. Else
    1. k = len + n.
  9. k ≥ 0 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kPresent = ! HasProperty(O, Pk).
    3. kPresent = true 이면
      1. elementK = ! Get(O, Pk).
      2. IsStrictlyEqual(searchElement, elementK) true 이면 𝔽(k) 반환.
    4. k = k - 1.
  10. -1𝔽 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.21 get %TypedArray%.prototype.length

%TypedArray%.prototype.length 는 set 접근자 함수가 undefined접근자 프로퍼티이다. 그 get 접근자 함수는 다음을 수행한다:

  1. O = this 값.
  2. RequireInternalSlot(O, [[TypedArrayName]]) 수행.
  3. Assert: O[[ViewedArrayBuffer]], [[ArrayLength]] 내부 슬롯을 가진다.
  4. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
  5. IsTypedArrayOutOfBounds(taRecord) true 이면 +0𝔽 반환.
  6. length = TypedArrayLength(taRecord).
  7. 𝔽(length) 반환.

이 함수는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.22 %TypedArray%.prototype.map ( callback [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.21에 정의된 Array.prototype.map 과 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. IsCallable(callback) false 이면 TypeError 예외.
  5. A = ? TypedArraySpeciesCreate(O, « 𝔽(len) »).
  6. k = 0.
  7. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ! Get(O, Pk).
    3. mappedValue = ? Call(callback, thisArg, « kValue, 𝔽(k), O »).
    4. Set(A, Pk, mappedValue, true) 수행.
    5. k = k + 1.
  8. A 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.23 %TypedArray%.prototype.reduce ( callback [ , initialValue ] )

이 메서드의 인자 해석과 사용은 23.1.3.24에 정의된 Array.prototype.reduce 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. IsCallable(callback) false 이면 TypeError 예외.
  5. len = 0 이고 initialValue 미존재이면 TypeError 예외.
  6. k = 0.
  7. accumulator = undefined.
  8. initialValue 존재하면
    1. accumulator = initialValue.
  9. Else
    1. Pk = ! ToString(𝔽(k)).
    2. accumulator = ! Get(O, Pk).
    3. k = k + 1.
  10. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ! Get(O, Pk).
    3. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »).
    4. k = k + 1.
  11. accumulator 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.24 %TypedArray%.prototype.reduceRight ( callback [ , initialValue ] )

이 메서드의 인자 해석과 사용은 23.1.3.25에 정의된 Array.prototype.reduceRight 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. IsCallable(callback) false 이면 TypeError 예외.
  5. len = 0 이고 initialValue 미존재이면 TypeError 예외.
  6. k = len - 1.
  7. accumulator = undefined.
  8. initialValue 존재하면
    1. accumulator = initialValue.
  9. Else
    1. Pk = ! ToString(𝔽(k)).
    2. accumulator = ! Get(O, Pk).
    3. k = k - 1.
  10. k ≥ 0 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ! Get(O, Pk).
    3. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »).
    4. k = k - 1.
  11. accumulator 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.25 %TypedArray%.prototype.reverse ( )

이 메서드의 인자 해석과 사용은 23.1.3.26에 정의된 Array.prototype.reverse 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. middle = floor(len / 2).
  5. lower = 0.
  6. lowermiddle 동안
    1. upper = len - lower - 1.
    2. upperP = ! ToString(𝔽(upper)).
    3. lowerP = ! ToString(𝔽(lower)).
    4. lowerValue = ! Get(O, lowerP).
    5. upperValue = ! Get(O, upperP).
    6. Set(O, lowerP, upperValue, true).
    7. Set(O, upperP, lowerValue, true).
    8. lower = lower + 1.
  7. O 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.26 %TypedArray%.prototype.set ( source [ , offset ] )

이 메서드는 source 로부터 값을 읽어 이 TypedArray 에 여러 값을 설정한다. 구체적 동작은 source 타입에 따라 다르다. 선택적 offset 값은 이 TypedArray 내에서 값이 기록될 첫 요소 인덱스를 나타내며 생략되면 0 으로 간주된다.

호출 시 다음 단계를 수행한다:

  1. target = this 값.
  2. RequireInternalSlot(target, [[TypedArrayName]]) 수행.
  3. Assert: target[[ViewedArrayBuffer]] 내부 슬롯을 가진다.
  4. targetOffset = ? ToIntegerOrInfinity(offset).
  5. targetOffset < 0 이면 RangeError 예외.
  6. source[[TypedArrayName]] 내부 슬롯을 가진 Object 이면
    1. SetTypedArrayFromTypedArray(target, targetOffset, source) 수행.
  7. Else
    1. SetTypedArrayFromArrayLike(target, targetOffset, source) 수행.
  8. undefined 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.26.1 SetTypedArrayFromArrayLike ( target, targetOffset, source )

The abstract operation SetTypedArrayFromArrayLike takes arguments target (a TypedArray), targetOffset (a non-negative integer or +∞), and source (an ECMAScript language value, but not a TypedArray) and returns unused 또는 throw completion. targetOffset 인덱스부터 시작하여 source 로부터 읽은 여러 값을 target 에 설정한다. It performs the following steps when called:

  1. targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, seq-cst).
  2. IsTypedArrayOutOfBounds(targetRecord) true 이면 TypeError 예외.
  3. targetLength = TypedArrayLength(targetRecord).
  4. src = ? ToObject(source).
  5. srcLength = ? LengthOfArrayLike(src).
  6. targetOffset = +∞ 이면 RangeError 예외.
  7. srcLength + targetOffset > targetLength 이면 RangeError 예외.
  8. k = 0.
  9. k < srcLength 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. value = ? Get(src, Pk).
    3. targetIndex = 𝔽(targetOffset + k).
    4. TypedArraySetElement(target, targetIndex, value) 수행.
    5. k = k + 1.
  10. unused 반환.

23.2.3.26.2 SetTypedArrayFromTypedArray ( target, targetOffset, source )

The abstract operation SetTypedArrayFromTypedArray takes arguments target (a TypedArray), targetOffset (a non-negative integer or +∞), and source (a TypedArray) and returns unused 또는 throw completion. targetOffset 인덱스부터 시작하여 source 로부터 읽은 여러 값을 target 에 설정한다. It performs the following steps when called:

  1. targetBuffer = target.[[ViewedArrayBuffer]].
  2. targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, seq-cst).
  3. IsTypedArrayOutOfBounds(targetRecord) true 이면 TypeError 예외.
  4. targetLength = TypedArrayLength(targetRecord).
  5. srcBuffer = source.[[ViewedArrayBuffer]].
  6. srcRecord = MakeTypedArrayWithBufferWitnessRecord(source, seq-cst).
  7. IsTypedArrayOutOfBounds(srcRecord) true 이면 TypeError 예외.
  8. srcLength = TypedArrayLength(srcRecord).
  9. targetType = TypedArrayElementType(target).
  10. targetElementSize = TypedArrayElementSize(target).
  11. targetByteOffset = target.[[ByteOffset]].
  12. srcType = TypedArrayElementType(source).
  13. srcElementSize = TypedArrayElementSize(source).
  14. srcByteOffset = source.[[ByteOffset]].
  15. targetOffset = +∞ 이면 RangeError 예외.
  16. srcLength + targetOffset > targetLength 이면 RangeError 예외.
  17. target.[[ContentType]]source.[[ContentType]] 이면 TypeError 예외.
  18. IsSharedArrayBuffer(srcBuffer) = true, IsSharedArrayBuffer(targetBuffer) = true, 그리고 srcBuffer.[[ArrayBufferData]]targetBuffer.[[ArrayBufferData]] 와 동일하면 sameSharedArrayBuffer = true; 아니면 false.
  19. SameValue(srcBuffer, targetBuffer) = true 또는 sameSharedArrayBuffer = true 이면
    1. srcByteLength = TypedArrayByteLength(srcRecord).
    2. srcBuffer = ? CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength).
    3. srcByteIndex = 0.
  20. Else
    1. srcByteIndex = srcByteOffset.
  21. targetByteIndex = (targetOffset × targetElementSize) + targetByteOffset.
  22. limit = targetByteIndex + (targetElementSize × srcLength).
  23. srcType = targetType 이면
    1. NOTE: 전송은 소스 데이터의 비트 수준 인코딩을 보존해야 한다.
    2. targetByteIndex < limit 동안 반복
      1. value = GetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered).
      2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) 수행.
      3. srcByteIndex = srcByteIndex + 1.
      4. targetByteIndex = targetByteIndex + 1.
  24. Else
    1. targetByteIndex < limit 동안 반복
      1. value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, unordered).
      2. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, unordered) 수행.
      3. srcByteIndex = srcByteIndex + srcElementSize.
      4. targetByteIndex = targetByteIndex + targetElementSize.
  25. unused 반환.

23.2.3.27 %TypedArray%.prototype.slice ( start, end )

이 메서드의 인자 해석과 사용은 23.1.3.28에 정의된 Array.prototype.slice 와 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. srcArrayLength = TypedArrayLength(taRecord).
  4. relativeStart = ? ToIntegerOrInfinity(start).
  5. relativeStart = -∞ 이면 startIndex = 0.
  6. Else if relativeStart < 0 이면 startIndex = max(srcArrayLength + relativeStart, 0).
  7. Else startIndex = min(relativeStart, srcArrayLength).
  8. end undefined 이면 relativeEnd = srcArrayLength; else relativeEnd = ? ToIntegerOrInfinity(end).
  9. relativeEnd = -∞ 이면 endIndex = 0.
  10. Else if relativeEnd < 0 이면 endIndex = max(srcArrayLength + relativeEnd, 0).
  11. Else endIndex = min(relativeEnd, srcArrayLength).
  12. countBytes = max(endIndex - startIndex, 0).
  13. A = ? TypedArraySpeciesCreate(O, « 𝔽(countBytes) »).
  14. countBytes > 0 이면
    1. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
    2. IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
    3. endIndex = min(endIndex, TypedArrayLength(taRecord)).
    4. countBytes = max(endIndex - startIndex, 0).
    5. srcType = TypedArrayElementType(O).
    6. targetType = TypedArrayElementType(A).
    7. srcType = targetType 이면
      1. NOTE: 전송은 소스 데이터의 비트 수준 인코딩을 보존해야 한다.
      2. srcBuffer = O.[[ViewedArrayBuffer]].
      3. targetBuffer = A.[[ViewedArrayBuffer]].
      4. elementSize = TypedArrayElementSize(O).
      5. srcByteOffset = O.[[ByteOffset]].
      6. srcByteIndex = (startIndex × elementSize) + srcByteOffset.
      7. targetByteIndex = A.[[ByteOffset]].
      8. endByteIndex = targetByteIndex + (countBytes × elementSize).
      9. targetByteIndex < endByteIndex 동안 반복
        1. value = GetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered).
        2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) 수행.
        3. srcByteIndex = srcByteIndex + 1.
        4. targetByteIndex = targetByteIndex + 1.
    8. Else
      1. n = 0.
      2. k = startIndex.
      3. k < endIndex 동안 반복
        1. Pk = ! ToString(𝔽(k)).
        2. kValue = ! Get(O, Pk).
        3. Set(A, ! ToString(𝔽(n)), kValue, true) 수행.
        4. k = k + 1.
        5. n = n + 1.
  15. A 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.28 %TypedArray%.prototype.some ( callback [ , thisArg ] )

이 메서드의 인자 해석과 사용은 23.1.3.29에 정의된 Array.prototype.some 과 동일하다.

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. IsCallable(callback) false 이면 TypeError 예외.
  5. k = 0.
  6. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ! Get(O, Pk).
    3. testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
    4. testResult = true 이면 true 반환.
    5. k = k + 1.
  7. false 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.29 %TypedArray%.prototype.sort ( comparator )

이는 별도의 메서드로서 아래 설명된 부분을 제외하면 23.1.3.30에 정의된 Array.prototype.sort 와 동일한 요구사항을 구현한다. 이 메서드 구현은 this 값이 길이가 고정된 객체이며 정수 인덱스 프로퍼티가 희소하지 않다는 사실을 활용해 최적화될 수 있다.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

호출 시 다음 단계를 수행한다:

  1. comparatorundefined 이고 IsCallable(comparator) = false 이면 TypeError 예외.
  2. obj = this 값.
  3. taRecord = ? ValidateTypedArray(obj, seq-cst).
  4. len = TypedArrayLength(taRecord).
  5. NOTE: 다음 클로저는 23.1.3.30에서 수행되는 문자열 비교 대신 수치 비교를 수행한다.
  6. SortCompare 를 (x, y) 매개변수로 하고 comparator 를 캡처하여 호출 시 ? CompareTypedArrayElements(x, y, comparator) 를 반환하는 새 추상 클로저로 둔다.
  7. sortedList = ? SortIndexedProperties(obj, len, SortCompare, read-through-holes).
  8. j = 0.
  9. j < len 동안 반복
    1. Set(obj, ! ToString(𝔽(j)), sortedList[j], true) 수행.
    2. j = j + 1.
  10. obj 반환.
Note

NaN 은 (CompareTypedArrayElements 참조) 다른 어떤 값보다 항상 크게 비교되므로 comparator 가 제공되지 않을 때 NaN 값은 결과 끝에 정렬된다.

23.2.3.30 %TypedArray%.prototype.subarray ( start, end )

이 메서드는 새로운 TypedArray 를 반환하며 그 요소 타입은 이 TypedArray 의 요소 타입과 같고, ArrayBuffer 는 동일한 ArrayBuffer 를 사용하며 start (포함) 부터 end (배타) 전까지의 요소를 참조한다. start 또는 end 가 음수이면 배열의 끝을 기준으로 하는 인덱스를 의미한다.

호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. RequireInternalSlot(O, [[TypedArrayName]]) 수행.
  3. Assert: O[[ViewedArrayBuffer]] 내부 슬롯을 가진다.
  4. buffer = O.[[ViewedArrayBuffer]].
  5. srcRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
  6. IsTypedArrayOutOfBounds(srcRecord) true 이면
    1. srcLength = 0.
  7. Else
    1. srcLength = TypedArrayLength(srcRecord).
  8. relativeStart = ? ToIntegerOrInfinity(start).
  9. relativeStart = -∞ 이면 startIndex = 0.
  10. Else if relativeStart < 0 이면 startIndex = max(srcLength + relativeStart, 0).
  11. Else startIndex = min(relativeStart, srcLength).
  12. elementSize = TypedArrayElementSize(O).
  13. srcByteOffset = O.[[ByteOffset]].
  14. beginByteOffset = srcByteOffset + (startIndex × elementSize).
  15. O.[[ArrayLength]]auto 이고 endundefined 이면
    1. argumentsList = « buffer, 𝔽(beginByteOffset) ».
  16. Else
    1. end undefined 이면 relativeEnd = srcLength; else relativeEnd = ? ToIntegerOrInfinity(end).
    2. relativeEnd = -∞ 이면 endIndex = 0.
    3. Else if relativeEnd < 0 이면 endIndex = max(srcLength + relativeEnd, 0).
    4. Else endIndex = min(relativeEnd, srcLength).
    5. newLength = max(endIndex - startIndex, 0).
    6. argumentsList = « buffer, 𝔽(beginByteOffset), 𝔽(newLength) ».
  17. TypedArraySpeciesCreate(O, argumentsList) 반환.

이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.

23.2.3.31 %TypedArray%.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

이 별도 메서드는 23.1.3.32에 정의된 Array.prototype.toLocaleString 과 동일한 알고리즘을 구현하되 "length" 에 대한 [[Get]] 대신 TypedArrayLength 를 호출한다. 기본 버퍼가 리사이즈 가능하지 않고 정수 인덱스 프로퍼티가 희소하지 않음을 이용해 최적화할 수 있으나, 그러한 최적화는 알고리즘의 지정된 동작에 관측 가능한 변화를 초래해서는 안 된다.

이 메서드는 제네릭이 아니다. 알고리즘 평가 전에 this 값과 seq-cst 를 인자로 ValidateTypedArray 가 호출된다. 그 결과가 abrupt completion 이면 해당 예외가 알고리즘 대신 던져진다.

Note

ECMAScript 구현이 ECMA-402 국제화 API 를 포함한다면 이 메서드는 ECMA-402 명세에 있는 Array.prototype.toLocaleString 알고리즘을 기반으로 한다.

23.2.3.32 %TypedArray%.prototype.toReversed ( )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. A = ? TypedArrayCreateSameType(O, len).
  5. k = 0.
  6. k < len 동안 반복
    1. from = ! ToString(𝔽(len - k - 1)).
    2. Pk = ! ToString(𝔽(k)).
    3. fromValue = ! Get(O, from).
    4. Set(A, Pk, fromValue, true) 수행.
    5. k = k + 1.
  7. A 반환.

23.2.3.33 %TypedArray%.prototype.toSorted ( comparator )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. comparatorundefined 그리고 IsCallable(comparator) = false 이면 TypeError 예외.
  2. O = this 값.
  3. taRecord = ? ValidateTypedArray(O, seq-cst).
  4. len = TypedArrayLength(taRecord).
  5. A = ? TypedArrayCreateSameType(O, len).
  6. NOTE: 다음 클로저는 23.1.3.34 에서의 문자열 비교 대신 수치 비교를 수행한다.
  7. SortCompare 를 (x, y) → ? CompareTypedArrayElements(x, y, comparator) 클로저로 둔다.
  8. sortedList = ? SortIndexedProperties(O, len, SortCompare, read-through-holes).
  9. j = 0.
  10. j < len 동안 반복
    1. Set(A, ! ToString(𝔽(j)), sortedList[j], true) 수행.
    2. j = j + 1.
  11. A 반환.

23.2.3.34 %TypedArray%.prototype.toString ( )

"toString" 프로퍼티의 초기 값은 23.1.3.36에 정의된 %Array.prototype.toString% 이다.

23.2.3.35 %TypedArray%.prototype.values ( )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. ValidateTypedArray(O, seq-cst) 수행.
  3. CreateArrayIterator(O, value) 반환.

23.2.3.36 %TypedArray%.prototype.with ( index, value )

이 메서드는 호출 시 다음 단계를 수행한다:

  1. O = this 값.
  2. taRecord = ? ValidateTypedArray(O, seq-cst).
  3. len = TypedArrayLength(taRecord).
  4. relativeIndex = ? ToIntegerOrInfinity(index).
  5. relativeIndex ≥ 0 이면 actualIndex = relativeIndex; Else actualIndex = len + relativeIndex.
  6. O.[[ContentType]] = bigint 이면 numericValue = ? ToBigInt(value).
  7. Else numericValue = ? ToNumber(value).
  8. IsValidIntegerIndex(O, 𝔽(actualIndex)) false 이면 RangeError 예외.
  9. A = ? TypedArrayCreateSameType(O, len).
  10. k = 0.
  11. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. k = actualIndex 이면 fromValue = numericValue; Else fromValue = ! Get(O, Pk).
    3. Set(A, Pk, fromValue, true) 수행.
    4. k = k + 1.
  12. A 반환.

23.2.3.37 %TypedArray%.prototype [ %Symbol.iterator% ] ( )

%Symbol.iterator% 프로퍼티의 초기 값은 23.2.3.35에 정의된 %TypedArray.prototype.values% 이다.

23.2.3.38 get %TypedArray%.prototype [ %Symbol.toStringTag% ]

%TypedArray%.prototype[%Symbol.toStringTag%] 는 set 접근자 함수가 undefined접근자 프로퍼티이다. 그 get 접근자 함수는 호출 시 다음을 수행한다:

  1. O = this 값.
  2. O 가 Object 가 아니면 undefined 반환.
  3. O[[TypedArrayName]] 내부 슬롯을 가지지 않으면 undefined 반환.
  4. name = O.[[TypedArrayName]].
  5. Assert: name 은 String.
  6. name 반환.

이 프로퍼티는 { [[Enumerable]]: false, [[Configurable]]: true } 특성을 가진다.

이 함수의 "name" 프로퍼티 초기 값은 "get [Symbol.toStringTag]" 이다.

23.2.4 TypedArray 객체를 위한 추상 연산

23.2.4.1 TypedArrayCreateFromConstructor ( constructor, argumentList )

The abstract operation TypedArrayCreateFromConstructor takes arguments constructor (a constructor) and argumentList (a List of ECMAScript language values) and returns TypedArray 또는 throw completion. 생성자 함수를 사용하여 새로운 TypedArray 를 생성하는 과정을 지정한다. It performs the following steps when called:

  1. newTypedArray = ? Construct(constructor, argumentList).
  2. taRecord = ? ValidateTypedArray(newTypedArray, seq-cst).
  3. Assert: newTypedArrayTypedArray 인스턴스의 프로퍼티에 언급된 모든 내부 슬롯을 가진다.
  4. argumentList 요소 수가 1 이고 argumentList[0] 이 Number 이면
    1. IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
    2. length = TypedArrayLength(taRecord).
    3. length < (argumentList[0]) 이면 TypeError 예외.
  5. newTypedArray 반환.

23.2.4.2 TypedArrayCreateSameType ( exemplar, length )

The abstract operation TypedArrayCreateSameType takes arguments exemplar (a TypedArray) and length (a non-negative integer) and returns TypedArray 또는 throw completion. exemplar 에서 파생된 생성자length 를 사용해 새로운 TypedArray 를 생성한다. %Symbol.species% 를 사용하는 커스텀 서브클래스를 만들 수 있는 TypedArraySpeciesCreate 와 달리, 이 연산은 항상 내장 TypedArray 생성자 중 하나를 사용한다. It performs the following steps when called:

  1. constructor = Table 73 에서 exemplar.[[TypedArrayName]] 생성자 이름에 연관된 내재 객체.
  2. result = ? TypedArrayCreateFromConstructor(constructor, « 𝔽(length) »).
  3. Assert: result[[TypedArrayName]], [[ContentType]] 내부 슬롯을 가진다.
  4. Assert: result.[[ContentType]] = exemplar.[[ContentType]].
  5. result 반환.

23.2.4.3 TypedArraySpeciesCreate ( exemplar, argumentList )

The abstract operation TypedArraySpeciesCreate takes arguments exemplar (a TypedArray) and argumentList (a List of ECMAScript language values) and returns TypedArray 또는 throw completion. exemplar 에서 파생된 생성자 함수를 사용하여 새로운 TypedArray 를 생성한다. ArraySpeciesCreate%Symbol.species% 를 통해 비-Array 객체를 만들 수 있는 것과 달리 이 연산은 실제 TypedArray 생성자임을 강제한다. It performs the following steps when called:

  1. defaultConstructor = Table 73 에서 exemplar.[[TypedArrayName]] 생성자 이름에 연관된 내재 객체.
  2. constructor = ? SpeciesConstructor(exemplar, defaultConstructor).
  3. result = ? TypedArrayCreateFromConstructor(constructor, argumentList).
  4. result.[[ContentType]]exemplar.[[ContentType]] 이면 TypeError 예외.
  5. result 반환.

23.2.4.4 ValidateTypedArray ( O, order )

The abstract operation ValidateTypedArray takes arguments O (an ECMAScript language value) and order (seq-cst or unordered) and returns TypedArray With Buffer Witness Record 또는 throw completion. It performs the following steps when called:

  1. RequireInternalSlot(O, [[TypedArrayName]]) 수행.
  2. Assert: O[[ViewedArrayBuffer]] 내부 슬롯을 가진다.
  3. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, order).
  4. IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
  5. taRecord 반환.

23.2.4.5 TypedArrayElementSize ( O )

The abstract operation TypedArrayElementSize takes argument O (a TypedArray) and returns 음이 아닌 정수. It performs the following steps when called:

  1. Table 73 에서 O.[[TypedArrayName]] 에 대해 지정된 요소 크기(Element Size) 값을 반환.

23.2.4.6 TypedArrayElementType ( O )

The abstract operation TypedArrayElementType takes argument O (a TypedArray) and returns TypedArray element type. It performs the following steps when called:

  1. Table 73 에서 O.[[TypedArrayName]] 에 대해 지정된 요소 타입(Element Type) 값을 반환.

23.2.4.7 CompareTypedArrayElements ( x, y, comparator )

The abstract operation CompareTypedArrayElements takes arguments x (a Number or a BigInt), y (a Number or a BigInt), and comparator (a function object or undefined) and returns Number 또는 abrupt completion. It performs the following steps when called:

  1. Assert: x, y 둘 다 Number 이거나 둘 다 BigInt.
  2. comparatorundefined 이면
    1. v = ? ToNumber(? Call(comparator, undefined, « x, y »)).
    2. vNaN 이면 +0𝔽 반환.
    3. v 반환.
  3. xy 모두 NaN 이면 +0𝔽 반환.
  4. xNaN 이면 1𝔽 반환.
  5. yNaN 이면 -1𝔽 반환.
  6. x < y 이면 -1𝔽 반환.
  7. x > y 이면 1𝔽 반환.
  8. x-0𝔽 이고 y+0𝔽 이면 -1𝔽 반환.
  9. x+0𝔽 이고 y-0𝔽 이면 1𝔽 반환.
  10. +0𝔽 반환.
Note
이는 23.1.3.30.2에서의 문자열 비교 대신 수치 비교를 수행한다.

23.2.5 TypedArray 생성자

TypedArray 생성자는 다음을 만족한다:

  • Table 73에서 TypedArray 대신 생성자 이름만 다른, 아래에서 설명된 구조를 갖는 내재 객체이다.
  • 인자의 개수와 타입에 따라 동작이 달라지는 함수이다. TypedArray 호출의 실제 동작은 전달된 인자의 개수와 종류에 의존한다.
  • 함수로 호출하도록 의도되지 않았으며 그러한 방식으로 호출되면 예외를 던진다.
  • 클래스 정의의 extends 절 값으로 사용될 수 있다. 지정된 TypedArray 동작을 상속하려는 서브클래스 생성자%TypedArray%.prototype 내장 메서드를 지원하는 데 필요한 내부 상태로 서브클래스 인스턴스를 생성·초기화하기 위해 TypedArray 생성자에 대한 super 호출을 포함해야 한다.

23.2.5.1 TypedArray ( ...args )

TypedArray 생성자는 호출 시 다음 단계를 수행한다:

  1. NewTarget 이 undefined 이면 TypeError 예외.
  2. constructorName = 이 TypedArray 생성자에 대해 Table 73에 지정된 Constructor Name 값의 String.
  3. proto = "%TypedArray.prototype%".
  4. numberOfArgs = args 의 요소 개수.
  5. numberOfArgs = 0 이면
    1. AllocateTypedArray(constructorName, NewTarget, proto, 0) 반환.
  6. Else
    1. firstArgument = args[0].
    2. firstArgument 가 Object 이면
      1. O = ? AllocateTypedArray(constructorName, NewTarget, proto).
      2. firstArgument[[TypedArrayName]] 내부 슬롯을 가지면
        1. InitializeTypedArrayFromTypedArray(O, firstArgument) 수행.
      3. Else if firstArgument[[ArrayBufferData]] 내부 슬롯을 가지면
        1. numberOfArgs > 1 이면 byteOffset = args[1]; else byteOffset = undefined.
        2. numberOfArgs > 2 이면 length = args[2]; else length = undefined.
        3. InitializeTypedArrayFromArrayBuffer(O, firstArgument, byteOffset, length) 수행.
      4. Else
        1. Assert: firstArgument[[TypedArrayName]][[ArrayBufferData]] 도 없는 Object.
        2. usingIterator = ? GetMethod(firstArgument, %Symbol.iterator%).
        3. usingIteratorundefined 이면
          1. values = ? IteratorToList(? GetIteratorFromMethod(firstArgument, usingIterator)).
          2. InitializeTypedArrayFromList(O, values) 수행.
        4. Else
          1. NOTE: firstArgument 는 이터러블이 아니므로 배열 유사 객체로 간주.
          2. InitializeTypedArrayFromArrayLike(O, firstArgument) 수행.
      5. O 반환.
    3. Else
      1. Assert: firstArgument 는 Object 가 아님.
      2. elementLength = ? ToIndex(firstArgument).
      3. AllocateTypedArray(constructorName, NewTarget, proto, elementLength) 반환.

23.2.5.1.1 AllocateTypedArray ( constructorName, newTarget, defaultProto [ , length ] )

The abstract operation AllocateTypedArray takes arguments constructorName (Table 73에 있는 TypedArray 생성자 이름인 String), newTarget (a constructor), and defaultProto (a String) and optional argument length (a non-negative integer) and returns TypedArray 또는 throw completion. TypedArray 생성자의 인스턴스를 검증하고 생성하는 데 사용된다. length 인자가 전달되면 해당 길이의 ArrayBuffer 를 할당해 새 TypedArray 인스턴스와 연관시킨다. AllocateTypedArray 는 TypedArray 가 사용하는 공통 의미를 제공한다. It performs the following steps when called:

  1. proto = ? GetPrototypeFromConstructor(newTarget, defaultProto).
  2. obj = TypedArrayCreate(proto).
  3. Assert: obj.[[ViewedArrayBuffer]]undefined.
  4. obj.[[TypedArrayName]] = constructorName.
  5. constructorName"BigInt64Array" 또는 "BigUint64Array" 이면 obj.[[ContentType]] = bigint.
  6. 아니면 obj.[[ContentType]] = number.
  7. length 미존재이면
    1. obj.[[ByteLength]] = 0.
    2. obj.[[ByteOffset]] = 0.
    3. obj.[[ArrayLength]] = 0.
  8. Else
    1. AllocateTypedArrayBuffer(obj, length) 수행.
  9. obj 반환.

23.2.5.1.2 InitializeTypedArrayFromTypedArray ( O, srcArray )

The abstract operation InitializeTypedArrayFromTypedArray takes arguments O (a TypedArray) and srcArray (a TypedArray) and returns unused 또는 throw completion. It performs the following steps when called:

  1. srcData = srcArray.[[ViewedArrayBuffer]].
  2. elementType = TypedArrayElementType(O).
  3. elementSize = TypedArrayElementSize(O).
  4. srcType = TypedArrayElementType(srcArray).
  5. srcElementSize = TypedArrayElementSize(srcArray).
  6. srcByteOffset = srcArray.[[ByteOffset]].
  7. srcRecord = MakeTypedArrayWithBufferWitnessRecord(srcArray, seq-cst).
  8. IsTypedArrayOutOfBounds(srcRecord) true 이면 TypeError 예외.
  9. elementLength = TypedArrayLength(srcRecord).
  10. byteLength = elementSize × elementLength.
  11. elementType = srcType 이면
    1. data = ? CloneArrayBuffer(srcData, srcByteOffset, byteLength).
  12. Else
    1. data = ? AllocateArrayBuffer(%ArrayBuffer%, byteLength).
    2. srcArray.[[ContentType]]O.[[ContentType]] 이면 TypeError 예외.
    3. srcByteIndex = srcByteOffset.
    4. targetByteIndex = 0.
    5. count = elementLength.
    6. count > 0 동안 반복
      1. value = GetValueFromBuffer(srcData, srcByteIndex, srcType, true, unordered).
      2. SetValueInBuffer(data, targetByteIndex, elementType, value, true, unordered) 수행.
      3. srcByteIndex = srcByteIndex + srcElementSize.
      4. targetByteIndex = targetByteIndex + elementSize.
      5. count = count - 1.
  13. O.[[ViewedArrayBuffer]] = data.
  14. O.[[ByteLength]] = byteLength.
  15. O.[[ByteOffset]] = 0.
  16. O.[[ArrayLength]] = elementLength.
  17. unused 반환.

23.2.5.1.3 InitializeTypedArrayFromArrayBuffer ( O, buffer, byteOffset, length )

The abstract operation InitializeTypedArrayFromArrayBuffer takes arguments O (a TypedArray), buffer (an ArrayBuffer or a SharedArrayBuffer), byteOffset (an ECMAScript language value), and length (an ECMAScript language value) and returns unused 또는 throw completion. It performs the following steps when called:

  1. elementSize = TypedArrayElementSize(O).
  2. offset = ? ToIndex(byteOffset).
  3. offset modulo elementSize ≠ 0 이면 RangeError 예외.
  4. bufferIsFixedLength = IsFixedLengthArrayBuffer(buffer).
  5. lengthundefined 이면
    1. newLength = ? ToIndex(length).
  6. IsDetachedBuffer(buffer) true 이면 TypeError 예외.
  7. bufferByteLength = ArrayBufferByteLength(buffer, seq-cst).
  8. length = undefined 이고 bufferIsFixedLength = false 이면
    1. offset > bufferByteLength 이면 RangeError 예외.
    2. O.[[ByteLength]] = auto.
    3. O.[[ArrayLength]] = auto.
  9. Else
    1. length = undefined 이면
      1. bufferByteLength modulo elementSize ≠ 0 이면 RangeError 예외.
      2. newByteLength = bufferByteLength - offset.
      3. newByteLength < 0 이면 RangeError 예외.
    2. Else
      1. newByteLength = newLength × elementSize.
      2. offset + newByteLength > bufferByteLength 이면 RangeError 예외.
    3. O.[[ByteLength]] = newByteLength.
    4. O.[[ArrayLength]] = newByteLength / elementSize.
  10. O.[[ViewedArrayBuffer]] = buffer.
  11. O.[[ByteOffset]] = offset.
  12. unused 반환.

23.2.5.1.4 InitializeTypedArrayFromList ( O, values )

The abstract operation InitializeTypedArrayFromList takes arguments O (a TypedArray) and values (a List of ECMAScript language values) and returns unused 또는 throw completion. It performs the following steps when called:

  1. len = values 요소 개수.
  2. AllocateTypedArrayBuffer(O, len) 수행.
  3. k = 0.
  4. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = values 의 첫 요소.
    3. values 의 첫 요소 제거.
    4. Set(O, Pk, kValue, true) 수행.
    5. k = k + 1.
  5. Assert: values 는 이제 빈 List.
  6. unused 반환.

23.2.5.1.5 InitializeTypedArrayFromArrayLike ( O, arrayLike )

The abstract operation InitializeTypedArrayFromArrayLike takes arguments O (a TypedArray) and arrayLike (an Object, but not a TypedArray or an ArrayBuffer) and returns unused 또는 throw completion. It performs the following steps when called:

  1. len = ? LengthOfArrayLike(arrayLike).
  2. AllocateTypedArrayBuffer(O, len) 수행.
  3. k = 0.
  4. k < len 동안 반복
    1. Pk = ! ToString(𝔽(k)).
    2. kValue = ? Get(arrayLike, Pk).
    3. Set(O, Pk, kValue, true) 수행.
    4. k = k + 1.
  5. unused 반환.

23.2.5.1.6 AllocateTypedArrayBuffer ( O, length )

The abstract operation AllocateTypedArrayBuffer takes arguments O (a TypedArray) and length (a non-negative integer) and returns unused 또는 throw completion. O 에 ArrayBuffer 를 할당하고 연관시킨다. It performs the following steps when called:

  1. Assert: O.[[ViewedArrayBuffer]]undefined.
  2. elementSize = TypedArrayElementSize(O).
  3. byteLength = elementSize × length.
  4. data = ? AllocateArrayBuffer(%ArrayBuffer%, byteLength).
  5. O.[[ViewedArrayBuffer]] = data.
  6. O.[[ByteLength]] = byteLength.
  7. O.[[ByteOffset]] = 0.
  8. O.[[ArrayLength]] = length.
  9. unused 반환.

23.2.6 TypedArray 생성자들의 프로퍼티

TypedArray 생성자는 다음을 가진다:

  • 값이 %TypedArray%[[Prototype]] 내부 슬롯.
  • 값이 3𝔽"length" 프로퍼티.
  • Table 73에 지정된 생성자 이름의 String 값인 "name" 프로퍼티.
  • 다음 프로퍼티들:

23.2.6.1 TypedArray.BYTES_PER_ELEMENT

TypedArray.BYTES_PER_ELEMENT 의 값은 Table 73에서 TypedArray 에 대해 지정된 요소 크기(Element Size) 값이다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성을 가진다.

23.2.6.2 TypedArray.prototype

TypedArray.prototype 의 초기 값은 해당하는 TypedArray 프로토타입 내재 객체(23.2.7)이다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성을 가진다.

23.2.7 TypedArray 프로토타입 객체들의 프로퍼티

TypedArray 프로토타입 객체는 다음을 가진다:

23.2.7.1 TypedArray.prototype.BYTES_PER_ELEMENT

TypedArray.prototype.BYTES_PER_ELEMENT 의 값은 Table 73에서 TypedArray 에 대해 지정된 요소 크기(Element Size) 값이다.

이 프로퍼티는 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } 특성을 가진다.

23.2.7.2 TypedArray.prototype.constructor

주어진 TypedArray 생성자에 대한 프로토타입의 "constructor" 프로퍼티 초기 값은 그 생성자 자신이다.

23.2.8 TypedArray 인스턴스의 프로퍼티

TypedArray 인스턴스는 TypedArray 이다. 각 TypedArray 인스턴스는 해당 TypedArray 프로토타입 객체로부터 프로퍼티를 상속한다. 각 TypedArray 인스턴스는 내부 슬롯 [[ViewedArrayBuffer]], [[TypedArrayName]], [[ContentType]], [[ByteLength]], [[ByteOffset]], [[ArrayLength]] 를 가진다.