23.2.3 %TypedArray% 프로토타입 객체의 프로퍼티
%TypedArray% 프로토타입 객체는 다음과 같다:
- 값이 %Object.prototype% 인 [[Prototype]] 내부 슬롯을 가진다.
- %TypedArray.prototype% 이다.
- 일반 객체이다.
- [[ViewedArrayBuffer]] 또는 TypedArray 인스턴스 전용의 다른 내부 슬롯을 가지지 않는다.
23.2.3.1 %TypedArray%.prototype.at ( index )
- O 를 this 값으로 둔다.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- relativeIndex = ? ToIntegerOrInfinity(index).
- relativeIndex ≥ 0 이면
- k = relativeIndex.
- Else,
- k = len + relativeIndex.
- k < 0 또는 k ≥ len 이면 undefined 반환.
- ! Get(O, ! ToString(𝔽(k))) 반환.
23.2.3.2 get %TypedArray%.prototype.buffer
%TypedArray%.prototype.buffer
는 set 접근자 함수가 undefined 인 접근자 프로퍼티이다. 그 get 접근자 함수는 호출 시 다음을 수행한다:
- O = this 값.
- ? RequireInternalSlot(O, [[TypedArrayName]]) 수행.
- Assert: O 는 [[ViewedArrayBuffer]] 내부 슬롯을 가진다.
- buffer = O.[[ViewedArrayBuffer]].
- buffer 반환.
23.2.3.3 get %TypedArray%.prototype.byteLength
%TypedArray%.prototype.byteLength
는 set 접근자 함수가 undefined 인 접근자 프로퍼티이다. 그 get 접근자 함수는 다음을 수행한다:
- O = this 값.
- ? RequireInternalSlot(O, [[TypedArrayName]]) 수행.
- Assert: O 는 [[ViewedArrayBuffer]] 내부 슬롯을 가진다.
- taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
- size = TypedArrayByteLength(taRecord).
- 𝔽(size) 반환.
23.2.3.4 get %TypedArray%.prototype.byteOffset
%TypedArray%.prototype.byteOffset
는 set 접근자 함수가 undefined 인 접근자 프로퍼티이다. 그 get 접근자 함수는 다음을 수행한다:
- O = this 값.
- ? RequireInternalSlot(O, [[TypedArrayName]]) 수행.
- Assert: O 는 [[ViewedArrayBuffer]] 내부 슬롯을 가진다.
- taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
- IsTypedArrayOutOfBounds(taRecord) 가 true 이면 +0𝔽 반환.
- offset = O.[[ByteOffset]].
- 𝔽(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
과 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- relativeTarget = ? ToIntegerOrInfinity(target).
- relativeTarget = -∞ 이면 targetIndex = 0.
- Else if relativeTarget < 0 이면 targetIndex = max(len + relativeTarget, 0).
- Else targetIndex = min(relativeTarget, len).
- relativeStart = ? ToIntegerOrInfinity(start).
- relativeStart = -∞ 이면 startIndex = 0.
- Else if relativeStart < 0 이면 startIndex = max(len + relativeStart, 0).
- Else startIndex = min(relativeStart, len).
- end 이 undefined 이면 relativeEnd = len; else relativeEnd = ? ToIntegerOrInfinity(end).
- relativeEnd = -∞ 이면 endIndex = 0.
- Else if relativeEnd < 0 이면 endIndex = max(len + relativeEnd, 0).
- Else endIndex = min(relativeEnd, len).
- count = min(endIndex - startIndex, len - targetIndex).
- count > 0 이면
- NOTE: 복사는 소스 데이터의 비트 수준 인코딩이 유지되도록 수행되어야 한다.
- buffer = O.[[ViewedArrayBuffer]].
- taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
- IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
- len = TypedArrayLength(taRecord).
- elementSize = TypedArrayElementSize(O).
- byteOffset = O.[[ByteOffset]].
- bufferByteLimit = (len × elementSize) + byteOffset.
- toByteIndex = (targetIndex × elementSize) + byteOffset.
- fromByteIndex = (startIndex × elementSize) + byteOffset.
- countBytes = count × elementSize.
- fromByteIndex < toByteIndex 그리고 toByteIndex < fromByteIndex + countBytes 이면
- direction = -1.
- fromByteIndex = fromByteIndex + countBytes - 1.
- toByteIndex = toByteIndex + countBytes - 1.
- Else,
- direction = 1.
- countBytes > 0 동안 반복
- fromByteIndex < bufferByteLimit 그리고 toByteIndex < bufferByteLimit 이면
- value = GetValueFromBuffer(buffer, fromByteIndex, uint8, true, unordered).
- SetValueInBuffer(buffer, toByteIndex, uint8, value, true, unordered) 수행.
- fromByteIndex = fromByteIndex + direction.
- toByteIndex = toByteIndex + direction.
- countBytes = countBytes - 1.
- Else
- countBytes = 0.
- O 반환.
23.2.3.7 %TypedArray%.prototype.entries ( )
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- ? ValidateTypedArray(O, seq-cst) 수행.
- CreateArrayIterator(O, key+value) 반환.
23.2.3.8 %TypedArray%.prototype.every ( callback [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.6에 정의된 Array.prototype.every
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- IsCallable(callback) false 이면 TypeError 예외.
- k = 0.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
- testResult = false 이면 false 반환.
- k = k + 1.
- true 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.9 %TypedArray%.prototype.fill ( value [ , start [ , end ] ] )
이 메서드의 인자 해석과 사용은 23.1.3.7에 정의된 Array.prototype.fill
과 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- O.[[ContentType]] 가 bigint 이면 value = ? ToBigInt(value).
- 아니면 value = ? ToNumber(value).
- relativeStart = ? ToIntegerOrInfinity(start).
- relativeStart = -∞ 이면 startIndex = 0.
- Else if relativeStart < 0 이면 startIndex = max(len + relativeStart, 0).
- Else startIndex = min(relativeStart, len).
- end 이 undefined 이면 relativeEnd = len; else relativeEnd = ? ToIntegerOrInfinity(end).
- relativeEnd = -∞ 이면 endIndex = 0.
- Else if relativeEnd < 0 이면 endIndex = max(len + relativeEnd, 0).
- Else endIndex = min(relativeEnd, len).
- taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
- IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
- len = TypedArrayLength(taRecord).
- endIndex = min(endIndex, len).
- k = startIndex.
- k < endIndex 동안 반복
- Pk = ! ToString(𝔽(k)).
- ! Set(O, Pk, value, true) 수행.
- k = k + 1.
- O 반환.
23.2.3.10 %TypedArray%.prototype.filter ( callback [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.8에 정의된 Array.prototype.filter
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- IsCallable(callback) false 이면 TypeError 예외.
- kept = 새 빈 List.
- captured = 0.
- k = 0.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- selected = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
- selected = true 이면
- kept 에 kValue 추가.
- captured = captured + 1.
- k = k + 1.
- A = ? TypedArraySpeciesCreate(O, « 𝔽(captured) »).
- n = 0.
- 각 kept 요소 e 에 대해
- ! Set(A, ! ToString(𝔽(n)), e, true) 수행.
- n = n + 1.
- A 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.11 %TypedArray%.prototype.find ( predicate [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.9에 정의된 Array.prototype.find
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg).
- findRec.[[Value]] 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.12 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.10에 정의된 Array.prototype.findIndex
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg).
- findRec.[[Index]] 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.13 %TypedArray%.prototype.findLast ( predicate [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.11에 정의된 Array.prototype.findLast
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg).
- findRec.[[Value]] 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.14 %TypedArray%.prototype.findLastIndex ( predicate [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.12에 정의된 Array.prototype.findLastIndex
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg).
- findRec.[[Index]] 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.15 %TypedArray%.prototype.forEach ( callback [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.15에 정의된 Array.prototype.forEach
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- IsCallable(callback) false 이면 TypeError 예외.
- k = 0.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- ? Call(callback, thisArg, « kValue, 𝔽(k), O ») 수행.
- k = k + 1.
- undefined 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.16 %TypedArray%.prototype.includes ( searchElement [ , fromIndex ] )
이 메서드의 인자 해석과 사용은 23.1.3.16에 정의된 Array.prototype.includes
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- len = 0 이면 false 반환.
- n = ? ToIntegerOrInfinity(fromIndex).
- Assert: fromIndex 가 undefined 이면 n = 0.
- n = +∞ 이면 false 반환.
- Else if n = -∞ 이면 n = 0.
- n ≥ 0 이면
- k = n.
- Else
- k = len + n.
- k < 0 이면 k = 0.
- k < len 동안 반복
- elementK = ! Get(O, ! ToString(𝔽(k))).
- SameValueZero(searchElement, elementK) true 이면 true 반환.
- k = k + 1.
- false 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.17 %TypedArray%.prototype.indexOf ( searchElement [ , fromIndex ] )
이 메서드의 인자 해석과 사용은 23.1.3.17에 정의된 Array.prototype.indexOf
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- len = 0 이면 -1𝔽 반환.
- n = ? ToIntegerOrInfinity(fromIndex).
- Assert: fromIndex undefined ⇒ n = 0.
- n = +∞ 이면 -1𝔽 반환.
- Else if n = -∞ 이면 n = 0.
- n ≥ 0 이면
- k = n.
- Else
- k = len + n.
- k < 0 이면 k = 0.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- kPresent = ! HasProperty(O, Pk).
- kPresent = true 이면
- elementK = ! Get(O, Pk).
- IsStrictlyEqual(searchElement, elementK) true 이면 𝔽(k) 반환.
- k = k + 1.
- -1𝔽 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.18 %TypedArray%.prototype.join ( separator )
이 메서드의 인자 해석과 사용은 23.1.3.18에 정의된 Array.prototype.join
과 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- separator 가 undefined 이면 sep = ",".
- Else sep = ? ToString(separator).
- R = 빈 String.
- k = 0.
- k < len 동안 반복
- k > 0 이면 R = R + sep.
- element = ! Get(O, ! ToString(𝔽(k))).
- element ≠ undefined 이면
- S = ! ToString(element).
- R = R + S.
- k = k + 1.
- R 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.19 %TypedArray%.prototype.keys ( )
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- ? ValidateTypedArray(O, seq-cst) 수행.
- CreateArrayIterator(O, key) 반환.
23.2.3.20 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
이 메서드의 인자 해석과 사용은 23.1.3.20에 정의된 Array.prototype.lastIndexOf
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- len = 0 이면 -1𝔽 반환.
- fromIndex 존재하면 n = ? ToIntegerOrInfinity(fromIndex); else n = len - 1.
- n = -∞ 이면 -1𝔽 반환.
- n ≥ 0 이면
- k = min(n, len - 1).
- Else
- k = len + n.
- k ≥ 0 동안 반복
- Pk = ! ToString(𝔽(k)).
- kPresent = ! HasProperty(O, Pk).
- kPresent = true 이면
- elementK = ! Get(O, Pk).
- IsStrictlyEqual(searchElement, elementK) true 이면 𝔽(k) 반환.
- k = k - 1.
- -1𝔽 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.21 get %TypedArray%.prototype.length
%TypedArray%.prototype.length
는 set 접근자 함수가 undefined 인 접근자 프로퍼티이다. 그 get 접근자 함수는 다음을 수행한다:
- O = this 값.
- ? RequireInternalSlot(O, [[TypedArrayName]]) 수행.
- Assert: O 는 [[ViewedArrayBuffer]], [[ArrayLength]] 내부 슬롯을 가진다.
- taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
- IsTypedArrayOutOfBounds(taRecord) true 이면 +0𝔽 반환.
- length = TypedArrayLength(taRecord).
- 𝔽(length) 반환.
이 함수는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.22 %TypedArray%.prototype.map ( callback [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.21에 정의된 Array.prototype.map
과 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- IsCallable(callback) false 이면 TypeError 예외.
- A = ? TypedArraySpeciesCreate(O, « 𝔽(len) »).
- k = 0.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- mappedValue = ? Call(callback, thisArg, « kValue, 𝔽(k), O »).
- ? Set(A, Pk, mappedValue, true) 수행.
- k = k + 1.
- A 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.23 %TypedArray%.prototype.reduce ( callback [ , initialValue ] )
이 메서드의 인자 해석과 사용은 23.1.3.24에 정의된 Array.prototype.reduce
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- IsCallable(callback) false 이면 TypeError 예외.
- len = 0 이고 initialValue 미존재이면 TypeError 예외.
- k = 0.
- accumulator = undefined.
- initialValue 존재하면
- accumulator = initialValue.
- Else
- Pk = ! ToString(𝔽(k)).
- accumulator = ! Get(O, Pk).
- k = k + 1.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »).
- k = k + 1.
- accumulator 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.24 %TypedArray%.prototype.reduceRight ( callback [ , initialValue ] )
이 메서드의 인자 해석과 사용은 23.1.3.25에 정의된 Array.prototype.reduceRight
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- IsCallable(callback) false 이면 TypeError 예외.
- len = 0 이고 initialValue 미존재이면 TypeError 예외.
- k = len - 1.
- accumulator = undefined.
- initialValue 존재하면
- accumulator = initialValue.
- Else
- Pk = ! ToString(𝔽(k)).
- accumulator = ! Get(O, Pk).
- k = k - 1.
- k ≥ 0 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »).
- k = k - 1.
- accumulator 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.25 %TypedArray%.prototype.reverse ( )
이 메서드의 인자 해석과 사용은 23.1.3.26에 정의된 Array.prototype.reverse
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- middle = floor(len / 2).
- lower = 0.
- lower ≠ middle 동안
- upper = len - lower - 1.
- upperP = ! ToString(𝔽(upper)).
- lowerP = ! ToString(𝔽(lower)).
- lowerValue = ! Get(O, lowerP).
- upperValue = ! Get(O, upperP).
- ! Set(O, lowerP, upperValue, true).
- ! Set(O, upperP, lowerValue, true).
- lower = lower + 1.
- O 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.26 %TypedArray%.prototype.set ( source [ , offset ] )
이 메서드는 source 로부터 값을 읽어 이 TypedArray 에 여러 값을 설정한다. 구체적 동작은 source 타입에 따라 다르다. 선택적 offset 값은 이 TypedArray 내에서 값이 기록될 첫 요소 인덱스를 나타내며 생략되면 0 으로 간주된다.
호출 시 다음 단계를 수행한다:
- target = this 값.
- ? RequireInternalSlot(target, [[TypedArrayName]]) 수행.
- Assert: target 은 [[ViewedArrayBuffer]] 내부 슬롯을 가진다.
- targetOffset = ? ToIntegerOrInfinity(offset).
- targetOffset < 0 이면 RangeError 예외.
- source 가 [[TypedArrayName]] 내부 슬롯을 가진 Object 이면
- ? SetTypedArrayFromTypedArray(target, targetOffset, source) 수행.
- Else
- ? SetTypedArrayFromArrayLike(target, targetOffset, source) 수행.
- 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:
- targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, seq-cst).
- IsTypedArrayOutOfBounds(targetRecord) true 이면 TypeError 예외.
- targetLength = TypedArrayLength(targetRecord).
- src = ? ToObject(source).
- srcLength = ? LengthOfArrayLike(src).
- targetOffset = +∞ 이면 RangeError 예외.
- srcLength + targetOffset > targetLength 이면 RangeError 예외.
- k = 0.
- k < srcLength 동안 반복
- Pk = ! ToString(𝔽(k)).
- value = ? Get(src, Pk).
- targetIndex = 𝔽(targetOffset + k).
- ? TypedArraySetElement(target, targetIndex, value) 수행.
- k = k + 1.
- 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:
- targetBuffer = target.[[ViewedArrayBuffer]].
- targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, seq-cst).
- IsTypedArrayOutOfBounds(targetRecord) true 이면 TypeError 예외.
- targetLength = TypedArrayLength(targetRecord).
- srcBuffer = source.[[ViewedArrayBuffer]].
- srcRecord = MakeTypedArrayWithBufferWitnessRecord(source, seq-cst).
- IsTypedArrayOutOfBounds(srcRecord) true 이면 TypeError 예외.
- srcLength = TypedArrayLength(srcRecord).
- targetType = TypedArrayElementType(target).
- targetElementSize = TypedArrayElementSize(target).
- targetByteOffset = target.[[ByteOffset]].
- srcType = TypedArrayElementType(source).
- srcElementSize = TypedArrayElementSize(source).
- srcByteOffset = source.[[ByteOffset]].
- targetOffset = +∞ 이면 RangeError 예외.
- srcLength + targetOffset > targetLength 이면 RangeError 예외.
- target.[[ContentType]] ≠ source.[[ContentType]] 이면 TypeError 예외.
- IsSharedArrayBuffer(srcBuffer) = true, IsSharedArrayBuffer(targetBuffer) = true, 그리고 srcBuffer.[[ArrayBufferData]] 가 targetBuffer.[[ArrayBufferData]] 와 동일하면 sameSharedArrayBuffer = true; 아니면 false.
- SameValue(srcBuffer, targetBuffer) = true 또는 sameSharedArrayBuffer = true 이면
- srcByteLength = TypedArrayByteLength(srcRecord).
- srcBuffer = ? CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength).
- srcByteIndex = 0.
- Else
- srcByteIndex = srcByteOffset.
- targetByteIndex = (targetOffset × targetElementSize) + targetByteOffset.
- limit = targetByteIndex + (targetElementSize × srcLength).
- srcType = targetType 이면
- NOTE: 전송은 소스 데이터의 비트 수준 인코딩을 보존해야 한다.
- targetByteIndex < limit 동안 반복
- value = GetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered).
- SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) 수행.
- srcByteIndex = srcByteIndex + 1.
- targetByteIndex = targetByteIndex + 1.
- Else
- targetByteIndex < limit 동안 반복
- value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, unordered).
- SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, unordered) 수행.
- srcByteIndex = srcByteIndex + srcElementSize.
- targetByteIndex = targetByteIndex + targetElementSize.
- unused 반환.
23.2.3.27 %TypedArray%.prototype.slice ( start, end )
이 메서드의 인자 해석과 사용은 23.1.3.28에 정의된 Array.prototype.slice
와 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- srcArrayLength = TypedArrayLength(taRecord).
- relativeStart = ? ToIntegerOrInfinity(start).
- relativeStart = -∞ 이면 startIndex = 0.
- Else if relativeStart < 0 이면 startIndex = max(srcArrayLength + relativeStart, 0).
- Else startIndex = min(relativeStart, srcArrayLength).
- end undefined 이면 relativeEnd = srcArrayLength; else relativeEnd = ? ToIntegerOrInfinity(end).
- relativeEnd = -∞ 이면 endIndex = 0.
- Else if relativeEnd < 0 이면 endIndex = max(srcArrayLength + relativeEnd, 0).
- Else endIndex = min(relativeEnd, srcArrayLength).
- countBytes = max(endIndex - startIndex, 0).
- A = ? TypedArraySpeciesCreate(O, « 𝔽(countBytes) »).
- countBytes > 0 이면
- taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
- IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
- endIndex = min(endIndex, TypedArrayLength(taRecord)).
- countBytes = max(endIndex - startIndex, 0).
- srcType = TypedArrayElementType(O).
- targetType = TypedArrayElementType(A).
- srcType = targetType 이면
- NOTE: 전송은 소스 데이터의 비트 수준 인코딩을 보존해야 한다.
- srcBuffer = O.[[ViewedArrayBuffer]].
- targetBuffer = A.[[ViewedArrayBuffer]].
- elementSize = TypedArrayElementSize(O).
- srcByteOffset = O.[[ByteOffset]].
- srcByteIndex = (startIndex × elementSize) + srcByteOffset.
- targetByteIndex = A.[[ByteOffset]].
- endByteIndex = targetByteIndex + (countBytes × elementSize).
- targetByteIndex < endByteIndex 동안 반복
- value = GetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered).
- SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) 수행.
- srcByteIndex = srcByteIndex + 1.
- targetByteIndex = targetByteIndex + 1.
- Else
- n = 0.
- k = startIndex.
- k < endIndex 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- ! Set(A, ! ToString(𝔽(n)), kValue, true) 수행.
- k = k + 1.
- n = n + 1.
- A 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.28 %TypedArray%.prototype.some ( callback [ , thisArg ] )
이 메서드의 인자 해석과 사용은 23.1.3.29에 정의된 Array.prototype.some
과 동일하다.
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- IsCallable(callback) false 이면 TypeError 예외.
- k = 0.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- kValue = ! Get(O, Pk).
- testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »)).
- testResult = true 이면 true 반환.
- k = k + 1.
- false 반환.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
23.2.3.29 %TypedArray%.prototype.sort ( comparator )
이는 별도의 메서드로서 아래 설명된 부분을 제외하면 23.1.3.30에 정의된 Array.prototype.sort
와 동일한 요구사항을 구현한다. 이 메서드 구현은 this 값이 길이가 고정된 객체이며 정수 인덱스 프로퍼티가 희소하지 않다는 사실을 활용해 최적화될 수 있다.
이 메서드는 제네릭이 아니다. this 값은 [[TypedArrayName]] 내부 슬롯을 가진 객체여야 한다.
호출 시 다음 단계를 수행한다:
- comparator ≠ undefined 이고 IsCallable(comparator) = false 이면 TypeError 예외.
- obj = this 값.
- taRecord = ? ValidateTypedArray(obj, seq-cst).
- len = TypedArrayLength(taRecord).
- NOTE: 다음 클로저는 23.1.3.30에서 수행되는 문자열 비교 대신 수치 비교를 수행한다.
- SortCompare 를 (x, y) 매개변수로 하고 comparator 를 캡처하여 호출 시 ? CompareTypedArrayElements(x, y, comparator) 를 반환하는 새 추상 클로저로 둔다.
- sortedList = ? SortIndexedProperties(obj, len, SortCompare, read-through-holes).
- j = 0.
- j < len 동안 반복
- ! Set(obj, ! ToString(𝔽(j)), sortedList[j], true) 수행.
- j = j + 1.
- obj 반환.
Note
NaN 은 (CompareTypedArrayElements 참조) 다른 어떤 값보다 항상 크게 비교되므로 comparator 가 제공되지 않을 때 NaN 값은 결과 끝에 정렬된다.
23.2.3.30 %TypedArray%.prototype.subarray ( start, end )
이 메서드는 새로운 TypedArray 를 반환하며 그 요소 타입은 이 TypedArray 의 요소 타입과 같고, ArrayBuffer 는 동일한 ArrayBuffer 를 사용하며 start (포함) 부터 end (배타) 전까지의 요소를 참조한다. start 또는 end 가 음수이면 배열의 끝을 기준으로 하는 인덱스를 의미한다.
호출 시 다음 단계를 수행한다:
- O = this 값.
- ? RequireInternalSlot(O, [[TypedArrayName]]) 수행.
- Assert: O 는 [[ViewedArrayBuffer]] 내부 슬롯을 가진다.
- buffer = O.[[ViewedArrayBuffer]].
- srcRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst).
- IsTypedArrayOutOfBounds(srcRecord) true 이면
- srcLength = 0.
- Else
- srcLength = TypedArrayLength(srcRecord).
- relativeStart = ? ToIntegerOrInfinity(start).
- relativeStart = -∞ 이면 startIndex = 0.
- Else if relativeStart < 0 이면 startIndex = max(srcLength + relativeStart, 0).
- Else startIndex = min(relativeStart, srcLength).
- elementSize = TypedArrayElementSize(O).
- srcByteOffset = O.[[ByteOffset]].
- beginByteOffset = srcByteOffset + (startIndex × elementSize).
- O.[[ArrayLength]] 가 auto 이고 end 가 undefined 이면
- argumentsList = « buffer, 𝔽(beginByteOffset) ».
- Else
- end undefined 이면 relativeEnd = srcLength; else relativeEnd = ? ToIntegerOrInfinity(end).
- relativeEnd = -∞ 이면 endIndex = 0.
- Else if relativeEnd < 0 이면 endIndex = max(srcLength + relativeEnd, 0).
- Else endIndex = min(relativeEnd, srcLength).
- newLength = max(endIndex - startIndex, 0).
- argumentsList = « buffer, 𝔽(beginByteOffset), 𝔽(newLength) ».
- ? 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 ( )
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- A = ? TypedArrayCreateSameType(O, len).
- k = 0.
- k < len 동안 반복
- from = ! ToString(𝔽(len - k - 1)).
- Pk = ! ToString(𝔽(k)).
- fromValue = ! Get(O, from).
- ! Set(A, Pk, fromValue, true) 수행.
- k = k + 1.
- A 반환.
23.2.3.33 %TypedArray%.prototype.toSorted ( comparator )
이 메서드는 호출 시 다음 단계를 수행한다:
- comparator ≠ undefined 그리고 IsCallable(comparator) = false 이면 TypeError 예외.
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- A = ? TypedArrayCreateSameType(O, len).
- NOTE: 다음 클로저는 23.1.3.34 에서의 문자열 비교 대신 수치 비교를 수행한다.
- SortCompare 를 (x, y) → ? CompareTypedArrayElements(x, y, comparator) 클로저로 둔다.
- sortedList = ? SortIndexedProperties(O, len, SortCompare, read-through-holes).
- j = 0.
- j < len 동안 반복
- ! Set(A, ! ToString(𝔽(j)), sortedList[j], true) 수행.
- j = j + 1.
- A 반환.
23.2.3.34 %TypedArray%.prototype.toString ( )
"toString" 프로퍼티의 초기 값은 23.1.3.36에 정의된 %Array.prototype.toString% 이다.
23.2.3.35 %TypedArray%.prototype.values ( )
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- ? ValidateTypedArray(O, seq-cst) 수행.
- CreateArrayIterator(O, value) 반환.
23.2.3.36 %TypedArray%.prototype.with ( index, value )
이 메서드는 호출 시 다음 단계를 수행한다:
- O = this 값.
- taRecord = ? ValidateTypedArray(O, seq-cst).
- len = TypedArrayLength(taRecord).
- relativeIndex = ? ToIntegerOrInfinity(index).
- relativeIndex ≥ 0 이면 actualIndex = relativeIndex; Else actualIndex = len + relativeIndex.
- O.[[ContentType]] = bigint 이면 numericValue = ? ToBigInt(value).
- Else numericValue = ? ToNumber(value).
- IsValidIntegerIndex(O, 𝔽(actualIndex)) false 이면 RangeError 예외.
- A = ? TypedArrayCreateSameType(O, len).
- k = 0.
- k < len 동안 반복
- Pk = ! ToString(𝔽(k)).
- k = actualIndex 이면 fromValue = numericValue; Else fromValue = ! Get(O, Pk).
- ! Set(A, Pk, fromValue, true) 수행.
- k = k + 1.
- 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 접근자 함수는 호출 시 다음을 수행한다:
- O = this 값.
- O 가 Object 가 아니면 undefined 반환.
- O 가 [[TypedArrayName]] 내부 슬롯을 가지지 않으면 undefined 반환.
- name = O.[[TypedArrayName]].
- Assert: name 은 String.
- 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:
- newTypedArray = ? Construct(constructor, argumentList).
- taRecord = ? ValidateTypedArray(newTypedArray, seq-cst).
- Assert: newTypedArray 는 TypedArray 인스턴스의 프로퍼티에 언급된 모든 내부 슬롯을 가진다.
- argumentList 요소 수가 1 이고 argumentList[0] 이 Number 이면
- IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
- length = TypedArrayLength(taRecord).
- length < ℝ(argumentList[0]) 이면 TypeError 예외.
- 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:
- constructor = Table 73 에서 exemplar.[[TypedArrayName]] 생성자 이름에 연관된 내재 객체.
- result = ? TypedArrayCreateFromConstructor(constructor, « 𝔽(length) »).
- Assert: result 는 [[TypedArrayName]], [[ContentType]] 내부 슬롯을 가진다.
- Assert: result.[[ContentType]] = exemplar.[[ContentType]].
- 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:
- defaultConstructor = Table 73 에서 exemplar.[[TypedArrayName]] 생성자 이름에 연관된 내재 객체.
- constructor = ? SpeciesConstructor(exemplar, defaultConstructor).
- result = ? TypedArrayCreateFromConstructor(constructor, argumentList).
- result.[[ContentType]] ≠ exemplar.[[ContentType]] 이면 TypeError 예외.
- 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:
- ? RequireInternalSlot(O, [[TypedArrayName]]) 수행.
- Assert: O 는 [[ViewedArrayBuffer]] 내부 슬롯을 가진다.
- taRecord = MakeTypedArrayWithBufferWitnessRecord(O, order).
- IsTypedArrayOutOfBounds(taRecord) true 이면 TypeError 예외.
- 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:
- 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:
- 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:
- Assert: x, y 둘 다 Number 이거나 둘 다 BigInt.
- comparator ≠ undefined 이면
- v = ? ToNumber(? Call(comparator, undefined, « x, y »)).
- v 가 NaN 이면 +0𝔽 반환.
- v 반환.
- x 와 y 모두 NaN 이면 +0𝔽 반환.
- x 가 NaN 이면 1𝔽 반환.
- y 가 NaN 이면 -1𝔽 반환.
- x < y 이면 -1𝔽 반환.
- x > y 이면 1𝔽 반환.
- x 가 -0𝔽 이고 y 가 +0𝔽 이면 -1𝔽 반환.
- x 가 +0𝔽 이고 y 가 -0𝔽 이면 1𝔽 반환.
- +0𝔽 반환.
Note
이는
23.1.3.30.2에서의 문자열 비교 대신 수치 비교를 수행한다.