23 Indexed Collections
23.1 Array Objects
Arrays are
23.1.1 The Array Constructor
The Array
- is
%Array% . - is the initial value of the
"Array" property of theglobal object . - creates and initializes a new Array when called as a
constructor . - also creates and initializes a new Array when called as a function rather than as a
constructor . Thus the function callArray(…)is equivalent to the object creation expressionnew Array(…)with the same arguments. - is a function whose behaviour differs based upon the number and types of its arguments.
- may be used as the value of an
extendsclause of a class definition. Subclassconstructors that intend to inherit the exotic Array behaviour must include asupercall to the Arrayconstructor to initialize subclass instances that areArray exotic objects . However, most of theArray.prototypemethods are generic methods that are not dependent upon theirthis value being anArray exotic object .
23.1.1.1 Array ( ...values )
This function performs the following steps when called:
- If NewTarget is
undefined , let newTarget be theactive function object ; else let newTarget be NewTarget. - Let proto be ?
GetPrototypeFromConstructor (newTarget," ).%Array.prototype% " - Let numberOfArgs be the number of elements in values.
- If numberOfArgs = 0, then
- Return !
ArrayCreate (0, proto).
- Return !
- Else if numberOfArgs = 1, then
- Let len be values[0].
- Let array be !
ArrayCreate (0, proto). - If len
is not a Number , then- Perform !
CreateDataPropertyOrThrow (array,"0" , len). - Let intLen be
1 𝔽.
- Perform !
- Else,
- Let intLen be !
ToUint32 (len). - If
SameValueZero (intLen, len) isfalse , throw aRangeError exception.
- Let intLen be !
- Perform !
Set (array,"length" , intLen,true ). - Return array.
- Else,
Assert : numberOfArgs ≥ 2.- Let array be ?
ArrayCreate (numberOfArgs, proto). - Let k be 0.
- Repeat, while k < numberOfArgs,
- Let Pk be !
ToString (𝔽 (k)). - Let itemK be values[k].
- Perform !
CreateDataPropertyOrThrow (array, Pk, itemK). - Set k to k + 1.
- Let Pk be !
Assert : Themathematical value of array's"length" property is numberOfArgs.- Return array.
23.1.2 Properties of the Array Constructor
The Array
- has a [[Prototype]] internal slot whose value is
%Function.prototype% . - has a
"length" property whose value is1 𝔽. - has the following properties:
23.1.2.1 Array.from ( items [ , mapper [ , thisArg ] ] )
This method performs the following steps when called:
- Let C be the
this value. - If mapper is
undefined , then- Let mapping be
false .
- Let mapping be
- Else,
- If
IsCallable (mapper) isfalse , throw aTypeError exception. - Let mapping be
true .
- If
- Let usingIterator be ?
GetMethod (items,%Symbol.iterator% ). - If usingIterator is not
undefined , then- If
IsConstructor (C) istrue , then- Let A be ?
Construct (C).
- Let A be ?
- Else,
- Let A be !
ArrayCreate (0).
- Let A be !
- Let iteratorRecord be ?
GetIteratorFromMethod (items, usingIterator). - Let k be 0.
- Repeat,
- If k ≥ 253 - 1, then
- Let error be
ThrowCompletion (a newly createdTypeError object). - Return ?
IteratorClose (iteratorRecord, error).
- Let error be
- Let Pk be !
ToString (𝔽 (k)). - Let next be ?
IteratorStepValue (iteratorRecord). - If next is
done , then - If mapping is
true , then- Let mappedValue be
Completion (Call (mapper, thisArg, « next,𝔽 (k) »)). IfAbruptCloseIterator (mappedValue, iteratorRecord).
- Let mappedValue be
- Else,
- Let mappedValue be next.
- Let defineStatus be
Completion (CreateDataPropertyOrThrow (A, Pk, mappedValue)). IfAbruptCloseIterator (defineStatus, iteratorRecord).- Set k to k + 1.
- If k ≥ 253 - 1, then
- If
- NOTE: items is not
iterable so assume it is anarray-like object . - Let arrayLike be !
ToObject (items). - Let len be ?
LengthOfArrayLike (arrayLike). - If
IsConstructor (C) istrue , then - Else,
- Let A be ?
ArrayCreate (len).
- Let A be ?
- Let k be 0.
- Repeat, while k < len,
- Perform ?
Set (A,"length" ,𝔽 (len),true ). - Return A.
This method is an intentionally generic factory method; it does not require that its
23.1.2.2 Array.isArray ( arg )
This function performs the following steps when called:
- Return ?
IsArray (arg).
23.1.2.3 Array.of ( ...items )
This method performs the following steps when called:
- Let len be the number of elements in items.
- Let lenNumber be
𝔽 (len). - Let C be the
this value. - If
IsConstructor (C) istrue , then- Let A be ?
Construct (C, « lenNumber »).
- Let A be ?
- Else,
- Let A be ?
ArrayCreate (len).
- Let A be ?
- Let k be 0.
- Repeat, while k < len,
- Let kValue be items[k].
- Let Pk be !
ToString (𝔽 (k)). - Perform ?
CreateDataPropertyOrThrow (A, Pk, kValue). - Set k to k + 1.
- Perform ?
Set (A,"length" , lenNumber,true ). - Return A.
This method is an intentionally generic factory method; it does not require that its
23.1.2.4 Array.prototype
The value of Array.prototype is the
This property has the attributes { [[Writable]]:
23.1.2.5 get Array [ %Symbol.species% ]
Array[%Symbol.species%] is an
- Return the
this value.
The value of the
Array prototype methods normally use their
23.1.3 Properties of the Array Prototype Object
The Array prototype object:
- is
%Array.prototype% . - is an
Array exotic object and has the internal methods specified for such objects. - has a
"length" property whose initial value is+0 𝔽 and whose attributes are { [[Writable]]:true , [[Enumerable]]:false , [[Configurable]]:false }. - has a [[Prototype]] internal slot whose value is
%Object.prototype% .
The Array prototype object is specified to be an
23.1.3.1 Array.prototype.at ( index )
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let relativeIndex be ?
ToIntegerOrInfinity (index). - If relativeIndex ≥ 0, then
- Let k be relativeIndex.
- Else,
- Let k be len + relativeIndex.
- If k < 0 or k ≥ len, return
undefined . - Return ?
Get (O, !ToString (𝔽 (k))).
23.1.3.2 Array.prototype.concat ( ...items )
This method returns an array containing the array elements of the object followed by the array elements of each argument.
It performs the following steps when called:
- Let O be ?
ToObject (this value). - Let A be ?
ArraySpeciesCreate (O, 0). - Let n be 0.
- Prepend O to items.
- For each element E of items, do
- Let spreadable be ?
IsConcatSpreadable (E). - If spreadable is
true , then- Let len be ?
LengthOfArrayLike (E). - If n + len > 253 - 1, throw a
TypeError exception. - Let k be 0.
- Repeat, while k < len,
- Let Pk be !
ToString (𝔽 (k)). - Let exists be ?
HasProperty (E, Pk). - If exists is
true , then- Let subElement be ?
Get (E, Pk). - Perform ?
CreateDataPropertyOrThrow (A, !ToString (𝔽 (n)), subElement).
- Let subElement be ?
- Set n to n + 1.
- Set k to k + 1.
- Let Pk be !
- Let len be ?
- Else,
- NOTE: E is added as a single item rather than spread.
- If n ≥ 253 - 1, throw a
TypeError exception. - Perform ?
CreateDataPropertyOrThrow (A, !ToString (𝔽 (n)), E). - Set n to n + 1.
- Let spreadable be ?
- Perform ?
Set (A,"length" ,𝔽 (n),true ). - Return A.
The
The explicit setting of the
This method is intentionally generic; it does not require that its
23.1.3.2.1 IsConcatSpreadable ( O )
The abstract operation IsConcatSpreadable takes argument O (an
- If O
is not an Object , returnfalse . - Let spreadable be ?
Get (O,%Symbol.isConcatSpreadable% ). - If spreadable is not
undefined , returnToBoolean (spreadable). - Return ?
IsArray (O).
23.1.3.3 Array.prototype.constructor
The initial value of Array.prototype.constructor is
23.1.3.4 Array.prototype.copyWithin ( target, start [ , end ] )
The end argument is optional. If it is not provided, the length of the
If target is negative, it is treated as
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let relativeTarget be ?
ToIntegerOrInfinity (target). - If relativeTarget = -∞, let to be 0.
- Else if relativeTarget < 0, let to be
max (len + relativeTarget, 0). - Else, let to be
min (relativeTarget, len). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let from be 0.
- Else if relativeStart < 0, let from be
max (len + relativeStart, 0). - Else, let from be
min (relativeStart, len). - If end is
undefined , let relativeEnd be len; else let relativeEnd be ?ToIntegerOrInfinity (end). - If relativeEnd = -∞, let final be 0.
- Else if relativeEnd < 0, let final be
max (len + relativeEnd, 0). - Else, let final be
min (relativeEnd, len). - Let count be
min (final - from, len - to). - If from < to and to < from + count, then
- Let direction be -1.
- Set from to from + count - 1.
- Set to to to + count - 1.
- Else,
- Let direction be 1.
- Repeat, while count > 0,
- Let fromKey be !
ToString (𝔽 (from)). - Let toKey be !
ToString (𝔽 (to)). - Let fromPresent be ?
HasProperty (O, fromKey). - If fromPresent is
true , then - Else,
Assert : fromPresent isfalse .- Perform ?
DeletePropertyOrThrow (O, toKey).
- Set from to from + direction.
- Set to to to + direction.
- Set count to count - 1.
- Let fromKey be !
- Return O.
This method is intentionally generic; it does not require that its
23.1.3.5 Array.prototype.entries ( )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Return
CreateArrayIterator (O,key+value ).
23.1.3.6 Array.prototype.every ( callback [ , thisArg ] )
callback should be a function that accepts three arguments and returns a value that is coercible to a Boolean value. every calls callback once for each element present in the array, in ascending order, until it finds one where callback returns every immediately returns every returns
If a thisArg parameter is provided, it will be used as the
callback is called with three arguments: the value of the element, the index of the element, and the object being traversed.
every does not directly mutate the object on which it is called but the object may be mutated by the calls to callback.
The range of elements processed by every is set before the first call to callback. Elements which are appended to the array after the call to every begins will not be visited by callback. If existing elements of the array are changed, their value as passed to callback will be the value at the time every visits them; elements that are deleted after the call to every begins and before being visited are not visited. every acts like the "for all" quantifier in mathematics. In particular, for an empty array, it returns
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let k be 0.
- Repeat, while k < len,
- Return
true .
This method is intentionally generic; it does not require that its
23.1.3.7 Array.prototype.fill ( value [ , start [ , end ] ] )
The start argument is optional. If it is not provided,
The end argument is optional. If it is not provided, the length of the
If start is negative, it is treated as
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let k be 0.
- Else if relativeStart < 0, let k be
max (len + relativeStart, 0). - Else, let k be
min (relativeStart, len). - If end is
undefined , let relativeEnd be len; else let relativeEnd be ?ToIntegerOrInfinity (end). - If relativeEnd = -∞, let final be 0.
- Else if relativeEnd < 0, let final be
max (len + relativeEnd, 0). - Else, let final be
min (relativeEnd, len). - Repeat, while k < final,
- Return O.
This method is intentionally generic; it does not require that its
23.1.3.8 Array.prototype.filter ( callback [ , thisArg ] )
callback should be a function that accepts three arguments and returns a value that is coercible to a Boolean value. filter calls callback once for each element in the array, in ascending order, and constructs a new array of all the values for which callback returns
If a thisArg parameter is provided, it will be used as the
callback is called with three arguments: the value of the element, the index of the element, and the object being traversed.
filter does not directly mutate the object on which it is called but the object may be mutated by the calls to callback.
The range of elements processed by filter is set before the first call to callback. Elements which are appended to the array after the call to filter begins will not be visited by callback. If existing elements of the array are changed their value as passed to callback will be the value at the time filter visits them; elements that are deleted after the call to filter begins and before being visited are not visited.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let A be ?
ArraySpeciesCreate (O, 0). - Let k be 0.
- Let to be 0.
- Repeat, while k < len,
- Let Pk be !
ToString (𝔽 (k)). - Let kPresent be ?
HasProperty (O, Pk). - If kPresent is
true , then - Set k to k + 1.
- Let Pk be !
- Return A.
This method is intentionally generic; it does not require that its
23.1.3.9 Array.prototype.find ( predicate [ , thisArg ] )
This method calls predicate once for each element of the array, in ascending index order, until it finds one where predicate returns a value that coerces to find immediately returns that element value. Otherwise, find returns
See
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let findRec be ?
FindViaPredicate (O, len,ascending , predicate, thisArg). - Return findRec.[[Value]].
This method is intentionally generic; it does not require that its
23.1.3.10 Array.prototype.findIndex ( predicate [ , thisArg ] )
This method calls predicate once for each element of the array, in ascending index order, until it finds one where predicate returns a value that coerces to findIndex immediately returns the index of that element value. Otherwise, findIndex returns -1.
See
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let findRec be ?
FindViaPredicate (O, len,ascending , predicate, thisArg). - Return findRec.[[Index]].
This method is intentionally generic; it does not require that its
23.1.3.11 Array.prototype.findLast ( predicate [ , thisArg ] )
This method calls predicate once for each element of the array, in descending index order, until it finds one where predicate returns a value that coerces to findLast immediately returns that element value. Otherwise, findLast returns
See
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let findRec be ?
FindViaPredicate (O, len,descending , predicate, thisArg). - Return findRec.[[Value]].
This method is intentionally generic; it does not require that its
23.1.3.12 Array.prototype.findLastIndex ( predicate [ , thisArg ] )
This method calls predicate once for each element of the array, in descending index order, until it finds one where predicate returns a value that coerces to findLastIndex immediately returns the index of that element value. Otherwise, findLastIndex returns -1.
See
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let findRec be ?
FindViaPredicate (O, len,descending , predicate, thisArg). - Return findRec.[[Index]].
This method is intentionally generic; it does not require that its
23.1.3.12.1 FindViaPredicate ( O, len, direction, predicate, thisArg )
The abstract operation FindViaPredicate takes arguments O (an Object), len (a non-negative
O should be an
predicate should be a function. When called for an element of the array, it is passed three arguments: the value of the element, the index of the element, and the object being traversed. Its return value will be coerced to a Boolean value.
thisArg will be used as the
This operation does not directly mutate the object on which it is called, but the object may be mutated by the calls to predicate.
The range of elements processed is set before the first call to predicate, just before the traversal begins. Elements that are appended to the array after this will not be visited by predicate. If existing elements of the array are changed, their value as passed to predicate will be the value at the time that this operation visits them. Elements that are deleted after traversal begins and before being visited are still visited and are either looked up from the prototype or are
It performs the following steps when called:
- If
IsCallable (predicate) isfalse , throw aTypeError exception. - If direction is
ascending , then - Else,
- For each
integer k of indices, do- Let Pk be !
ToString (𝔽 (k)). - NOTE: If O is a
TypedArray , the following invocation ofGet will return anormal completion . - Let kValue be ?
Get (O, Pk). - Let testResult be ?
Call (predicate, thisArg, « kValue,𝔽 (k), O »). - If
ToBoolean (testResult) istrue , return theRecord { [[Index]]:𝔽 (k), [[Value]]: kValue }.
- Let Pk be !
- Return the
Record { [[Index]]:-1 𝔽, [[Value]]:undefined }.
23.1.3.13 Array.prototype.flat ( [ depth ] )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let sourceLen be ?
LengthOfArrayLike (O). - Let depthNum be 1.
- If depth is not
undefined , then- Set depthNum to ?
ToIntegerOrInfinity (depth). - If depthNum < 0, set depthNum to 0.
- Set depthNum to ?
- Let A be ?
ArraySpeciesCreate (O, 0). - Perform ?
FlattenIntoArray (A, O, sourceLen, 0, depthNum). - Return A.
23.1.3.13.1 FlattenIntoArray ( target, source, sourceLen, start, depth [ , mapperFunction [ , thisArg ] ] )
The abstract operation FlattenIntoArray takes arguments target (an Object), source (an Object), sourceLen (a non-negative
Assert : If mapperFunction is present, thenIsCallable (mapperFunction) istrue , thisArg is present, and depth is 1.- Let targetIndex be start.
- Let sourceIndex be
+0 𝔽. - Repeat, while
ℝ (sourceIndex) < sourceLen,- Let P be !
ToString (sourceIndex). - Let exists be ?
HasProperty (source, P). - If exists is
true , then- Let element be ?
Get (source, P). - If mapperFunction is present, then
- Set element to ?
Call (mapperFunction, thisArg, « element, sourceIndex, source »).
- Set element to ?
- Let shouldFlatten be
false . - If depth > 0, then
- Set shouldFlatten to ?
IsArray (element).
- Set shouldFlatten to ?
- If shouldFlatten is
true , then- If depth = +∞, let newDepth be +∞.
- Else, let newDepth be depth - 1.
- Let elementLen be ?
LengthOfArrayLike (element). - Set targetIndex to ? FlattenIntoArray(target, element, elementLen, targetIndex, newDepth).
- Else,
- If targetIndex ≥ 253 - 1, throw a
TypeError exception. - Perform ?
CreateDataPropertyOrThrow (target, !ToString (𝔽 (targetIndex)), element). - Set targetIndex to targetIndex + 1.
- If targetIndex ≥ 253 - 1, throw a
- Let element be ?
- Set sourceIndex to sourceIndex +
1 𝔽.
- Let P be !
- Return targetIndex.
23.1.3.14 Array.prototype.flatMap ( mapperFunction [ , thisArg ] )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let sourceLen be ?
LengthOfArrayLike (O). - If
IsCallable (mapperFunction) isfalse , throw aTypeError exception. - Let A be ?
ArraySpeciesCreate (O, 0). - Perform ?
FlattenIntoArray (A, O, sourceLen, 0, 1, mapperFunction, thisArg). - Return A.
23.1.3.15 Array.prototype.forEach ( callback [ , thisArg ] )
callback should be a function that accepts three arguments. forEach calls callback once for each element present in the array, in ascending order. callback is called only for elements of the array which actually exist; it is not called for missing elements of the array.
If a thisArg parameter is provided, it will be used as the
callback is called with three arguments: the value of the element, the index of the element, and the object being traversed.
forEach does not directly mutate the object on which it is called but the object may be mutated by the calls to callback.
The range of elements processed by forEach is set before the first call to callback. Elements which are appended to the array after the call to forEach begins will not be visited by callback. If existing elements of the array are changed, their value as passed to callback will be the value at the time forEach visits them; elements that are deleted after the call to forEach begins and before being visited are not visited.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let k be 0.
- Repeat, while k < len,
- Return
undefined .
This method is intentionally generic; it does not require that its
23.1.3.16 Array.prototype.includes ( searchElement [ , fromIndex ] )
This method compares searchElement to the elements of the array, in ascending order, using the
The optional second argument fromIndex defaults to
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If len = 0, return
false . - Let n be ?
ToIntegerOrInfinity (fromIndex). Assert : If fromIndex isundefined , then n is 0.- If n = +∞, return
false . - Else if n = -∞, set n to 0.
- If n ≥ 0, then
- Let k be n.
- Else,
- Let k be len + n.
- If k < 0, set k to 0.
- Repeat, while k < len,
- Let elementK be ?
Get (O, !ToString (𝔽 (k))). - If
SameValueZero (searchElement, elementK) istrue , returntrue . - Set k to k + 1.
- Let elementK be ?
- Return
false .
This method is intentionally generic; it does not require that its
This method intentionally differs from the similar indexOf method in two ways. First, it uses the
23.1.3.17 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
This method compares searchElement to the elements of the array, in ascending order, using the
The optional second argument fromIndex defaults to
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If len = 0, return
-1 𝔽. - Let n be ?
ToIntegerOrInfinity (fromIndex). Assert : If fromIndex isundefined , then n is 0.- If n = +∞, return
-1 𝔽. - Else if n = -∞, set n to 0.
- If n ≥ 0, then
- Let k be n.
- Else,
- Let k be len + n.
- If k < 0, set k to 0.
- Repeat, while k < len,
- Let Pk be !
ToString (𝔽 (k)). - Let kPresent be ?
HasProperty (O, Pk). - If kPresent is
true , then- Let elementK be ?
Get (O, Pk). - If
IsStrictlyEqual (searchElement, elementK) istrue , return𝔽 (k).
- Let elementK be ?
- Set k to k + 1.
- Let Pk be !
- Return
-1 𝔽.
This method is intentionally generic; it does not require that its
23.1.3.18 Array.prototype.join ( separator )
This method converts the elements of the array to Strings, and then concatenates these Strings, separated by occurrences of the separator. If no separator is provided, a single comma is used as the separator.
It performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If separator is
undefined , let sep be"," . - Else, let sep be ?
ToString (separator). - Let R be the empty String.
- Let k be 0.
- Repeat, while k < len,
- If k > 0, set R to the
string-concatenation of R and sep. - Let element be ?
Get (O, !ToString (𝔽 (k))). - If element is neither
undefined nornull , then- Let S be ?
ToString (element). - Set R to the
string-concatenation of R and S.
- Let S be ?
- Set k to k + 1.
- If k > 0, set R to the
- Return R.
This method is intentionally generic; it does not require that its
23.1.3.19 Array.prototype.keys ( )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Return
CreateArrayIterator (O,key ).
23.1.3.20 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
This method compares searchElement to the elements of the array in descending order using the
The optional second argument fromIndex defaults to the array's length minus one (i.e. the whole array is searched). If it is greater than or equal to the length of the array, the whole array will be searched. If it is less than
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If len = 0, return
-1 𝔽. - If fromIndex is present, let n be ?
ToIntegerOrInfinity (fromIndex); else let n be len - 1. - If n = -∞, return
-1 𝔽. - If n ≥ 0, then
- Let k be
min (n, len - 1).
- Let k be
- Else,
- Let k be len + n.
- Repeat, while k ≥ 0,
- Let Pk be !
ToString (𝔽 (k)). - Let kPresent be ?
HasProperty (O, Pk). - If kPresent is
true , then- Let elementK be ?
Get (O, Pk). - If
IsStrictlyEqual (searchElement, elementK) istrue , return𝔽 (k).
- Let elementK be ?
- Set k to k - 1.
- Let Pk be !
- Return
-1 𝔽.
This method is intentionally generic; it does not require that its
23.1.3.21 Array.prototype.map ( callback [ , thisArg ] )
callback should be a function that accepts three arguments. map calls callback once for each element in the array, in ascending order, and constructs a new Array from the results. callback is called only for elements of the array which actually exist; it is not called for missing elements of the array.
If a thisArg parameter is provided, it will be used as the
callback is called with three arguments: the value of the element, the index of the element, and the object being traversed.
map does not directly mutate the object on which it is called but the object may be mutated by the calls to callback.
The range of elements processed by map is set before the first call to callback. Elements which are appended to the array after the call to map begins will not be visited by callback. If existing elements of the array are changed, their value as passed to callback will be the value at the time map visits them; elements that are deleted after the call to map begins and before being visited are not visited.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let A be ?
ArraySpeciesCreate (O, len). - Let k be 0.
- Repeat, while k < len,
- Let Pk be !
ToString (𝔽 (k)). - Let kPresent be ?
HasProperty (O, Pk). - If kPresent is
true , then- Let kValue be ?
Get (O, Pk). - Let mappedValue be ?
Call (callback, thisArg, « kValue,𝔽 (k), O »). - Perform ?
CreateDataPropertyOrThrow (A, Pk, mappedValue).
- Let kValue be ?
- Set k to k + 1.
- Let Pk be !
- Return A.
This method is intentionally generic; it does not require that its
23.1.3.22 Array.prototype.pop ( )
This method removes the last element of the array and returns it.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If len = 0, then
- Perform ?
Set (O,"length" ,+0 𝔽,true ). - Return
undefined .
- Perform ?
- Else,
This method is intentionally generic; it does not require that its
23.1.3.23 Array.prototype.push ( ...items )
This method appends the arguments to the end of the array, in the order in which they appear. It returns the new length of the array.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let argCount be the number of elements in items.
- If len + argCount > 253 - 1, throw a
TypeError exception. - For each element E of items, do
- Perform ?
Set (O,"length" ,𝔽 (len),true ). - Return
𝔽 (len).
The
This method is intentionally generic; it does not require that its
23.1.3.24 Array.prototype.reduce ( callback [ , initialValue ] )
callback should be a function that takes four arguments. reduce calls the callback, as a function, once for each element after the first element present in the array, in ascending order.
callback is called with four arguments: the previousValue (value from the previous call to callback), the currentValue (value of the current element), the currentIndex, and the object being traversed. The first time that callback is called, the previousValue and currentValue can be one of two values. If an initialValue was supplied in the call to reduce, then previousValue will be initialValue and currentValue will be the first value in the array. If no initialValue was supplied, then previousValue will be the first value in the array and currentValue will be the second. It is a
reduce does not directly mutate the object on which it is called but the object may be mutated by the calls to callback.
The range of elements processed by reduce is set before the first call to callback. Elements that are appended to the array after the call to reduce begins will not be visited by callback. If existing elements of the array are changed, their value as passed to callback will be the value at the time reduce visits them; elements that are deleted after the call to reduce begins and before being visited are not visited.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If
IsCallable (callback) isfalse , throw aTypeError exception. - If len = 0 and initialValue is not present, throw a
TypeError exception. - Let k be 0.
- Let accumulator be
undefined . - If initialValue is present, then
- Set accumulator to initialValue.
- Else,
- Let kPresent be
false . - Repeat, while kPresent is
false and k < len,- Let Pk be !
ToString (𝔽 (k)). - Set kPresent to ?
HasProperty (O, Pk). - If kPresent is
true , then- Set accumulator to ?
Get (O, Pk).
- Set accumulator to ?
- Set k to k + 1.
- Let Pk be !
- If kPresent is
false , throw aTypeError exception.
- Let kPresent be
- Repeat, while k < len,
- Return accumulator.
This method is intentionally generic; it does not require that its
23.1.3.25 Array.prototype.reduceRight ( callback [ , initialValue ] )
callback should be a function that takes four arguments. reduceRight calls the callback, as a function, once for each element after the first element present in the array, in descending order.
callback is called with four arguments: the previousValue (value from the previous call to callback), the currentValue (value of the current element), the currentIndex, and the object being traversed. The first time the function is called, the previousValue and currentValue can be one of two values. If an initialValue was supplied in the call to reduceRight, then previousValue will be initialValue and currentValue will be the last value in the array. If no initialValue was supplied, then previousValue will be the last value in the array and currentValue will be the second-to-last value. It is a
reduceRight does not directly mutate the object on which it is called but the object may be mutated by the calls to callback.
The range of elements processed by reduceRight is set before the first call to callback. Elements that are appended to the array after the call to reduceRight begins will not be visited by callback. If existing elements of the array are changed by callback, their value as passed to callback will be the value at the time reduceRight visits them; elements that are deleted after the call to reduceRight begins and before being visited are not visited.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If
IsCallable (callback) isfalse , throw aTypeError exception. - If len = 0 and initialValue is not present, throw a
TypeError exception. - Let k be len - 1.
- Let accumulator be
undefined . - If initialValue is present, then
- Set accumulator to initialValue.
- Else,
- Let kPresent be
false . - Repeat, while kPresent is
false and k ≥ 0,- Let Pk be !
ToString (𝔽 (k)). - Set kPresent to ?
HasProperty (O, Pk). - If kPresent is
true , then- Set accumulator to ?
Get (O, Pk).
- Set accumulator to ?
- Set k to k - 1.
- Let Pk be !
- If kPresent is
false , throw aTypeError exception.
- Let kPresent be
- Repeat, while k ≥ 0,
- Return accumulator.
This method is intentionally generic; it does not require that its
23.1.3.26 Array.prototype.reverse ( )
This method rearranges the elements of the array so as to reverse their order. It returns the reversed array.
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let middle be
floor (len / 2). - Let lower be 0.
- Repeat, while lower ≠ middle,
- Let upper be len - lower - 1.
- Let upperP be !
ToString (𝔽 (upper)). - Let lowerP be !
ToString (𝔽 (lower)). - Let lowerExists be ?
HasProperty (O, lowerP). - If lowerExists is
true , then- Let lowerValue be ?
Get (O, lowerP).
- Let lowerValue be ?
- Let upperExists be ?
HasProperty (O, upperP). - If upperExists is
true , then- Let upperValue be ?
Get (O, upperP).
- Let upperValue be ?
- If lowerExists is
true and upperExists istrue , then - Else if lowerExists is
false and upperExists istrue , then- Perform ?
Set (O, lowerP, upperValue,true ). - Perform ?
DeletePropertyOrThrow (O, upperP).
- Perform ?
- Else if lowerExists is
true and upperExists isfalse , then- Perform ?
DeletePropertyOrThrow (O, lowerP). - Perform ?
Set (O, upperP, lowerValue,true ).
- Perform ?
- Else,
Assert : lowerExists and upperExists are bothfalse .- NOTE: No action is required.
- Set lower to lower + 1.
- Return O.
This method is intentionally generic; it does not require that its
23.1.3.27 Array.prototype.shift ( )
This method removes the first element of the array and returns it.
It performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If len = 0, then
- Perform ?
Set (O,"length" ,+0 𝔽,true ). - Return
undefined .
- Perform ?
- Let first be ?
Get (O,"0" ). - Let k be 1.
- Repeat, while k < len,
- Let from be !
ToString (𝔽 (k)). - Let to be !
ToString (𝔽 (k - 1)). - Let fromPresent be ?
HasProperty (O, from). - If fromPresent is
true , then - Else,
Assert : fromPresent isfalse .- Perform ?
DeletePropertyOrThrow (O, to).
- Set k to k + 1.
- Let from be !
- Perform ?
DeletePropertyOrThrow (O, !ToString (𝔽 (len - 1))). - Perform ?
Set (O,"length" ,𝔽 (len - 1),true ). - Return first.
This method is intentionally generic; it does not require that its
23.1.3.28 Array.prototype.slice ( start, end )
This method returns an array containing the elements of the array from element start up to, but not including, element end (or through the end of the array if end is
It performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let k be 0.
- Else if relativeStart < 0, let k be
max (len + relativeStart, 0). - Else, let k be
min (relativeStart, len). - If end is
undefined , let relativeEnd be len; else let relativeEnd be ?ToIntegerOrInfinity (end). - If relativeEnd = -∞, let final be 0.
- Else if relativeEnd < 0, let final be
max (len + relativeEnd, 0). - Else, let final be
min (relativeEnd, len). - Let count be
max (final - k, 0). - Let A be ?
ArraySpeciesCreate (O, count). - Let n be 0.
- Repeat, while k < final,
- Let Pk be !
ToString (𝔽 (k)). - Let kPresent be ?
HasProperty (O, Pk). - If kPresent is
true , then- Let kValue be ?
Get (O, Pk). - Perform ?
CreateDataPropertyOrThrow (A, !ToString (𝔽 (n)), kValue).
- Let kValue be ?
- Set k to k + 1.
- Set n to n + 1.
- Let Pk be !
- Perform ?
Set (A,"length" ,𝔽 (n),true ). - Return A.
The explicit setting of the
This method is intentionally generic; it does not require that its
23.1.3.29 Array.prototype.some ( callback [ , thisArg ] )
callback should be a function that accepts three arguments and returns a value that is coercible to a Boolean value. some calls callback once for each element present in the array, in ascending order, until it finds one where callback returns some immediately returns some returns
If a thisArg parameter is provided, it will be used as the
callback is called with three arguments: the value of the element, the index of the element, and the object being traversed.
some does not directly mutate the object on which it is called but the object may be mutated by the calls to callback.
The range of elements processed by some is set before the first call to callback. Elements that are appended to the array after the call to some begins will not be visited by callback. If existing elements of the array are changed, their value as passed to callback will be the value at the time that some visits them; elements that are deleted after the call to some begins and before being visited are not visited. some acts like the "exists" quantifier in mathematics. In particular, for an empty array, it returns
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let k be 0.
- Repeat, while k < len,
- Return
false .
This method is intentionally generic; it does not require that its
23.1.3.30 Array.prototype.sort ( comparator )
This method sorts the elements of this array. If comparator is not
It performs the following steps when called:
- If comparator is not
undefined andIsCallable (comparator) isfalse , throw aTypeError exception. - Let obj be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (obj). - Let SortCompare be a new
Abstract Closure with parameters (x, y) that captures comparator and performs the following steps when called:- Return ?
CompareArrayElements (x, y, comparator).
- Return ?
- Let sortedList be ?
SortIndexedProperties (obj, len, SortCompare,skip-holes ). - Let itemCount be the number of elements in sortedList.
- Let j be 0.
- Repeat, while j < itemCount,
- NOTE: The call to
SortIndexedProperties in step5 usesskip-holes . The remaining indices are deleted to preserve the number of holes that were detected and excluded from the sort. - Repeat, while j < len,
- Perform ?
DeletePropertyOrThrow (obj, !ToString (𝔽 (j))). - Set j to j + 1.
- Perform ?
- Return obj.
Because non-existent property values always compare greater than
Method calls performed by the
This method is intentionally generic; it does not require that its
23.1.3.30.1 SortIndexedProperties ( obj, len, SortCompare, holes )
The abstract operation SortIndexedProperties takes arguments obj (an Object), len (a non-negative
- Let items be a new empty
List . - Let k be 0.
- Repeat, while k < len,
- Let Pk be !
ToString (𝔽 (k)). - If holes is
skip-holes , then- Let kRead be ?
HasProperty (obj, Pk).
- Let kRead be ?
- Else,
Assert : holes isread-through-holes .- Let kRead be
true .
- If kRead is
true , then- Let kValue be ?
Get (obj, Pk). - Append kValue to items.
- Let kValue be ?
- Set k to k + 1.
- Let Pk be !
- Sort items using an
implementation-defined sequence ofcalls to SortCompare . If any such call returns anabrupt completion , stop before performing any further calls to SortCompare and return thatCompletion Record . - Return items.
The sort order is the ordering of items after completion of step
Unless the
-
There must be some mathematical permutation π of the non-negative
integers less than itemCount, such that for every non-negativeinteger j less than itemCount, the elementold[j] is exactly the same asnew[π(j)] . -
Then for all non-negative
integers j and k, each less than itemCount, if , thenℝ (SortCompare(old[j], old[k])) < 0π(j) < π(k) . -
And for all non-negative
integers j and k such that j < k < itemCount, if , thenℝ (SortCompare(old[j], old[k])) = 0π(j) < π(k) ; i.e., the sort is stable.
Here the notation
An abstract closure or function comparator is a consistent comparator for a set of values S if all of the requirements below are met for all values a, b, and c (possibly the same value) in the set S: The notation
-
Calling comparator(a, b) always returns the same value v when given a specific pair of values a and b as its two arguments. Furthermore, v
is a Number , and v is notNaN . Note that this implies that exactly one of a <C b, a =C b, and a >C b will be true for a given pair of a and b. - Calling comparator(a, b) does not modify obj or any object on obj's prototype chain.
- a =C a (reflexivity)
- If a =C b, then b =C a (symmetry)
- If a =C b and b =C c, then a =C c (transitivity of =C)
- If a <C b and b <C c, then a <C c (transitivity of <C)
- If a >C b and b >C c, then a >C c (transitivity of >C)
The above conditions are necessary and sufficient to ensure that comparator divides the set S into equivalence classes and that these equivalence classes are totally ordered.
23.1.3.30.2 CompareArrayElements ( x, y, comparator )
The abstract operation CompareArrayElements takes arguments x (an
- If x and y are both
undefined , return+0 𝔽. - If x is
undefined , return1 𝔽. - If y is
undefined , return-1 𝔽. - If comparator is not
undefined , then - Let xString be ?
ToString (x). - Let yString be ?
ToString (y). - Let xSmaller be !
IsLessThan (xString, yString,true ). - If xSmaller is
true , return-1 𝔽. - Let ySmaller be !
IsLessThan (yString, xString,true ). - If ySmaller is
true , return1 𝔽. - Return
+0 𝔽.
23.1.3.31 Array.prototype.splice ( start, deleteCount, ...items )
This method deletes the deleteCount elements of the array starting at
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let actualStart be 0.
- Else if relativeStart < 0, let actualStart be
max (len + relativeStart, 0). - Else, let actualStart be
min (relativeStart, len). - Let itemCount be the number of elements in items.
- If start is not present, then
- Let actualDeleteCount be 0.
- Else if deleteCount is not present, then
- Let actualDeleteCount be len - actualStart.
- Else,
- Let dc be ?
ToIntegerOrInfinity (deleteCount). - Let actualDeleteCount be the result of
clamping dc between 0 and len - actualStart.
- Let dc be ?
- If len + itemCount - actualDeleteCount > 253 - 1, throw a
TypeError exception. - Let A be ?
ArraySpeciesCreate (O, actualDeleteCount). - Let k be 0.
- Repeat, while k < actualDeleteCount,
- Let from be !
ToString (𝔽 (actualStart + k)). - If ?
HasProperty (O, from) istrue , then- Let fromValue be ?
Get (O, from). - Perform ?
CreateDataPropertyOrThrow (A, !ToString (𝔽 (k)), fromValue).
- Let fromValue be ?
- Set k to k + 1.
- Let from be !
- Perform ?
Set (A,"length" ,𝔽 (actualDeleteCount),true ). - If itemCount < actualDeleteCount, then
- Set k to actualStart.
- Repeat, while k < (len - actualDeleteCount),
- Let from be !
ToString (𝔽 (k + actualDeleteCount)). - Let to be !
ToString (𝔽 (k + itemCount)). - If ?
HasProperty (O, from) istrue , then - Else,
- Perform ?
DeletePropertyOrThrow (O, to).
- Perform ?
- Set k to k + 1.
- Let from be !
- Set k to len.
- Repeat, while k > (len - actualDeleteCount + itemCount),
- Perform ?
DeletePropertyOrThrow (O, !ToString (𝔽 (k - 1))). - Set k to k - 1.
- Perform ?
- Else if itemCount > actualDeleteCount, then
- Set k to (len - actualDeleteCount).
- Repeat, while k > actualStart,
- Let from be !
ToString (𝔽 (k + actualDeleteCount - 1)). - Let to be !
ToString (𝔽 (k + itemCount - 1)). - If ?
HasProperty (O, from) istrue , then - Else,
- Perform ?
DeletePropertyOrThrow (O, to).
- Perform ?
- Set k to k - 1.
- Let from be !
- Set k to actualStart.
- For each element E of items, do
- Perform ?
Set (O,"length" ,𝔽 (len - actualDeleteCount + itemCount),true ). - Return A.
This method is intentionally generic; it does not require that its
23.1.3.32 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
An ECMAScript implementation that includes the ECMA-402 Internationalization API must implement this method as specified in the ECMA-402 specification. If an ECMAScript implementation does not include the ECMA-402 API the following specification of this method is used.
The first edition of ECMA-402 did not include a replacement specification for this method.
The meanings of the optional parameters to this method are defined in the ECMA-402 specification; implementations that do not include ECMA-402 support must not use those parameter positions for anything else.
This method performs the following steps when called:
- Let array be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (array). - Let separator be the
implementation-defined list-separator String value appropriate for thehost environment 's current locale (such as", " ). - Let R be the empty String.
- Let k be 0.
- Repeat, while k < len,
- If k > 0, set R to the
string-concatenation of R and separator. - Let element be ?
Get (array, !ToString (𝔽 (k))). - If element is neither
undefined nornull , then- Let S be ?
ToString (?Invoke (element,"toLocaleString" )). - Set R to the
string-concatenation of R and S.
- Let S be ?
- Set k to k + 1.
- If k > 0, set R to the
- Return R.
This method converts the elements of the array to Strings using their toLocaleString methods, and then concatenates these Strings, separated by occurrences of an toString except that it is intended to yield a locale-sensitive result corresponding with conventions of the
This method is intentionally generic; it does not require that its
23.1.3.33 Array.prototype.toReversed ( )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let A be ?
ArrayCreate (len). - Let k be 0.
- Repeat, while k < len,
- Return A.
23.1.3.34 Array.prototype.toSorted ( comparator )
This method performs the following steps when called:
- If comparator is not
undefined andIsCallable (comparator) isfalse , throw aTypeError exception. - Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let A be ?
ArrayCreate (len). - Let SortCompare be a new
Abstract Closure with parameters (x, y) that captures comparator and performs the following steps when called:- Return ?
CompareArrayElements (x, y, comparator).
- Return ?
- Let sortedList be ?
SortIndexedProperties (O, len, SortCompare,read-through-holes ). - Let j be 0.
- Repeat, while j < len,
- Perform !
CreateDataPropertyOrThrow (A, !ToString (𝔽 (j)), sortedList[j]). - Set j to j + 1.
- Perform !
- Return A.
23.1.3.35 Array.prototype.toSpliced ( start, skipCount, ...items )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let actualStart be 0.
- Else if relativeStart < 0, let actualStart be
max (len + relativeStart, 0). - Else, let actualStart be
min (relativeStart, len). - Let insertCount be the number of elements in items.
- If start is not present, then
- Let actualSkipCount be 0.
- Else if skipCount is not present, then
- Let actualSkipCount be len - actualStart.
- Else,
- Let sc be ?
ToIntegerOrInfinity (skipCount). - Let actualSkipCount be the result of
clamping sc between 0 and len - actualStart.
- Let sc be ?
- Let newLen be len + insertCount - actualSkipCount.
- If newLen > 253 - 1, throw a
TypeError exception. - Let A be ?
ArrayCreate (newLen). - Let i be 0.
- Let r be actualStart + actualSkipCount.
- Repeat, while i < actualStart,
- Let Pi be !
ToString (𝔽 (i)). - Let iValue be ?
Get (O, Pi). - Perform !
CreateDataPropertyOrThrow (A, Pi, iValue). - Set i to i + 1.
- Let Pi be !
- For each element E of items, do
- Let Pi be !
ToString (𝔽 (i)). - Perform !
CreateDataPropertyOrThrow (A, Pi, E). - Set i to i + 1.
- Let Pi be !
- Repeat, while i < newLen,
- Return A.
23.1.3.36 Array.prototype.toString ( )
This method performs the following steps when called:
- Let array be ?
ToObject (this value). - Let func be ?
Get (array,"join" ). - If
IsCallable (func) isfalse , set func to the intrinsic function%Object.prototype.toString% . - Return ?
Call (func, array).
This method is intentionally generic; it does not require that its
23.1.3.37 Array.prototype.unshift ( ...items )
This method prepends the arguments to the start of the array, such that their order within the array is the same as the order in which they appear in the argument list.
It performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let argCount be the number of elements in items.
- If argCount > 0, then
- If len + argCount > 253 - 1, throw a
TypeError exception. - Let k be len.
- Repeat, while k > 0,
- Let from be !
ToString (𝔽 (k - 1)). - Let to be !
ToString (𝔽 (k + argCount - 1)). - Let fromPresent be ?
HasProperty (O, from). - If fromPresent is
true , then - Else,
Assert : fromPresent isfalse .- Perform ?
DeletePropertyOrThrow (O, to).
- Set k to k - 1.
- Let from be !
- Let j be
+0 𝔽. - For each element E of items, do
- If len + argCount > 253 - 1, throw a
- Perform ?
Set (O,"length" ,𝔽 (len + argCount),true ). - Return
𝔽 (len + argCount).
The
This method is intentionally generic; it does not require that its
23.1.3.38 Array.prototype.values ( )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Return
CreateArrayIterator (O,value ).
23.1.3.39 Array.prototype.with ( index, value )
This method performs the following steps when called:
- Let O be ?
ToObject (this value). - Let len be ?
LengthOfArrayLike (O). - Let relativeIndex be ?
ToIntegerOrInfinity (index). - If relativeIndex ≥ 0, let actualIndex be relativeIndex.
- Else, let actualIndex be len + relativeIndex.
- If actualIndex ≥ len or actualIndex < 0, throw a
RangeError exception. - Let A be ?
ArrayCreate (len). - Let k be 0.
- Repeat, while k < len,
- Let Pk be !
ToString (𝔽 (k)). - If k = actualIndex, let fromValue be value.
- Else, let fromValue be ?
Get (O, Pk). - Perform !
CreateDataPropertyOrThrow (A, Pk, fromValue). - Set k to k + 1.
- Let Pk be !
- Return A.
23.1.3.40 Array.prototype [ %Symbol.iterator% ] ( )
The initial value of the
23.1.3.41 Array.prototype [ %Symbol.unscopables% ]
The initial value of the
- Let unscopableList be
OrdinaryObjectCreate (null ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"at" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"copyWithin" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"entries" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"fill" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"find" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"findIndex" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"findLast" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"findLastIndex" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"flat" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"flatMap" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"includes" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"keys" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"toReversed" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"toSorted" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"toSpliced" ,true ). - Perform !
CreateDataPropertyOrThrow (unscopableList,"values" ,true ). - Return unscopableList.
This property has the attributes { [[Writable]]:
The own property names of this object are property names that were not included as standard properties of Array.prototype prior to the ECMAScript 2015 specification. These names are ignored for with statement binding purposes in order to preserve the behaviour of existing code that might use one of these names as a binding in an outer scope that is shadowed by a with statement whose binding object is an Array.
The reason that
23.1.4 Properties of Array Instances
Array instances are
Array instances have a
23.1.4.1 length
The
The
Reducing the value of the
23.1.5 Array Iterator Objects
An Array Iterator is an object that represents a specific iteration over some specific Array instance object. There is not a named
23.1.5.1 CreateArrayIterator ( array, kind )
The abstract operation CreateArrayIterator takes arguments array (an Object) and kind (
- Let iterator be
OrdinaryObjectCreate (%ArrayIteratorPrototype% , « [[IteratedArrayLike]], [[ArrayLikeNextIndex]], [[ArrayLikeIterationKind]] »). - Set iterator.[[IteratedArrayLike]] to array.
- Set iterator.[[ArrayLikeNextIndex]] to 0.
- Set iterator.[[ArrayLikeIterationKind]] to kind.
- Return iterator.
23.1.5.2 The %ArrayIteratorPrototype% Object
The
- has properties that are inherited by all
Array Iterator objects . - is an
ordinary object . - has a [[Prototype]] internal slot whose value is
%Iterator.prototype% . - has the following properties:
23.1.5.2.1 %ArrayIteratorPrototype% .next ( )
- Let O be the
this value. - If O
is not an Object , throw aTypeError exception. - If O does not have all of the internal slots of an
Array Iterator Instance (23.1.5.2.3 ), throw aTypeError exception. - Let array be O.[[IteratedArrayLike]].
- If array is
undefined , returnCreateIteratorResultObject (undefined ,true ). - Let index be O.[[ArrayLikeNextIndex]].
- Let kind be O.[[ArrayLikeIterationKind]].
- If array has a [[TypedArrayName]] internal slot, then
- Let taRecord be
MakeTypedArrayWithBufferWitnessRecord (array,seq-cst ). - If
IsTypedArrayOutOfBounds (taRecord) istrue , throw aTypeError exception. - Let len be
TypedArrayLength (taRecord).
- Let taRecord be
- Else,
- Let len be ?
LengthOfArrayLike (array).
- Let len be ?
- If index ≥ len, then
- Set O.[[IteratedArrayLike]] to
undefined . - Return
CreateIteratorResultObject (undefined ,true ).
- Set O.[[IteratedArrayLike]] to
- Set O.[[ArrayLikeNextIndex]] to index + 1.
- Let indexNumber be
𝔽 (index). - If kind is
key , then- Let result be indexNumber.
- Else,
- Let elementKey be !
ToString (indexNumber). - Let elementValue be ?
Get (array, elementKey). - If kind is
value , then- Let result be elementValue.
- Else,
Assert : kind iskey+value .- Let result be
CreateArrayFromList (« indexNumber, elementValue »).
- Let elementKey be !
- Return
CreateIteratorResultObject (result,false ).
23.1.5.2.2 %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]
The initial value of the
This property has the attributes { [[Writable]]:
23.1.5.2.3 Properties of Array Iterator Instances
| Internal Slot | Description |
|---|---|
| [[IteratedArrayLike]] |
The |
| [[ArrayLikeNextIndex]] |
The |
| [[ArrayLikeIterationKind]] |
A String value that identifies what is returned for each element of the iteration. The possible values are: |
23.2 TypedArray Objects
A TypedArray presents an array-like view of an underlying binary data buffer (
|
|
Element Type | Element Size | Conversion Operation | Description |
|---|---|---|---|---|
|
Int8Array |
|
1 |
|
8-bit two's complement signed |
|
Uint8Array |
|
1 |
|
8-bit unsigned |
|
Uint8ClampedArray |
|
1 |
|
8-bit unsigned |
|
Int16Array |
|
2 |
|
16-bit two's complement signed |
|
Uint16Array |
|
2 |
|
16-bit unsigned |
|
Int32Array |
|
4 |
|
32-bit two's complement signed |
|
Uint32Array |
|
4 |
|
32-bit unsigned |
|
BigInt64Array |
|
8 |
|
64-bit two's complement signed |
|
BigUint64Array |
|
8 |
|
64-bit unsigned |
|
Float16Array |
|
2 | 16-bit IEEE floating point | |
|
Float32Array |
|
4 | 32-bit IEEE floating point | |
|
Float64Array |
|
8 | 64-bit IEEE floating point |
In the definitions below, references to TypedArray should be replaced with the appropriate
23.2.1 The %TypedArray% Intrinsic Object
The
- is a
constructor function object that all of the TypedArrayconstructor objects inherit from. - along with its corresponding prototype object, provides common properties that are inherited by all TypedArray
constructors and their instances. - does not have a global name or appear as a property of the
global object . - acts as the abstract superclass of the various TypedArray
constructors . - will throw an error when invoked, because it is an abstract class
constructor . The TypedArrayconstructors do not perform asupercall to it.
23.2.1.1 %TypedArray% ( )
This function performs the following steps when called:
- Throw a
TypeError exception.
The
23.2.2 Properties of the %TypedArray% Intrinsic Object
The
- has a [[Prototype]] internal slot whose value is
%Function.prototype% . - has a
"name" property whose value is"TypedArray" . - has the following properties:
23.2.2.1 %TypedArray% .from ( source [ , mapper [ , thisArg ] ] )
This method performs the following steps when called:
- Let C be the
this value. - If
IsConstructor (C) isfalse , throw aTypeError exception. - If mapper is
undefined , then- Let mapping be
false .
- Let mapping be
- Else,
- If
IsCallable (mapper) isfalse , throw aTypeError exception. - Let mapping be
true .
- If
- Let usingIterator be ?
GetMethod (source,%Symbol.iterator% ). - If usingIterator is not
undefined , then- Let values be ?
IteratorToList (?GetIteratorFromMethod (source, usingIterator)). - Let len be the number of elements in values.
- Let targetObj be ?
TypedArrayCreateFromConstructor (C, «𝔽 (len) »). - Let k be 0.
- Repeat, while k < len,
Assert : values is now an emptyList .- Return targetObj.
- Let values be ?
- NOTE: source is not an
iterable object , so assume it is already anarray-like object . - Let arrayLike be !
ToObject (source). - Let len be ?
LengthOfArrayLike (arrayLike). - Let targetObj be ?
TypedArrayCreateFromConstructor (C, «𝔽 (len) »). - Let k be 0.
- Repeat, while k < len,
- Return targetObj.
23.2.2.2 %TypedArray% .of ( ...items )
This method performs the following steps when called:
- Let len be the number of elements in items.
- Let C be the
this value. - If
IsConstructor (C) isfalse , throw aTypeError exception. - Let newObj be ?
TypedArrayCreateFromConstructor (C, «𝔽 (len) »). - Let k be 0.
- Repeat, while k < len,
- Return newObj.
23.2.2.3 %TypedArray% .prototype
The initial value of .prototype is the
This property has the attributes { [[Writable]]:
23.2.2.4 get %TypedArray% [ %Symbol.species% ]
[%Symbol.species%] is an
- Return the
this value.
The value of the
23.2.3 Properties of the %TypedArray% Prototype Object
The
- has a [[Prototype]] internal slot whose value is
%Object.prototype% . - is
%TypedArray.prototype% . - is an
ordinary object . - does not have a [[ViewedArrayBuffer]] or any other of the internal slots that are specific to TypedArray instance objects.
23.2.3.1 %TypedArray% .prototype.at ( index )
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let relativeIndex be ?
ToIntegerOrInfinity (index). - If relativeIndex ≥ 0, then
- Let k be relativeIndex.
- Else,
- Let k be len + relativeIndex.
- If k < 0 or k ≥ len, return
undefined . - Return !
Get (O, !ToString (𝔽 (k))).
23.2.3.2 get %TypedArray% .prototype.buffer
.prototype.buffer is an
- Let O be the
this value. - Perform ?
RequireInternalSlot (O, [[TypedArrayName]]). Assert : O has a [[ViewedArrayBuffer]] internal slot.- Let buffer be O.[[ViewedArrayBuffer]].
- Return buffer.
23.2.3.3 get %TypedArray% .prototype.byteLength
.prototype.byteLength is an
- Let O be the
this value. - Perform ?
RequireInternalSlot (O, [[TypedArrayName]]). Assert : O has a [[ViewedArrayBuffer]] internal slot.- Let taRecord be
MakeTypedArrayWithBufferWitnessRecord (O,seq-cst ). - Let size be
TypedArrayByteLength (taRecord). - Return
𝔽 (size).
23.2.3.4 get %TypedArray% .prototype.byteOffset
.prototype.byteOffset is an
- Let O be the
this value. - Perform ?
RequireInternalSlot (O, [[TypedArrayName]]). Assert : O has a [[ViewedArrayBuffer]] internal slot.- Let taRecord be
MakeTypedArrayWithBufferWitnessRecord (O,seq-cst ). - If
IsTypedArrayOutOfBounds (taRecord) istrue , return+0 𝔽. - Let offset be O.[[ByteOffset]].
- Return
𝔽 (offset).
23.2.3.5 %TypedArray% .prototype.constructor
The initial value of .prototype.constructor is
23.2.3.6 %TypedArray% .prototype.copyWithin ( target, start [ , end ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.copyWithin as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let relativeTarget be ?
ToIntegerOrInfinity (target). - If relativeTarget = -∞, let targetIndex be 0.
- Else if relativeTarget < 0, let targetIndex be
max (len + relativeTarget, 0). - Else, let targetIndex be
min (relativeTarget, len). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let startIndex be 0.
- Else if relativeStart < 0, let startIndex be
max (len + relativeStart, 0). - Else, let startIndex be
min (relativeStart, len). - If end is
undefined , let relativeEnd be len; else let relativeEnd be ?ToIntegerOrInfinity (end). - If relativeEnd = -∞, let endIndex be 0.
- Else if relativeEnd < 0, let endIndex be
max (len + relativeEnd, 0). - Else, let endIndex be
min (relativeEnd, len). - Let count be
min (endIndex - startIndex, len - targetIndex). - If count > 0, then
- NOTE: The copying must be performed in a manner that preserves the bit-level encoding of the source data.
- Let buffer be O.[[ViewedArrayBuffer]].
- Set taRecord to
MakeTypedArrayWithBufferWitnessRecord (O,seq-cst ). - If
IsTypedArrayOutOfBounds (taRecord) istrue , throw aTypeError exception. - Set len to
TypedArrayLength (taRecord). - Let elementSize be
TypedArrayElementSize (O). - Let byteOffset be O.[[ByteOffset]].
- Let bufferByteLimit be (len × elementSize) + byteOffset.
- Let toByteIndex be (targetIndex × elementSize) + byteOffset.
- Let fromByteIndex be (startIndex × elementSize) + byteOffset.
- Let countBytes be count × elementSize.
- If fromByteIndex < toByteIndex and toByteIndex < fromByteIndex + countBytes, then
- Let direction be -1.
- Set fromByteIndex to fromByteIndex + countBytes - 1.
- Set toByteIndex to toByteIndex + countBytes - 1.
- Else,
- Let direction be 1.
- Repeat, while countBytes > 0,
- If fromByteIndex < bufferByteLimit and toByteIndex < bufferByteLimit, then
- Let value be
GetValueFromBuffer (buffer, fromByteIndex,uint8 ,true ,unordered ). - Perform
SetValueInBuffer (buffer, toByteIndex,uint8 , value,true ,unordered ). - Set fromByteIndex to fromByteIndex + direction.
- Set toByteIndex to toByteIndex + direction.
- Set countBytes to countBytes - 1.
- Let value be
- Else,
- Set countBytes to 0.
- If fromByteIndex < bufferByteLimit and toByteIndex < bufferByteLimit, then
- Return O.
23.2.3.7 %TypedArray% .prototype.entries ( )
This method performs the following steps when called:
- Let O be the
this value. - Perform ?
ValidateTypedArray (O,seq-cst ). - Return
CreateArrayIterator (O,key+value ).
23.2.3.8 %TypedArray% .prototype.every ( callback [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.every as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let k be 0.
- Repeat, while k < len,
- Return
true .
This method is not generic. The
23.2.3.9 %TypedArray% .prototype.fill ( value [ , start [ , end ] ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.fill as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If O.[[ContentType]] is
bigint , set value to ?ToBigInt (value). - Otherwise, set value to ?
ToNumber (value). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let startIndex be 0.
- Else if relativeStart < 0, let startIndex be
max (len + relativeStart, 0). - Else, let startIndex be
min (relativeStart, len). - If end is
undefined , let relativeEnd be len; else let relativeEnd be ?ToIntegerOrInfinity (end). - If relativeEnd = -∞, let endIndex be 0.
- Else if relativeEnd < 0, let endIndex be
max (len + relativeEnd, 0). - Else, let endIndex be
min (relativeEnd, len). - Set taRecord to
MakeTypedArrayWithBufferWitnessRecord (O,seq-cst ). - If
IsTypedArrayOutOfBounds (taRecord) istrue , throw aTypeError exception. - Set len to
TypedArrayLength (taRecord). - Set endIndex to
min (endIndex, len). - Let k be startIndex.
- Repeat, while k < endIndex,
- Return O.
23.2.3.10 %TypedArray% .prototype.filter ( callback [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.filter as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let kept be a new empty
List . - Let captured be 0.
- Let k be 0.
- Repeat, while k < len,
- Let A be ?
TypedArraySpeciesCreate (O, «𝔽 (captured) »). - Let n be 0.
- For each element e of kept, do
- Return A.
This method is not generic. The
23.2.3.11 %TypedArray% .prototype.find ( predicate [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.find as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let findRec be ?
FindViaPredicate (O, len,ascending , predicate, thisArg). - Return findRec.[[Value]].
This method is not generic. The
23.2.3.12 %TypedArray% .prototype.findIndex ( predicate [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.findIndex as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let findRec be ?
FindViaPredicate (O, len,ascending , predicate, thisArg). - Return findRec.[[Index]].
This method is not generic. The
23.2.3.13 %TypedArray% .prototype.findLast ( predicate [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.findLast as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let findRec be ?
FindViaPredicate (O, len,descending , predicate, thisArg). - Return findRec.[[Value]].
This method is not generic. The
23.2.3.14 %TypedArray% .prototype.findLastIndex ( predicate [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.findLastIndex as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let findRec be ?
FindViaPredicate (O, len,descending , predicate, thisArg). - Return findRec.[[Index]].
This method is not generic. The
23.2.3.15 %TypedArray% .prototype.forEach ( callback [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.forEach as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let k be 0.
- Repeat, while k < len,
- Return
undefined .
This method is not generic. The
23.2.3.16 %TypedArray% .prototype.includes ( searchElement [ , fromIndex ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.includes as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If len = 0, return
false . - Let n be ?
ToIntegerOrInfinity (fromIndex). Assert : If fromIndex isundefined , then n is 0.- If n = +∞, return
false . - Else if n = -∞, set n to 0.
- If n ≥ 0, then
- Let k be n.
- Else,
- Let k be len + n.
- If k < 0, set k to 0.
- Repeat, while k < len,
- Let elementK be !
Get (O, !ToString (𝔽 (k))). - If
SameValueZero (searchElement, elementK) istrue , returntrue . - Set k to k + 1.
- Let elementK be !
- Return
false .
This method is not generic. The
23.2.3.17 %TypedArray% .prototype.indexOf ( searchElement [ , fromIndex ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.indexOf as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If len = 0, return
-1 𝔽. - Let n be ?
ToIntegerOrInfinity (fromIndex). Assert : If fromIndex isundefined , then n is 0.- If n = +∞, return
-1 𝔽. - Else if n = -∞, set n to 0.
- If n ≥ 0, then
- Let k be n.
- Else,
- Let k be len + n.
- If k < 0, set k to 0.
- Repeat, while k < len,
- Let Pk be !
ToString (𝔽 (k)). - Let kPresent be !
HasProperty (O, Pk). - If kPresent is
true , then- Let elementK be !
Get (O, Pk). - If
IsStrictlyEqual (searchElement, elementK) istrue , return𝔽 (k).
- Let elementK be !
- Set k to k + 1.
- Let Pk be !
- Return
-1 𝔽.
This method is not generic. The
23.2.3.18 %TypedArray% .prototype.join ( separator )
The interpretation and use of the arguments of this method are the same as for Array.prototype.join as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If separator is
undefined , let sep be"," . - Else, let sep be ?
ToString (separator). - Let R be the empty String.
- Let k be 0.
- Repeat, while k < len,
- If k > 0, set R to the
string-concatenation of R and sep. - Let element be !
Get (O, !ToString (𝔽 (k))). - If element is not
undefined , then- Let S be !
ToString (element). - Set R to the
string-concatenation of R and S.
- Let S be !
- Set k to k + 1.
- If k > 0, set R to the
- Return R.
This method is not generic. The
23.2.3.19 %TypedArray% .prototype.keys ( )
This method performs the following steps when called:
- Let O be the
this value. - Perform ?
ValidateTypedArray (O,seq-cst ). - Return
CreateArrayIterator (O,key ).
23.2.3.20 %TypedArray% .prototype.lastIndexOf ( searchElement [ , fromIndex ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.lastIndexOf as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If len = 0, return
-1 𝔽. - If fromIndex is present, let n be ?
ToIntegerOrInfinity (fromIndex); else let n be len - 1. - If n = -∞, return
-1 𝔽. - If n ≥ 0, then
- Let k be
min (n, len - 1).
- Let k be
- Else,
- Let k be len + n.
- Repeat, while k ≥ 0,
- Let Pk be !
ToString (𝔽 (k)). - Let kPresent be !
HasProperty (O, Pk). - If kPresent is
true , then- Let elementK be !
Get (O, Pk). - If
IsStrictlyEqual (searchElement, elementK) istrue , return𝔽 (k).
- Let elementK be !
- Set k to k - 1.
- Let Pk be !
- Return
-1 𝔽.
This method is not generic. The
23.2.3.21 get %TypedArray% .prototype.length
.prototype.length is an
- Let O be the
this value. - Perform ?
RequireInternalSlot (O, [[TypedArrayName]]). Assert : O has [[ViewedArrayBuffer]] and [[ArrayLength]] internal slots.- Let taRecord be
MakeTypedArrayWithBufferWitnessRecord (O,seq-cst ). - If
IsTypedArrayOutOfBounds (taRecord) istrue , return+0 𝔽. - Let length be
TypedArrayLength (taRecord). - Return
𝔽 (length).
This function is not generic. The
23.2.3.22 %TypedArray% .prototype.map ( callback [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.map as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let A be ?
TypedArraySpeciesCreate (O, «𝔽 (len) »). - Let k be 0.
- Repeat, while k < len,
- Return A.
This method is not generic. The
23.2.3.23 %TypedArray% .prototype.reduce ( callback [ , initialValue ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.reduce as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If
IsCallable (callback) isfalse , throw aTypeError exception. - If len = 0 and initialValue is not present, throw a
TypeError exception. - Let k be 0.
- Let accumulator be
undefined . - If initialValue is present, then
- Set accumulator to initialValue.
- Else,
- Repeat, while k < len,
- Return accumulator.
This method is not generic. The
23.2.3.24 %TypedArray% .prototype.reduceRight ( callback [ , initialValue ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.reduceRight as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If
IsCallable (callback) isfalse , throw aTypeError exception. - If len = 0 and initialValue is not present, throw a
TypeError exception. - Let k be len - 1.
- Let accumulator be
undefined . - If initialValue is present, then
- Set accumulator to initialValue.
- Else,
- Repeat, while k ≥ 0,
- Return accumulator.
This method is not generic. The
23.2.3.25 %TypedArray% .prototype.reverse ( )
The interpretation and use of the arguments of this method are the same as for Array.prototype.reverse as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let middle be
floor (len / 2). - Let lower be 0.
- Repeat, while lower ≠ middle,
- Return O.
This method is not generic. The
23.2.3.26 %TypedArray% .prototype.set ( source [ , offset ] )
This method sets multiple values in this TypedArray, reading the values from source. The details differ based upon the type of source. The optional offset value indicates the first element index in this TypedArray where values are written. If omitted, it is assumed to be 0.
It performs the following steps when called:
- Let target be the
this value. - Perform ?
RequireInternalSlot (target, [[TypedArrayName]]). Assert : target has a [[ViewedArrayBuffer]] internal slot.- Let targetOffset be ?
ToIntegerOrInfinity (offset). - If targetOffset < 0, throw a
RangeError exception. - If source
is an Object that has a [[TypedArrayName]] internal slot, then- Perform ?
SetTypedArrayFromTypedArray (target, targetOffset, source).
- Perform ?
- Else,
- Perform ?
SetTypedArrayFromArrayLike (target, targetOffset, source).
- Perform ?
- Return
undefined .
This method is not generic. The
23.2.3.26.1 SetTypedArrayFromTypedArray ( target, targetOffset, source )
The abstract operation SetTypedArrayFromTypedArray takes arguments target (a
- Let targetBuffer be target.[[ViewedArrayBuffer]].
- Let targetRecord be
MakeTypedArrayWithBufferWitnessRecord (target,seq-cst ). - If
IsTypedArrayOutOfBounds (targetRecord) istrue , throw aTypeError exception. - Let targetLength be
TypedArrayLength (targetRecord). - Let srcBuffer be source.[[ViewedArrayBuffer]].
- Let srcRecord be
MakeTypedArrayWithBufferWitnessRecord (source,seq-cst ). - If
IsTypedArrayOutOfBounds (srcRecord) istrue , throw aTypeError exception. - Let srcLength be
TypedArrayLength (srcRecord). - Let targetType be
TypedArrayElementType (target). - Let targetElementSize be
TypedArrayElementSize (target). - Let targetByteOffset be target.[[ByteOffset]].
- Let srcType be
TypedArrayElementType (source). - Let srcElementSize be
TypedArrayElementSize (source). - Let srcByteOffset be source.[[ByteOffset]].
- If targetOffset = +∞, throw a
RangeError exception. - If srcLength + targetOffset > targetLength, throw a
RangeError exception. - If target.[[ContentType]] is not source.[[ContentType]], throw a
TypeError exception. - If
IsSharedArrayBuffer (srcBuffer) istrue ,IsSharedArrayBuffer (targetBuffer) istrue , and srcBuffer.[[ArrayBufferData]] is targetBuffer.[[ArrayBufferData]], let sameSharedArrayBuffer betrue ; otherwise, let sameSharedArrayBuffer befalse . - If
SameValue (srcBuffer, targetBuffer) istrue or sameSharedArrayBuffer istrue , then- Let srcByteLength be
TypedArrayByteLength (srcRecord). - Set srcBuffer to ?
CloneArrayBuffer (srcBuffer, srcByteOffset, srcByteLength). - Let srcByteIndex be 0.
- Let srcByteLength be
- Else,
- Let srcByteIndex be srcByteOffset.
- Let targetByteIndex be (targetOffset × targetElementSize) + targetByteOffset.
- Let limit be targetByteIndex + (targetElementSize × srcLength).
- If srcType is targetType, then
- NOTE: The transfer must be performed in a manner that preserves the bit-level encoding of the source data.
- Repeat, while targetByteIndex < limit,
- Let value be
GetValueFromBuffer (srcBuffer, srcByteIndex,uint8 ,true ,unordered ). - Perform
SetValueInBuffer (targetBuffer, targetByteIndex,uint8 , value,true ,unordered ). - Set srcByteIndex to srcByteIndex + 1.
- Set targetByteIndex to targetByteIndex + 1.
- Let value be
- Else,
- Repeat, while targetByteIndex < limit,
- Let value be
GetValueFromBuffer (srcBuffer, srcByteIndex, srcType,true ,unordered ). - Perform
SetValueInBuffer (targetBuffer, targetByteIndex, targetType, value,true ,unordered ). - Set srcByteIndex to srcByteIndex + srcElementSize.
- Set targetByteIndex to targetByteIndex + targetElementSize.
- Let value be
- Repeat, while targetByteIndex < limit,
- Return
unused .
23.2.3.26.2 SetTypedArrayFromArrayLike ( target, targetOffset, source )
The abstract operation SetTypedArrayFromArrayLike takes arguments target (a
- Let targetRecord be
MakeTypedArrayWithBufferWitnessRecord (target,seq-cst ). - If
IsTypedArrayOutOfBounds (targetRecord) istrue , throw aTypeError exception. - Let targetLength be
TypedArrayLength (targetRecord). - Let src be ?
ToObject (source). - Let srcLength be ?
LengthOfArrayLike (src). - If targetOffset = +∞, throw a
RangeError exception. - If srcLength + targetOffset > targetLength, throw a
RangeError exception. - Let k be 0.
- Repeat, while k < srcLength,
- Let Pk be !
ToString (𝔽 (k)). - Let value be ?
Get (src, Pk). - Let targetIndex be
𝔽 (targetOffset + k). - Perform ?
TypedArraySetElement (target, targetIndex, value). - Set k to k + 1.
- Let Pk be !
- Return
unused .
23.2.3.27 %TypedArray% .prototype.slice ( start, end )
The interpretation and use of the arguments of this method are the same as for Array.prototype.slice as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let srcArrayLength be
TypedArrayLength (taRecord). - Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let startIndex be 0.
- Else if relativeStart < 0, let startIndex be
max (srcArrayLength + relativeStart, 0). - Else, let startIndex be
min (relativeStart, srcArrayLength). - If end is
undefined , let relativeEnd be srcArrayLength; else let relativeEnd be ?ToIntegerOrInfinity (end). - If relativeEnd = -∞, let endIndex be 0.
- Else if relativeEnd < 0, let endIndex be
max (srcArrayLength + relativeEnd, 0). - Else, let endIndex be
min (relativeEnd, srcArrayLength). - Let countBytes be
max (endIndex - startIndex, 0). - Let A be ?
TypedArraySpeciesCreate (O, «𝔽 (countBytes) »). - If countBytes > 0, then
- Set taRecord to
MakeTypedArrayWithBufferWitnessRecord (O,seq-cst ). - If
IsTypedArrayOutOfBounds (taRecord) istrue , throw aTypeError exception. - Set endIndex to
min (endIndex,TypedArrayLength (taRecord)). - Set countBytes to
max (endIndex - startIndex, 0). - Let srcType be
TypedArrayElementType (O). - Let targetType be
TypedArrayElementType (A). - If srcType is targetType, then
- NOTE: The transfer must be performed in a manner that preserves the bit-level encoding of the source data.
- Let srcBuffer be O.[[ViewedArrayBuffer]].
- Let targetBuffer be A.[[ViewedArrayBuffer]].
- Let elementSize be
TypedArrayElementSize (O). - Let srcByteOffset be O.[[ByteOffset]].
- Let srcByteIndex be (startIndex × elementSize) + srcByteOffset.
- Let targetByteIndex be A.[[ByteOffset]].
- Let endByteIndex be targetByteIndex + (countBytes × elementSize).
- Repeat, while targetByteIndex < endByteIndex,
- Let value be
GetValueFromBuffer (srcBuffer, srcByteIndex,uint8 ,true ,unordered ). - Perform
SetValueInBuffer (targetBuffer, targetByteIndex,uint8 , value,true ,unordered ). - Set srcByteIndex to srcByteIndex + 1.
- Set targetByteIndex to targetByteIndex + 1.
- Let value be
- Else,
- Set taRecord to
- Return A.
This method is not generic. The
23.2.3.28 %TypedArray% .prototype.some ( callback [ , thisArg ] )
The interpretation and use of the arguments of this method are the same as for Array.prototype.some as defined in
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - If
IsCallable (callback) isfalse , throw aTypeError exception. - Let k be 0.
- Repeat, while k < len,
- Return
false .
This method is not generic. The
23.2.3.29 %TypedArray% .prototype.sort ( comparator )
This is a distinct method that, except as described below, implements the same requirements as those of Array.prototype.sort as defined in
This method is not generic. The
It performs the following steps when called:
- If comparator is not
undefined andIsCallable (comparator) isfalse , throw aTypeError exception. - Let obj be the
this value. - Let taRecord be ?
ValidateTypedArray (obj,seq-cst ). - Let len be
TypedArrayLength (taRecord). - NOTE: The following closure performs a numeric comparison rather than the string comparison used in
23.1.3.30 . - Let SortCompare be a new
Abstract Closure with parameters (x, y) that captures comparator and performs the following steps when called:- Return ?
CompareTypedArrayElements (x, y, comparator).
- Return ?
- Let sortedList be ?
SortIndexedProperties (obj, len, SortCompare,read-through-holes ). - Let j be 0.
- Repeat, while j < len,
- Return obj.
Because
23.2.3.30 %TypedArray% .prototype.subarray ( start, end )
This method returns a new TypedArray whose element type is the element type of this TypedArray and whose ArrayBuffer is the ArrayBuffer of this TypedArray, referencing the elements in the
It performs the following steps when called:
- Let O be the
this value. - Perform ?
RequireInternalSlot (O, [[TypedArrayName]]). Assert : O has a [[ViewedArrayBuffer]] internal slot.- Let buffer be O.[[ViewedArrayBuffer]].
- Let srcRecord be
MakeTypedArrayWithBufferWitnessRecord (O,seq-cst ). - If
IsTypedArrayOutOfBounds (srcRecord) istrue , then- Let srcLength be 0.
- Else,
- Let srcLength be
TypedArrayLength (srcRecord).
- Let srcLength be
- Let relativeStart be ?
ToIntegerOrInfinity (start). - If relativeStart = -∞, let startIndex be 0.
- Else if relativeStart < 0, let startIndex be
max (srcLength + relativeStart, 0). - Else, let startIndex be
min (relativeStart, srcLength). - Let elementSize be
TypedArrayElementSize (O). - Let srcByteOffset be O.[[ByteOffset]].
- Let beginByteOffset be srcByteOffset + (startIndex × elementSize).
- If O.[[ArrayLength]] is
auto and end isundefined , then- Let argumentsList be « buffer,
𝔽 (beginByteOffset) ».
- Let argumentsList be « buffer,
- Else,
- If end is
undefined , let relativeEnd be srcLength; else let relativeEnd be ?ToIntegerOrInfinity (end). - If relativeEnd = -∞, let endIndex be 0.
- Else if relativeEnd < 0, let endIndex be
max (srcLength + relativeEnd, 0). - Else, let endIndex be
min (relativeEnd, srcLength). - Let newLength be
max (endIndex - startIndex, 0). - Let argumentsList be « buffer,
𝔽 (beginByteOffset),𝔽 (newLength) ».
- If end is
- Return ?
TypedArraySpeciesCreate (O, argumentsList).
This method is not generic. The
23.2.3.31 %TypedArray% .prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
This is a distinct method that implements the same algorithm as Array.prototype.toLocaleString as defined in
This method is not generic.
If the ECMAScript implementation includes the ECMA-402 Internationalization API this method is based upon the algorithm for Array.prototype.toLocaleString that is in the ECMA-402 specification.
23.2.3.32 %TypedArray% .prototype.toReversed ( )
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let length be
TypedArrayLength (taRecord). - Let A be ?
TypedArrayCreateSameType (O, «𝔽 (length) »). - Let k be 0.
- Repeat, while k < length,
- Return A.
23.2.3.33 %TypedArray% .prototype.toSorted ( comparator )
This method performs the following steps when called:
- If comparator is not
undefined andIsCallable (comparator) isfalse , throw aTypeError exception. - Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let A be ?
TypedArrayCreateSameType (O, «𝔽 (len) »). - NOTE: The following closure performs a numeric comparison rather than the string comparison used in
23.1.3.34 . - Let SortCompare be a new
Abstract Closure with parameters (x, y) that captures comparator and performs the following steps when called:- Return ?
CompareTypedArrayElements (x, y, comparator).
- Return ?
- Let sortedList be ?
SortIndexedProperties (O, len, SortCompare,read-through-holes ). - Let j be 0.
- Repeat, while j < len,
- Return A.
23.2.3.34 %TypedArray% .prototype.toString ( )
The initial value of the
23.2.3.35 %TypedArray% .prototype.values ( )
This method performs the following steps when called:
- Let O be the
this value. - Perform ?
ValidateTypedArray (O,seq-cst ). - Return
CreateArrayIterator (O,value ).
23.2.3.36 %TypedArray% .prototype.with ( index, value )
This method performs the following steps when called:
- Let O be the
this value. - Let taRecord be ?
ValidateTypedArray (O,seq-cst ). - Let len be
TypedArrayLength (taRecord). - Let relativeIndex be ?
ToIntegerOrInfinity (index). - If relativeIndex ≥ 0, let actualIndex be relativeIndex.
- Else, let actualIndex be len + relativeIndex.
- If O.[[ContentType]] is
bigint , let numericValue be ?ToBigInt (value). - Else, let numericValue be ?
ToNumber (value). - If
IsValidIntegerIndex (O,𝔽 (actualIndex)) isfalse , throw aRangeError exception. - Let A be ?
TypedArrayCreateSameType (O, «𝔽 (len) »). - Let k be 0.
- Repeat, while k < len,
- Return A.
23.2.3.37 %TypedArray% .prototype [ %Symbol.iterator% ] ( )
The initial value of the
23.2.3.38 get %TypedArray% .prototype [ %Symbol.toStringTag% ]
.prototype[%Symbol.toStringTag%] is an
- Let O be the
this value. - If O
is not an Object , returnundefined . - If O does not have a [[TypedArrayName]] internal slot, return
undefined . - Let name be O.[[TypedArrayName]].
Assert : nameis a String .- Return name.
This property has the attributes { [[Enumerable]]:
The initial value of the
23.2.4 Abstract Operations for TypedArray Objects
23.2.4.1 TypedArraySpeciesCreate ( exemplar, argumentList )
The abstract operation TypedArraySpeciesCreate takes arguments exemplar (a
- Let defaultConstructor be the intrinsic object associated with the
constructor name exemplar.[[TypedArrayName]] inTable 75 . - Let constructor be ?
SpeciesConstructor (exemplar, defaultConstructor). - Let result be ?
TypedArrayCreateFromConstructor (constructor, argumentList). Assert : result has [[TypedArrayName]] and [[ContentType]] internal slots.- If result.[[ContentType]] is not exemplar.[[ContentType]], throw a
TypeError exception. - Return result.
23.2.4.2 TypedArrayCreateFromConstructor ( constructor, argumentList )
The abstract operation TypedArrayCreateFromConstructor takes arguments constructor (a
- Let newTypedArray be ?
Construct (constructor, argumentList). - Let taRecord be ?
ValidateTypedArray (newTypedArray,seq-cst ). - If the number of elements in argumentList is 1 and argumentList[0]
is a Number , then- If
IsTypedArrayOutOfBounds (taRecord) istrue , throw aTypeError exception. - Let length be
TypedArrayLength (taRecord). - If length <
ℝ (argumentList[0]), throw aTypeError exception.
- If
- Return newTypedArray.
23.2.4.3 TypedArrayCreateSameType ( exemplar, argumentList )
The abstract operation TypedArrayCreateSameType takes arguments exemplar (a
- Let constructor be the intrinsic object associated with the
constructor name exemplar.[[TypedArrayName]] inTable 75 . - Let result be ?
TypedArrayCreateFromConstructor (constructor, argumentList). Assert : result has [[TypedArrayName]] and [[ContentType]] internal slots.Assert : result.[[ContentType]] is exemplar.[[ContentType]].- Return result.
23.2.4.4 ValidateTypedArray ( O, order )
The abstract operation ValidateTypedArray takes arguments O (an
- Perform ?
RequireInternalSlot (O, [[TypedArrayName]]). Assert : O has a [[ViewedArrayBuffer]] internal slot.- Let taRecord be
MakeTypedArrayWithBufferWitnessRecord (O, order). - If
IsTypedArrayOutOfBounds (taRecord) istrue , throw aTypeError exception. - Return taRecord.
23.2.4.5 TypedArrayElementSize ( O )
The abstract operation TypedArrayElementSize takes argument O (a
- Return the Element Size value specified in
Table 75 for O.[[TypedArrayName]].
23.2.4.6 TypedArrayElementType ( O )
The abstract operation TypedArrayElementType takes argument O (a
- Return the Element Type value specified in
Table 75 for O.[[TypedArrayName]].
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
Assert : xis a Number and yis a Number , or xis a BigInt and yis a BigInt .- If comparator is not
undefined , then - If x and y are both
NaN , return+0 𝔽. - If x is
NaN , return1 𝔽. - If y is
NaN , return-1 𝔽. - If x < y, return
-1 𝔽. - If x > y, return
1 𝔽. - If x is
-0 𝔽 and y is+0 𝔽, return-1 𝔽. - If x is
+0 𝔽 and y is-0 𝔽, return1 𝔽. - Return
+0 𝔽.
23.2.5 The TypedArray Constructors
Each TypedArray
- is an intrinsic object that has the structure described below, differing only in the name used as the
constructor name instead of TypedArray, inTable 75 . - is a function whose behaviour differs based upon the number and types of its arguments. The actual behaviour of a call of TypedArray depends upon the number and kind of arguments that are passed to it.
- is not intended to be called as a function and will throw an exception when called in that manner.
- may be used as the value of an
extendsclause of a class definition. Subclassconstructors that intend to inherit the specified TypedArray behaviour must include asupercall to the TypedArrayconstructor to create and initialize the subclass instance with the internal state necessary to support the%TypedArray% .prototypebuilt-in methods.
23.2.5.1 TypedArray ( ...args )
Each TypedArray
- If NewTarget is
undefined , throw aTypeError exception. - Let constructorName be the String value of the
Constructor Name value specified inTable 75 for this TypedArrayconstructor . - Let proto be
"%TypedArray.prototype%". - Let numberOfArgs be the number of elements in args.
- If numberOfArgs = 0, then
- Return ?
AllocateTypedArray (constructorName, NewTarget, proto, 0).
- Return ?
- Else,
- Let firstArgument be args[0].
- If firstArgument
is an Object , then- Let O be ?
AllocateTypedArray (constructorName, NewTarget, proto). - If firstArgument has a [[TypedArrayName]] internal slot, then
- Perform ?
InitializeTypedArrayFromTypedArray (O, firstArgument).
- Perform ?
- Else if firstArgument has an [[ArrayBufferData]] internal slot, then
- If numberOfArgs > 1, let byteOffset be args[1]; else let byteOffset be
undefined . - If numberOfArgs > 2, let length be args[2]; else let length be
undefined . - Perform ?
InitializeTypedArrayFromArrayBuffer (O, firstArgument, byteOffset, length).
- If numberOfArgs > 1, let byteOffset be args[1]; else let byteOffset be
- Else,
Assert : firstArgumentis an Object and firstArgument does not have either a [[TypedArrayName]] or an [[ArrayBufferData]] internal slot.- Let usingIterator be ?
GetMethod (firstArgument,%Symbol.iterator% ). - If usingIterator is not
undefined , then- Let values be ?
IteratorToList (?GetIteratorFromMethod (firstArgument, usingIterator)). - Perform ?
InitializeTypedArrayFromList (O, values).
- Let values be ?
- Else,
- NOTE: firstArgument is not an
iterable object , so assume it is already anarray-like object . - Perform ?
InitializeTypedArrayFromArrayLike (O, firstArgument).
- NOTE: firstArgument is not an
- Return O.
- Let O be ?
- Else,
Assert : firstArgumentis not an Object .- Let elementLength be ?
ToIndex (firstArgument). - Return ?
AllocateTypedArray (constructorName, NewTarget, proto, elementLength).
23.2.5.1.1 AllocateTypedArray ( constructorName, newTarget, defaultProto [ , length ] )
The abstract operation AllocateTypedArray takes arguments constructorName (a String which is the name of a
- Let proto be ?
GetPrototypeFromConstructor (newTarget, defaultProto). - Let obj be
TypedArrayCreate (proto). Assert : obj.[[ViewedArrayBuffer]] isundefined .- Set obj.[[TypedArrayName]] to constructorName.
- If constructorName is either
"BigInt64Array" or"BigUint64Array" , set obj.[[ContentType]] tobigint . - Otherwise, set obj.[[ContentType]] to
number . - If length is not present, then
- Set obj.[[ByteLength]] to 0.
- Set obj.[[ByteOffset]] to 0.
- Set obj.[[ArrayLength]] to 0.
- Else,
- Perform ?
AllocateTypedArrayBuffer (obj, length).
- Perform ?
- Return obj.
23.2.5.1.2 InitializeTypedArrayFromTypedArray ( O, srcArray )
The abstract operation InitializeTypedArrayFromTypedArray takes arguments O (a
- Let srcData be srcArray.[[ViewedArrayBuffer]].
- Let elementType be
TypedArrayElementType (O). - Let elementSize be
TypedArrayElementSize (O). - Let srcType be
TypedArrayElementType (srcArray). - Let srcElementSize be
TypedArrayElementSize (srcArray). - Let srcByteOffset be srcArray.[[ByteOffset]].
- Let srcRecord be
MakeTypedArrayWithBufferWitnessRecord (srcArray,seq-cst ). - If
IsTypedArrayOutOfBounds (srcRecord) istrue , throw aTypeError exception. - Let elementLength be
TypedArrayLength (srcRecord). - Let byteLength be elementSize × elementLength.
- If elementType is srcType, then
- Let data be ?
CloneArrayBuffer (srcData, srcByteOffset, byteLength).
- Let data be ?
- Else,
- Let data be ?
.AllocateArrayBuffer (%ArrayBuffer% , byteLength) - If srcArray.[[ContentType]] is not O.[[ContentType]], throw a
TypeError exception. - Let srcByteIndex be srcByteOffset.
- Let targetByteIndex be 0.
- Let count be elementLength.
- Repeat, while count > 0,
- Let value be
GetValueFromBuffer (srcData, srcByteIndex, srcType,true ,unordered ). - Perform
SetValueInBuffer (data, targetByteIndex, elementType, value,true ,unordered ). - Set srcByteIndex to srcByteIndex + srcElementSize.
- Set targetByteIndex to targetByteIndex + elementSize.
- Set count to count - 1.
- Let value be
- Let data be ?
- Set O.[[ViewedArrayBuffer]] to data.
- Set O.[[ByteLength]] to byteLength.
- Set O.[[ByteOffset]] to 0.
- Set O.[[ArrayLength]] to elementLength.
- Return
unused .
23.2.5.1.3 InitializeTypedArrayFromArrayBuffer ( O, buffer, byteOffset, length )
The abstract operation InitializeTypedArrayFromArrayBuffer takes arguments O (a
- Let elementSize be
TypedArrayElementSize (O). - Let offset be ?
ToIndex (byteOffset). - If offset
modulo elementSize ≠ 0, throw aRangeError exception. - Let bufferIsFixedLength be
IsFixedLengthArrayBuffer (buffer). - If length is not
undefined , then- Let newLength be ?
ToIndex (length).
- Let newLength be ?
- If
IsDetachedBuffer (buffer) istrue , throw aTypeError exception. - Let bufferByteLength be
ArrayBufferByteLength (buffer,seq-cst ). - If length is
undefined and bufferIsFixedLength isfalse , then- If offset > bufferByteLength, throw a
RangeError exception. - Set O.[[ByteLength]] to
auto . - Set O.[[ArrayLength]] to
auto .
- If offset > bufferByteLength, throw a
- Else,
- If length is
undefined , then- If bufferByteLength
modulo elementSize ≠ 0, throw aRangeError exception. - Let newByteLength be bufferByteLength - offset.
- If newByteLength < 0, throw a
RangeError exception.
- If bufferByteLength
- Else,
- Let newByteLength be newLength × elementSize.
- If offset + newByteLength > bufferByteLength, throw a
RangeError exception.
- Set O.[[ByteLength]] to newByteLength.
- Set O.[[ArrayLength]] to newByteLength / elementSize.
- If length is
- Set O.[[ViewedArrayBuffer]] to buffer.
- Set O.[[ByteOffset]] to offset.
- Return
unused .
23.2.5.1.4 InitializeTypedArrayFromList ( O, values )
The abstract operation InitializeTypedArrayFromList takes arguments O (a
- Let len be the number of elements in values.
- Perform ?
AllocateTypedArrayBuffer (O, len). - Let k be 0.
- Repeat, while k < len,
Assert : values is now an emptyList .- Return
unused .
23.2.5.1.5 InitializeTypedArrayFromArrayLike ( O, arrayLike )
The abstract operation InitializeTypedArrayFromArrayLike takes arguments O (a
- Let len be ?
LengthOfArrayLike (arrayLike). - Perform ?
AllocateTypedArrayBuffer (O, len). - Let k be 0.
- Repeat, while k < len,
- Return
unused .
23.2.5.1.6 AllocateTypedArrayBuffer ( O, length )
The abstract operation AllocateTypedArrayBuffer takes arguments O (a
Assert : O.[[ViewedArrayBuffer]] isundefined .- Let elementSize be
TypedArrayElementSize (O). - Let byteLength be elementSize × length.
- Let data be ?
.AllocateArrayBuffer (%ArrayBuffer% , byteLength) - Set O.[[ViewedArrayBuffer]] to data.
- Set O.[[ByteLength]] to byteLength.
- Set O.[[ByteOffset]] to 0.
- Set O.[[ArrayLength]] to length.
- Return
unused .
23.2.6 Properties of the TypedArray Constructors
Each TypedArray
- has a [[Prototype]] internal slot whose value is
%TypedArray% . - has a
"length" property whose value is3 𝔽. - has a
"name" property whose value is the String value of theconstructor name specified for it inTable 75 . - has the following properties:
23.2.6.1 TypedArray.BYTES_PER_ELEMENT
The value of TypedArray.BYTES_PER_ELEMENT is the Element Size value specified in
This property has the attributes { [[Writable]]:
23.2.6.2 TypedArray.prototype
The initial value of TypedArray.prototype is the corresponding TypedArray prototype intrinsic object (
This property has the attributes { [[Writable]]:
23.2.7 Properties of the TypedArray Prototype Objects
Each TypedArray prototype object:
- has a [[Prototype]] internal slot whose value is
%TypedArray.prototype% . - is an
ordinary object . - does not have a [[ViewedArrayBuffer]] or any other of the internal slots that are specific to TypedArray instance objects.
23.2.7.1 TypedArray.prototype.BYTES_PER_ELEMENT
The value of TypedArray.prototype.BYTES_PER_ELEMENT is the Element Size value specified in
This property has the attributes { [[Writable]]:
23.2.7.2 TypedArray.prototype.constructor
The initial value of the
23.2.8 Properties of TypedArray Instances
TypedArray instances are