23 インデックス付きコレクション

23.1 Array オブジェクト

配列 (Array) は特定種類のプロパティ名に特別な扱いを与えるエキゾチックオブジェクトである。この特別扱いの定義については 10.4.2 を参照。

23.1.1 Array コンストラクター

Array コンストラクター:

  • %Array% である。
  • グローバルオブジェクト"Array" プロパティの初期値である。
  • コンストラクターとして呼び出されたとき新しい Array を生成し初期化する。
  • 関数として(コンストラクターではなく)呼び出された場合も新しい Array を生成し初期化する。従って関数呼び出し Array(…) は、同じ引数のオブジェクト生成式 new Array(…) と等価である。
  • その振る舞いが引数の個数と型に依存して変化する関数である。
  • クラス定義の extends 句の値として利用できる。エキゾチック Array の挙動を継承することを意図したサブクラスコンストラクターは、サブクラスインスタンス(Array エキゾチックオブジェクト)を初期化するために Array コンストラクターへの super 呼び出しを含めなければならない。ただし、Array.prototype のメソッドの多くは this 値が Array エキゾチックオブジェクトであることに依存しない汎用メソッドである。

23.1.1.1 Array ( ...values )

この関数は呼び出し時に以下の手順を実行する:

  1. NewTarget が undefined なら newTarget をアクティブな関数オブジェクトとし;そうでなければ newTarget を NewTarget とする。
  2. proto を ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") とする。
  3. numberOfArgsvalues の要素数とする。
  4. numberOfArgs = 0 なら
    1. ArrayCreate(0, proto) を返す。
  5. そうでなく numberOfArgs = 1 なら
    1. lenvalues[0] とする。
    2. array を ! ArrayCreate(0, proto) とする。
    3. len が Number でなければ
      1. CreateDataPropertyOrThrow(array, "0", len) を実行。
      2. intLen1𝔽 とする。
    4. そうでなければ
      1. intLen を ! ToUint32(len) とする。
      2. SameValueZero(intLen, len) が false なら RangeError 例外を投げる。
    5. Set(array, "length", intLen, true) を実行。
    6. array を返す。
  6. それ以外の場合
    1. アサート: numberOfArgs ≥ 2.
    2. array を ? ArrayCreate(numberOfArgs, proto) とする。
    3. k を 0 とする。
    4. k < numberOfArgs の間繰り返し、
      1. Pk を ! ToString(𝔽(k)) とする。
      2. itemKvalues[k] とする。
      3. CreateDataPropertyOrThrow(array, Pk, itemK) を実行。
      4. kk + 1 にする。
    5. アサート: array"length" プロパティの数学的値は numberOfArgs である。
    6. array を返す。

23.1.2 Array コンストラクターのプロパティ

Array コンストラクター:

  • %Function.prototype% を持つ [[Prototype]] 内部スロットを有する。
  • 1𝔽"length" プロパティを持つ。
  • 以下のプロパティを持つ:

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

このメソッドは呼び出し時に以下を実行する:

  1. Cthis 値とする。
  2. mapperundefined なら
    1. mappingfalse とする。
  3. そうでなければ
    1. IsCallable(mapper) が false なら TypeError 例外を投げる。
    2. mappingtrue とする。
  4. usingIterator を ? GetMethod(items, %Symbol.iterator%) とする。
  5. usingIteratorundefined でなければ
    1. IsConstructor(C) が true なら
      1. A を ? Construct(C) とする。
    2. そうでなければ
      1. A を ! ArrayCreate(0) とする。
    3. iteratorRecord を ? GetIteratorFromMethod(items, usingIterator) とする。
    4. k を 0 とする。
    5. 繰り返し、
      1. k ≥ 253 - 1 なら
        1. errorThrowCompletion(新規 TypeError オブジェクト) とする。
        2. IteratorClose(iteratorRecord, error) を返す。
      2. Pk を ! ToString(𝔽(k)) とする。
      3. next を ? IteratorStepValue(iteratorRecord) とする。
      4. nextdone なら
        1. Set(A, "length", 𝔽(k), true) を実行。
        2. A を返す。
      5. mappingtrue なら
        1. mappedValueCompletion(Call(mapper, thisArg, « next, 𝔽(k) »)) とする。
        2. IfAbruptCloseIterator(mappedValue, iteratorRecord)。
      6. そうでなければ
        1. mappedValuenext とする。
      7. defineStatusCompletion(CreateDataPropertyOrThrow(A, Pk, mappedValue)) とする。
      8. IfAbruptCloseIterator(defineStatus, iteratorRecord)。
      9. kk + 1 にする。
  6. 注記: itemsiterable ではないので配列ライクオブジェクトとみなす。
  7. arrayLike を ! ToObject(items) とする。
  8. len を ? LengthOfArrayLike(arrayLike) とする。
  9. IsConstructor(C) が true なら
    1. A を ? Construct(C, « 𝔽(len) ») とする。
  10. そうでなければ
    1. A を ? ArrayCreate(len) とする。
  11. k を 0 にする。
  12. k < len の間繰り返し、
    1. Pk を ! ToString(𝔽(k)) とする。
    2. kValue を ? Get(arrayLike, Pk) とする。
    3. mappingtrue なら
      1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
    4. そうでなければ
      1. mappedValuekValue とする。
    5. CreateDataPropertyOrThrow(A, Pk, mappedValue) を実行。
    6. kk + 1 にする。
  13. Set(A, "length", 𝔽(len), true) を実行。
  14. A を返す。
Note

このメソッドは意図的に汎用のファクトリメソッドであり、this 値が Array コンストラクターであることを要求しない。そのため単一の数値引数で呼び出され得る他のコンストラクターに転用または継承できる。

23.1.2.2 Array.isArray ( arg )

この関数は呼び出し時に以下を実行する:

  1. IsArray(arg) を返す。

23.1.2.3 Array.of ( ...items )

このメソッドは呼び出し時に以下を実行する:

  1. lenitems の要素数とする。
  2. lenNumber𝔽(len) とする。
  3. Cthis 値とする。
  4. IsConstructor(C) が true なら
    1. A を ? Construct(C, « lenNumber ») とする。
  5. そうでなければ
    1. A を ? ArrayCreate(len) とする。
  6. k を 0。
  7. k < len の間繰り返し、
    1. kValueitems[k] とする。
    2. Pk を ! ToString(𝔽(k)) とする。
    3. CreateDataPropertyOrThrow(A, Pk, kValue) を実行。
    4. kk + 1。
  8. Set(A, "length", lenNumber, true) を実行。
  9. A を返す。
Note

このメソッドは意図的に汎用のファクトリメソッドであり、this 値が Array コンストラクターであることを要求しない。そのため単一の数値引数で呼び出され得る他のコンストラクターへ転用または継承できる。

23.1.2.4 Array.prototype

Array.prototype の値は Array プロトタイプオブジェクトである。

このプロパティは属性 { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

23.1.2.5 get Array [ %Symbol.species% ]

Array[%Symbol.species%] は set アクセサ関数が undefinedアクセサプロパティであり、その get アクセサは以下を行う:

  1. this 値を返す。

この関数の "name" プロパティの値は "get [Symbol.species]" である。

Note

Array プロトタイプメソッドは通常、その this 値の constructor を使って派生オブジェクトを生成する。しかしサブクラスコンストラクターは %Symbol.species% プロパティを再定義することで既定の挙動を上書きできる。

23.1.3 Array プロトタイプオブジェクトのプロパティ

Array プロトタイプオブジェクト:

  • %Array.prototype% である。
  • Array エキゾチックオブジェクトであり、そのようなオブジェクトに規定された内部メソッドを持つ。
  • 初期値 +0𝔽"length" プロパティを持ち、その属性は { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } である。
  • [[Prototype]] 内部スロットの値は %Object.prototype% である。
Note

Array プロトタイプオブジェクトを Array エキゾチックオブジェクトとして規定するのは ECMAScript 2015 以前に作成されたコードとの互換性を確保するためである。

23.1.3.1 Array.prototype.at ( index )

  1. O を ? ToObject(this value) とする。
  2. len を ? LengthOfArrayLike(O) とする。
  3. relativeIndex を ? ToIntegerOrInfinity(index) とする。
  4. relativeIndex ≥ 0 なら
    1. krelativeIndex とする。
  5. そうでなければ
    1. klen + relativeIndex とする。
  6. k < 0 または klen なら undefined を返す。
  7. Get(O, ! ToString(𝔽(k))) を返す。

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

このメソッドは対象オブジェクトの配列要素に続いて各引数の配列要素を順に含む配列を返す。

呼び出し時に以下を実行する:

  1. O を ? ToObject(this value) とする。
  2. A を ? ArraySpeciesCreate(O, 0) とする。
  3. n を 0。
  4. items の先頭に O を挿入する。
  5. 各要素 Eitems について:
    1. spreadable を ? IsConcatSpreadable(E) とする。
    2. spreadabletrue なら
      1. len を ? LengthOfArrayLike(E) とする。
      2. n + len > 253 - 1 なら TypeError 例外。
      3. k を 0。
      4. k < len の間:
        1. Pk を ! ToString(𝔽(k)) とする。
        2. exists を ? HasProperty(E, Pk) とする。
        3. existstrue なら
          1. subElement を ? Get(E, Pk) とする。
          2. CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), subElement) を実行。
        4. nn + 1。
        5. kk + 1。
    3. そうでなければ
      1. 注記: E は展開されず単一要素として追加される。
      2. n ≥ 253 - 1 なら TypeError 例外。
      3. CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), E) を実行。
      4. nn + 1。
  6. Set(A, "length", 𝔽(n), true) を実行。
  7. A を返す。

このメソッドの "length" プロパティは 1𝔽 である。

Note 1

ステップ "length" を明示的に設定するのは、items の最後の非空要素に後続の hole がある場合や A が組込み Array でない場合の正しい長さを保証するためである。

Note 2

このメソッドは意図的に汎用であり、this 値が Array であることを要求しない。そのため他の種類のオブジェクトへメソッドとして転用可能である。

23.1.3.2.1 IsConcatSpreadable ( O )

The abstract operation IsConcatSpreadable takes argument O (ECMAScript 言語値) and returns Boolean を含む通常完了または throw 完了. It performs the following steps when called:

  1. O がオブジェクトでなければ false を返す。
  2. spreadable を ? Get(O, %Symbol.isConcatSpreadable%) とする。
  3. spreadableundefined でなければ ToBoolean(spreadable) を返す。
  4. IsArray(O) を返す。

23.1.3.3 Array.prototype.constructor

Array.prototype.constructor の初期値は %Array% である。

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

Note 1

end 引数は省略可。指定されない場合 this 値の長さが使われる。

Note 2

target が負なら配列長を length として length + target と扱う。start が負なら length + startend が負なら length + end と扱う。

このメソッドは呼び出し時に以下を実行する:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. relativeTarget を ? ToIntegerOrInfinity(target)。
  4. relativeTarget = -∞ なら to = 0。
  5. そうでなく relativeTarget < 0 なら to = max(len + relativeTarget, 0)。
  6. それ以外は to = min(relativeTarget, len)。
  7. relativeStart を ? ToIntegerOrInfinity(start)。
  8. relativeStart = -∞ なら from = 0。
  9. そうでなく relativeStart < 0 なら from = max(len + relativeStart, 0)。
  10. それ以外は from = min(relativeStart, len)。
  11. endundefined なら relativeEnd = len;そうでなければ relativeEnd を ? ToIntegerOrInfinity(end)。
  12. relativeEnd = -∞ なら final = 0。
  13. そうでなく relativeEnd < 0 なら final = max(len + relativeEnd, 0)。
  14. それ以外は final = min(relativeEnd, len)。
  15. countmin(final - from, len - to)。
  16. from < to かつ to < from + count なら
    1. direction = -1。
    2. from = from + count - 1。
    3. to = to + count - 1。
  17. そうでなければ
    1. direction = 1。
  18. count > 0 の間繰り返し、
    1. fromKey を ! ToString(𝔽(from))。
    2. toKey を ! ToString(𝔽(to))。
    3. fromPresent を ? HasProperty(O, fromKey)。
    4. fromPresenttrue なら
      1. fromValue を ? Get(O, fromKey)。
      2. Set(O, toKey, fromValue, true)。
    5. そうでなければ
      1. アサート: fromPresentfalse
      2. DeletePropertyOrThrow(O, toKey)。
    6. from += direction
    7. to += direction
    8. count -= 1。
  19. O を返す。
Note 3

このメソッドは意図的に汎用であり、this 値が Array である必要はない。他オブジェクトへ転用できる。

23.1.3.5 Array.prototype.entries ( )

このメソッドは呼び出し時以下を実行する:

  1. O を ? ToObject(this value)。
  2. CreateArrayIterator(O, key+value) を返す。

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

Note 1

callback は 3 引数を受け取り Boolean へ強制可能な値を返す関数であるべき。every は昇順で各要素に対し callback を 1 回ずつ呼び、callbackfalse を返す要素を見つけた時点で直ちに false を返す。見つからなければ true を返す。callback は実際に存在する要素に対してのみ呼ばれ、欠落要素には呼ばれない。

thisArg が指定されれば各呼び出しの this 値として使用され、指定がなければ undefined が用いられる。

callback は (要素値, 要素インデックス, 走査対象オブジェクト) を受け取る。

every 自体は直接対象オブジェクトをミューテートしないが、callback の呼び出しにより変更され得る。

処理される要素の範囲は最初の callback 呼び出し前に固定される。every 開始後に追加された要素は訪問されない。既存要素が変更された場合、その時点の値が渡される;開始後に削除された要素は訪問されない。空配列に対しては true を返し、数学の「全て」量化に相当する。

このメソッドは呼び出し時以下を実行する:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. IsCallable(callback) が false なら TypeError 例外。
  4. k = 0。
  5. k < len の間繰り返し、
    1. Pk を ! ToString(𝔽(k))。
    2. kPresent を ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue を ? Get(O, Pk)。
      2. testResultToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »))。
      3. testResultfalse なら false を返す。
    4. kk + 1。
  6. true を返す。
Note 2

このメソッドは意図的に汎用であり、this 値が Array であることを要求しない。

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

Note 1

start は省略可。省略時 +0𝔽 を使用。

end は省略可。省略時 this 値の長さを使用。

Note 2

start が負なら length + startend が負なら length + end と扱う。

このメソッドは呼び出し時以下を実行:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. relativeStart を ? ToIntegerOrInfinity(start)。
  4. relativeStart = -∞ なら k = 0。
  5. そうでなく relativeStart < 0 なら k = max(len + relativeStart, 0)。
  6. それ以外は k = min(relativeStart, len)。
  7. endundefined なら relativeEnd = len;そうでなければ relativeEnd = ? ToIntegerOrInfinity(end)。
  8. relativeEnd = -∞ なら final = 0。
  9. そうでなく relativeEnd < 0 なら final = max(len + relativeEnd, 0)。
  10. それ以外は final = min(relativeEnd, len)。
  11. k < final の間繰り返し、
    1. Pk を ! ToString(𝔽(k))。
    2. Set(O, Pk, value, true)。
    3. k++。
  12. O を返す。
Note 3

このメソッドは意図的に汎用。

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

Note 1

callback は 3 引数を受け Boolean へ強制可能な値を返す関数であるべき。filter は昇順で各要素に対し callback を呼び、true を返した値を集め新しい配列を構成する。欠落要素には呼ばれない。

thisArg が提供されれば this として使われ、なければ undefined

callback は (値, インデックス, 走査対象) を受け取る。

filter 自体は直接オブジェクトを変更しないが callback により変更され得る。

処理範囲は開始前に固定。開始後に追加された要素は訪問されず、変更された既存要素は訪問時点の値、開始後に削除された要素は訪問されない。

このメソッドは呼び出し時以下を実行:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. IsCallable(callback) が false なら TypeError
  4. A を ? ArraySpeciesCreate(O, 0)。
  5. k = 0。
  6. to = 0。
  7. k < len の間繰り返し、
    1. Pk を ! ToString(𝔽(k))。
    2. kPresent を ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue を ? Get(O, Pk)。
      2. selectedToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »))。
      3. selectedtrue なら
        1. CreateDataPropertyOrThrow(A, ! ToString(𝔽(to)), kValue)。
        2. to++。
    4. k++。
  8. A を返す。
Note 2

このメソッドは汎用。

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

Note 1

このメソッドは昇順インデックスで各要素に対し predicate を呼び、true に強制される値を返した最初の要素値を返す。存在しなければ undefined

追加情報は FindViaPredicate を参照。

呼び出し時の手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. findRec を ? FindViaPredicate(O, len, ascending, predicate, thisArg)。
  4. findRec.[[Value]] を返す。
Note 2

汎用メソッド。

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

Note 1

昇順で predicate を呼び、true に強制される値を返した最初の要素のインデックスを返す。なければ -1。

追加情報は FindViaPredicate 参照。

呼び出し時手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. findRec を ? FindViaPredicate(O, len, ascending, predicate, thisArg)。
  4. findRec.[[Index]] を返す。
Note 2

汎用。

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

Note 1

降順で predicate を呼び、true に強制される値を返した最初の要素値を返す。なければ undefined

追加情報は FindViaPredicate 参照。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. findRec を ? FindViaPredicate(O, len, descending, predicate, thisArg)。
  4. findRec.[[Value]] を返す。
Note 2

汎用。

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

Note 1

降順で predicate を呼び、true に強制される値を返した最初の要素のインデックスを返す。なければ -1。

追加情報は FindViaPredicate 参照。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. findRec を ? FindViaPredicate(O, len, descending, predicate, thisArg)。
  4. findRec.[[Index]] を返す。
Note 2

汎用。

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

The abstract operation FindViaPredicate takes arguments O (オブジェクト), len (非負整数), direction (ascending または descending), predicate (ECMAScript 言語値), and thisArg (ECMAScript 言語値) and returns フィールド [[Index]] (整数 Number) と [[Value]] (ECMAScript 言語値) を持つ Record を含む通常完了または throw 完了.

O は配列ライクまたは TypedArray であるべき。この操作は指定方向で各要素に predicate を 1 回ずつ呼び、true に強制される値を返した時点でそのインデックスと値を含む Record を返す。該当要素がない場合、インデックス -1𝔽 と値 undefinedRecord を返す。

predicate は関数であるべき。呼び出し時 (要素値, インデックス, 対象オブジェクト) が渡され、戻り値は Boolean へ強制される。

thisArg は各呼び出しの this として用いられる。

この操作自体は直接オブジェクトを変更しないが predicate により変更され得る。

処理範囲は走査開始直前に固定される。以降に追加された要素は訪問されない。既存要素が変更された場合はその訪問時の値が渡される。走査開始後に削除された要素は依然訪問され、存在しなければ undefined またはプロトタイプから取得される。

It performs the following steps when called:

  1. IsCallable(predicate) が false なら TypeError 例外。
  2. directionascending なら
    1. indices を 0 以上 len 未満の整数の昇順 List とする。
  3. そうでなければ
    1. indices を 0 以上 len 未満の整数の降順 List とする。
  4. 整数 kindices について
    1. Pk を ! ToString(𝔽(k))。
    2. 注記: OTypedArray の場合、次の Get 呼び出しは正常完了を返す。
    3. kValue を ? Get(O, Pk)。
    4. testResult を ? Call(predicate, thisArg, « kValue, 𝔽(k), O »)。
    5. ToBoolean(testResult) が true なら Record { [[Index]]: 𝔽(k), [[Value]]: kValue } を返す。
  5. Record { [[Index]]: -1𝔽, [[Value]]: undefined } を返す。

23.1.3.13 Array.prototype.flat ( [ depth ] )

このメソッドは呼び出し時以下を実行する:

  1. O を ? ToObject(this value)。
  2. sourceLen を ? LengthOfArrayLike(O)。
  3. depthNum = 1。
  4. depthundefined でなければ
    1. depthNum を ? ToIntegerOrInfinity(depth) に設定。
    2. depthNum < 0 なら depthNum = 0。
  5. A を ? ArraySpeciesCreate(O, 0)。
  6. FlattenIntoArray(A, O, sourceLen, 0, depthNum) を実行。
  7. A を返す。

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

The abstract operation FlattenIntoArray takes arguments target (オブジェクト), source (オブジェクト), sourceLen (非負整数), start (非負整数), and depth (非負整数または +∞) and optional arguments mapperFunction (関数オブジェクト) and thisArg (ECMAScript 言語値) and returns 非負整数を含む通常完了または throw 完了. It performs the following steps when called:

  1. アサート: mapperFunction が存在するなら IsCallable(mapperFunction) は true であり、thisArg が存在し、かつ depth は 1。
  2. targetIndexstart
  3. sourceIndex+0𝔽
  4. (sourceIndex) < sourceLen の間繰り返し、
    1. P を ! ToString(sourceIndex)。
    2. exists を ? HasProperty(source, P)。
    3. existstrue なら
      1. element を ? Get(source, P)。
      2. mapperFunction が存在するなら
        1. element を ? Call(mapperFunction, thisArg, « element, sourceIndex, source ») に設定。
      3. shouldFlattenfalse
      4. depth > 0 なら
        1. shouldFlatten を ? IsArray(element) に設定。
      5. shouldFlattentrue なら
        1. depth = +∞ なら newDepth = +∞。
        2. そうでなければ newDepth = depth - 1。
        3. elementLen を ? LengthOfArrayLike(element)。
        4. targetIndex を ? FlattenIntoArray(target, element, elementLen, targetIndex, newDepth) に設定。
      6. そうでなければ
        1. targetIndex ≥ 253 - 1 なら TypeError 例外。
        2. CreateDataPropertyOrThrow(target, ! ToString(𝔽(targetIndex)), element)。
        3. targetIndex++。
    4. sourceIndexsourceIndex + 1𝔽
  5. targetIndex を返す。

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

このメソッドは呼び出し時以下を実行する:

  1. O を ? ToObject(this value)。
  2. sourceLen を ? LengthOfArrayLike(O)。
    1. IsCallable(mapperFunction) が false なら TypeError 例外。
  3. A を ? ArraySpeciesCreate(O, 0)。
  4. FlattenIntoArray(A, O, sourceLen, 0, 1, mapperFunction, thisArg) を実行。
  5. A を返す。

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

Note 1

callback は 3 引数を受け取る関数であるべき。forEach は昇順で存在する各要素に対し callback を 1 回呼ぶ。欠落要素には呼ばれない。

thisArg があれば this 値、なければ undefined

callback の引数は (値, インデックス, 対象オブジェクト)。

forEach 自体は直接オブジェクトを変更しないが callback により変更され得る。

処理範囲は開始前に決定。開始後に追加された要素は訪問されず、変更された要素は訪問時の値、開始後に削除されたものは訪問されない。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. IsCallable(callback) が false なら TypeError
  4. k = 0。
  5. k < len の間、
    1. Pk を ! ToString(𝔽(k))。
    2. kPresent を ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue を ? Get(O, Pk)。
      2. ? Call(callback, thisArg, « kValue, 𝔽(k), O »)。
    4. k++。
  6. undefined を返す。
Note 2

汎用。

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

Note 1

このメソッドは SameValueZero アルゴリズムで昇順に searchElement と各要素を比較し、いずれかで一致したら true、なければ false を返す。

第 2 引数 fromIndex の既定値は +0𝔽(全検索)。配列長以上なら false-0𝔽 未満なら末尾からのオフセットとして扱い、計算結果が +0𝔽 以下なら全検索。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. len = 0 なら false
  4. n を ? ToIntegerOrInfinity(fromIndex)。
  5. アサート: fromIndexundefined なら n = 0。
  6. n = +∞ なら false
  7. そうでなく n = -∞ なら n = 0。
  8. n ≥ 0 なら
    1. k = n
  9. そうでなければ
    1. k = len + n
    2. k < 0 なら k = 0。
  10. k < len の間、
    1. elementK を ? Get(O, ! ToString(𝔽(k)))。
    2. SameValueZero(searchElement, elementK) が true なら true
    3. k++。
  11. false を返す。
Note 2

汎用。

Note 3

このメソッドは indexOf と異なり、SameValueZero を使うため NaN を検出でき、欠落要素をスキップせず undefined として扱う。

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

昇順で IsStrictlyEqual アルゴリズムにより比較し、マッチする最小インデックスを返し、なければ -1𝔽 を返す。

Note 1

第 2 引数 fromIndex の既定値は +0𝔽。配列長以上なら検索せず -1𝔽-0𝔽 未満なら末尾からのオフセットとして扱い、結果が +0𝔽 以下なら全検索。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. len = 0 なら -1𝔽
  4. n を ? ToIntegerOrInfinity(fromIndex)。
  5. アサート: fromIndexundefined なら n = 0。
  6. n = +∞ なら -1𝔽
  7. そうでなく n = -∞ なら n = 0。
  8. n ≥ 0 なら
    1. k = n
  9. そうでなければ
    1. k = len + n
    2. k < 0 なら k = 0。
  10. k < len の間、
    1. Pk を ! ToString(𝔽(k))。
    2. kPresent を ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. elementK を ? Get(O, Pk)。
      2. IsStrictlyEqual(searchElement, elementK) が true なら 𝔽(k)。
    4. k++。
  11. -1𝔽 を返す。
Note 2

汎用。

23.1.3.18 Array.prototype.join ( separator )

配列要素を String に変換し separator を挟んで連結した結果を返す。separator 未指定ならカンマ。

呼び出し時手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. separatorundefined なら sep = ",";そうでなければ sep = ? ToString(separator)。
  4. R を空文字列。
  5. k = 0。
  6. k < len の間、
    1. k > 0 なら RRsep の連結に更新。
    2. element を ? Get(O, ! ToString(𝔽(k)))。
    3. elementundefined でも null でもなければ
      1. S を ? ToString(element)。
      2. RRS の連結に。
    4. k++。
  7. R を返す。
Note

汎用。

23.1.3.19 Array.prototype.keys ( )

このメソッドは呼び出し時以下を実行する:

  1. O を ? ToObject(this value)。
  2. CreateArrayIterator(O, key) を返す。

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

Note 1

降順で IsStrictlyEqual により比較し、一致した最大インデックスを返し、なければ -1𝔽

第2引数 fromIndex の既定は長さ−1。長さ以上なら全検索。-0𝔽 未満なら末尾からのオフセット。計算結果が +0𝔽 以下なら -1𝔽

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. len = 0 なら -1𝔽
  4. fromIndex が存在すれば n = ? ToIntegerOrInfinity(fromIndex);そうでなければ n = len - 1。
  5. n = -∞ なら -1𝔽
  6. n ≥ 0 なら
    1. k = min(n, len - 1)。
  7. そうでなければ
    1. k = len + n
  8. k ≥ 0 の間、
    1. Pk を ! ToString(𝔽(k))。
    2. kPresent を ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. elementK を ? Get(O, Pk)。
      2. IsStrictlyEqual(searchElement, elementK) が true なら 𝔽(k)。
    4. k--。
  9. -1𝔽 を返す。
Note 2

汎用。

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

Note 1

callback は 3 引数を受ける関数であるべき。map は昇順に各要素に対し callback を呼び、その結果から新しい配列を作成。欠落要素には呼ばない。

thisArg があれば this、なければ undefined

callback の引数: (値, インデックス, 対象)。

map 自体は直接ミューテーションしないが callback による変更はあり得る。

処理範囲は開始前に固定。開始後追加要素は無視、変更要素は訪問時点の値、開始後削除された要素は訪問されない。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. IsCallable(callback) が false なら TypeError
  4. A を ? ArraySpeciesCreate(O, len)。
  5. k = 0。
  6. k < len の間、
    1. Pk を ! ToString(𝔽(k))。
    2. kPresent を ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue を ? Get(O, Pk)。
      2. mappedValue を ? Call(callback, thisArg, « kValue, 𝔽(k), O »)。
      3. CreateDataPropertyOrThrow(A, Pk, mappedValue)。
    4. k++。
  7. A を返す。
Note 2

汎用。

23.1.3.22 Array.prototype.pop ( )

Note 1

最後の要素を削除して返す。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. len = 0 なら
    1. Set(O, "length", +0𝔽, true)。
    2. undefined を返す。
  4. それ以外
    1. アサート: len > 0。
    2. newLen = 𝔽(len - 1)。
    3. index = ! ToString(newLen)。
    4. element を ? Get(O, index)。
    5. DeletePropertyOrThrow(O, index)。
    6. Set(O, "length", newLen, true)。
    7. element を返す。
Note 2

汎用。

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

Note 1

引数を末尾に順に追加し新しい長さを返す。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. argCountitems の要素数。
  4. len + argCount > 253 - 1 なら TypeError
  5. Eitems について
    1. Set(O, ! ToString(𝔽(len)), E, true)。
    2. len++。
  6. Set(O, "length", 𝔽(len), true)。
  7. 𝔽(len) を返す。

このメソッドの "length"1𝔽

Note 2

汎用。

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

Note 1

callback は 4 引数を受け取るべき。reduce は最初の(もしくは初期値を与えた場合その次の)要素以降に対して昇順で 1 回ずつ呼ぶ。

callback の引数: previousValue, currentValue, currentIndex, 走査対象オブジェクト。最初の呼び出し時の previousValuecurrentValue は初期値有無で変化。空配列かつ初期値なしは TypeError

reduce 自体は直接ミューテートしない。

処理範囲は開始前固定。追加要素は無視。変更要素は訪問時の値。開始後削除された要素は訪問されない。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. IsCallable(callback) が false なら TypeError
  4. len = 0 かつ initialValue が無ければ TypeError
  5. k = 0。
  6. accumulator = undefined
  7. initialValue が存在すれば
    1. accumulator = initialValue
  8. そうでなければ
    1. kPresent = false
    2. kPresentfalse かつ k < len の間、
      1. Pk = ! ToString(𝔽(k))。
      2. kPresent = ? HasProperty(O, Pk)。
      3. kPresenttrue なら
        1. accumulator = ? Get(O, Pk)。
      4. k++。
    3. kPresentfalse なら TypeError
  9. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kPresent = ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue = ? Get(O, Pk)。
      2. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »)。
    4. k++。
  10. accumulator を返す。
Note 2

汎用。

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

Note 1

説明は reduce の逆方向版。空配列で初期値なしは TypeError

手順:

  1. O, len を前節同様に取得。
  2. IsCallable(callback) が false なら TypeError
  3. len = 0 かつ initialValue 無しなら TypeError
  4. k = len - 1。
  5. accumulator = undefined
  6. initialValue が存在すれば
    1. accumulator = initialValue
  7. そうでなければ
    1. kPresent = false
    2. kPresentfalse かつ k ≥ 0 の間、
      1. Pk = ! ToString(𝔽(k))。
      2. kPresent = ? HasProperty(O, Pk)。
      3. kPresenttrue なら
        1. accumulator = ? Get(O, Pk)。
      4. k--。
    3. kPresentfalse なら TypeError
  8. k ≥ 0 の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kPresent = ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue = ? Get(O, Pk)。
      2. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »)。
    4. k--。
  9. accumulator を返す。
Note 2

汎用。

23.1.3.26 Array.prototype.reverse ( )

Note 1

要素順序を反転し配列を返す。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. middle = floor(len / 2)。
  4. lower = 0。
  5. lowermiddle の間、
    1. upper = len - lower - 1。
    2. upperP = ! ToString(𝔽(upper))。
    3. lowerP = ! ToString(𝔽(lower))。
    4. lowerExists = ? HasProperty(O, lowerP)。
    5. lowerExiststrue なら lowerValue = ? Get(O, lowerP)。
    6. upperExists = ? HasProperty(O, upperP)。
    7. upperExiststrue なら upperValue = ? Get(O, upperP)。
    8. 両方 true なら
      1. Set(O, lowerP, upperValue, true)。
      2. Set(O, upperP, lowerValue, true)。
    9. そうでなく lowerExists false かつ upperExists true なら
      1. Set(O, lowerP, upperValue, true)。
      2. DeletePropertyOrThrow(O, upperP)。
    10. そうでなく lowerExists true かつ upperExists false なら
      1. DeletePropertyOrThrow(O, lowerP)。
      2. Set(O, upperP, lowerValue, true)。
    11. そうでなければ(両方 false)何もしない。
    12. lower++。
  6. O を返す。
Note 2

汎用。

23.1.3.27 Array.prototype.shift ( )

最初の要素を削除して返す。

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. len = 0 なら
    1. Set(O, "length", +0𝔽, true)。
    2. undefined を返す。
  4. first を ? Get(O, "0")。
  5. k = 1。
  6. k < len の間、
    1. from = ! ToString(𝔽(k))。
    2. to = ! ToString(𝔽(k - 1))。
    3. fromPresent = ? HasProperty(O, from)。
    4. fromPresenttrue なら
      1. fromValue = ? Get(O, from)。
      2. Set(O, to, fromValue, true)。
    5. そうでなければ
      1. DeletePropertyOrThrow(O, to)。
    6. k++。
  7. DeletePropertyOrThrow(O, ! ToString(𝔽(len - 1)))。
  8. Set(O, "length", 𝔽(len - 1), true)。
  9. first を返す。
Note

汎用。

23.1.3.28 Array.prototype.slice ( start, end )

start から(endundefined なら末尾まで、そうでなければ end 非含む)要素を含む新しい配列を返す。負値は長さを length として length + start, length + end

手順:

  1. O を ? ToObject(this value)。
  2. len を ? LengthOfArrayLike(O)。
  3. relativeStart を ? ToIntegerOrInfinity(start)。
  4. relativeStart = -∞ なら k = 0。
  5. そうでなく relativeStart < 0 なら k = max(len + relativeStart, 0)。
  6. それ以外は k = min(relativeStart, len)。
  7. endundefined なら relativeEnd = len;そうでなければ relativeEnd = ? ToIntegerOrInfinity(end)。
  8. relativeEnd = -∞ なら final = 0。
  9. そうでなく relativeEnd < 0 なら final = max(len + relativeEnd, 0)。
  10. それ以外は final = min(relativeEnd, len)。
  11. count = max(final - k, 0)。
  12. A を ? ArraySpeciesCreate(O, count)。
  13. n = 0。
  14. k < final の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kPresent = ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue = ? Get(O, Pk)。
      2. CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), kValue)。
    4. k++。
    5. n++。
  15. Set(A, "length", 𝔽(n), true) を実行。
  16. A を返す。
Note 1

で明示的に長さを設定するのは A が組込み Array でない場合でも正しい長さを保証するため。

Note 2

汎用。

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

Note 1

callback は 3 引数を受け Boolean へ強制可能な値を返す関数であるべき。sometrue を返す最初の要素を見つけるまで昇順で呼び、見つかれば true、なければ false。欠落要素は無視。

thisArg があれば this、なければ undefined

引数: (値, インデックス, 対象)。

オブジェクトは直接ミューテートしないが callback により変更され得る。

範囲は開始前に固定。追加要素は無視。変更要素は訪問時の値。削除要素は訪問されない。空配列では false(数学の「存在」量化)。

手順:

  1. O = ? ToObject(this value)。
  2. len = ? LengthOfArrayLike(O)。
  3. IsCallable(callback) が false なら TypeError
  4. k = 0。
  5. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kPresent = ? HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. kValue = ? Get(O, Pk)。
      2. testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »))。
      3. testResulttrue なら true
    4. k++。
  6. false を返す。
Note 2

汎用。

23.1.3.30 Array.prototype.sort ( comparator )

配列要素をソートする。comparatorundefined でなければ 2 引数 (x, y) を受け負数 / 正数 / 0 を返す関数であるべき。

手順:

  1. comparatorundefined でなく IsCallable(comparator) が false なら TypeError
  2. obj = ? ToObject(this value)。
  3. len = ? LengthOfArrayLike(obj)
  4. SortCompare を (x, y) を引数に comparator を捕捉し呼出時 CompareArrayElements を返す新しい抽象クロージャとする。
  5. sortedList = ? SortIndexedProperties(obj, len, SortCompare, skip-holes)
  6. itemCountsortedList の要素数。
  7. j = 0。
  8. j < itemCount の間、
    1. Set(obj, ! ToString(𝔽(j)), sortedList[j], true)。
    2. j++。
  9. 注記: ステップ の呼出は skip-holes を用いる。残りのインデックスは hole 数を保持するため削除する。
  10. j < len の間、
    1. DeletePropertyOrThrow(obj, ! ToString(𝔽(j)))。
    2. j++。
  11. obj を返す。
Note 1

存在しないプロパティ値は常に undefined より後方、かつ undefined は他の任意値より後方に並ぶため(CompareArrayElements 参照)、undefined が末尾、その後に非存在要素が続く。

Note 2

手順 , ToString によるメソッド呼出は SortCompare一貫した比較器にしない可能性がある。

Note 3

汎用。

23.1.3.30.1 SortIndexedProperties ( obj, len, SortCompare, holes )

The abstract operation SortIndexedProperties takes arguments obj (オブジェクト), len (非負整数), SortCompare (2 パラメータ抽象クロージャ), and holes (skip-holes または read-through-holes) and returns ECMAScript 言語値の List を含む通常完了または throw 完了. It performs the following steps when called:

  1. items を空 List
  2. k = 0。
  3. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. holesskip-holes なら
      1. kRead = ? HasProperty(obj, Pk)。
    3. そうでなければ(read-through-holes
      1. kRead = true
    4. kReadtrue なら
      1. kValue = ? Get(obj, Pk)。
      2. itemskValue を追加。
    5. k++。
  4. 実装定義SortCompare 呼出列 を用いて items をソート。いずれかの呼出が異常完了したらそれ以上呼び出さずその Completion Record を返す。
  5. items を返す。

ソート順 は上記アルゴリズムのステップ 後の items の順序。SortCompare一貫した比較器でない場合は実装定義。Array.prototype.sort または Array.prototype.toSorted により呼び出された場合で comparatorundefined かつ特定値への全ての ToString 適用結果が同じでない場合も実装定義

実装定義でない場合、次を満たすこと:

  • 非負整数 itemCount 未満の整数についてある置換 π が存在し、各 j (0 ≤ j < itemCount) で old[j]new[π(j)] と同一。
  • すべての j, k について (SortCompare(old[j], old[k])) < 0 なら π(j) < π(k)
  • j < k < itemCount かつ (SortCompare(old[j], old[k])) = 0 なら π(j) < π(k)(安定ソート)。

old[j] はステップ 前の items[j]new[j] は後の値。

抽象クロージャまたは関数 comparator が集合 S一貫した比較器 であるとは、任意の a, b, cS について以下を満たすこと。記法 a <C b(comparator(a, b)) < 0 を、=C, >C も同様。

  • 同一ペア (a, b) への呼出は常に同じ Number vNaN でない)を返し、三つの関係のいずれかのみ成り立つ。
  • comparator 呼出は obj またはそのプロトタイプチェーン上のオブジェクトを変更しない。
  • 反射律: a =C a
  • 対称律: a =C bb =C a
  • 推移律 (=): a =C b, b =C ca =C c
  • 推移律 (<): a <C b, b <C ca <C c
  • 推移律 (>): a >C b, b >C ca >C c
Note

これら条件は comparatorS を同値類に分割し、それらが全順序付けされるために必要十分。

23.1.3.30.2 CompareArrayElements ( x, y, comparator )

The abstract operation CompareArrayElements takes arguments x (ECMAScript 言語値), y (ECMAScript 言語値), and comparator (関数オブジェクトまたは undefined) and returns Number を含む通常完了または異常完了. It performs the following steps when called:

  1. xy が共に undefined なら +0𝔽
  2. xundefined なら 1𝔽
  3. yundefined なら -1𝔽
  4. comparatorundefined でなければ
    1. v を ? ToNumber(? Call(comparator, undefined, « x, y »))。
    2. vNaN なら +0𝔽 を返す。
    3. v を返す。
  5. xString = ? ToString(x)
  6. yString = ? ToString(y)
  7. xSmaller = ! IsLessThan(xString, yString, true)。
  8. xSmallertrue なら -1𝔽
  9. ySmaller = ! IsLessThan(yString, xString, true)。
  10. ySmallertrue なら 1𝔽
  11. +0𝔽 を返す。

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

Note 1

start 位置から deleteCount 個を削除し、items を挿入する。削除要素の配列を返す。

手順:

  1. O = ? ToObject(this value)。
  2. len = ? LengthOfArrayLike(O)。
  3. relativeStart = ? ToIntegerOrInfinity(start)。
  4. relativeStart = -∞ なら actualStart = 0。
  5. そうでなく relativeStart < 0 なら actualStart = max(len + relativeStart, 0)。
  6. それ以外は actualStart = min(relativeStart, len)。
  7. itemCountitems の要素数。
  8. start が存在しなければ actualDeleteCount = 0。
  9. そうでなく deleteCount が存在しなければ actualDeleteCount = len - actualStart
  10. それ以外
    1. dc = ? ToIntegerOrInfinity(deleteCount)。
    2. actualDeleteCount = clamp(dc, 0, len - actualStart)。
  11. len + itemCount - actualDeleteCount > 253 - 1 なら TypeError
  12. A = ? ArraySpeciesCreate(O, actualDeleteCount)。
  13. k = 0。
  14. k < actualDeleteCount の間、
    1. from = ! ToString(𝔽(actualStart + k))。
    2. HasProperty(O, from) が true なら
      1. fromValue = ? Get(O, from)。
      2. CreateDataPropertyOrThrow(A, ! ToString(𝔽(k)), fromValue)。
    3. k++。
  15. Set(A, "length", 𝔽(actualDeleteCount), true) を実行。
  16. itemCount < actualDeleteCount の場合
    1. k = actualStart
    2. k < (len - actualDeleteCount) の間、
      1. from = ! ToString(𝔽(k + actualDeleteCount))。
      2. to = ! ToString(𝔽(k + itemCount))。
      3. HasProperty(O, from) が true なら
        1. fromValue = ? Get(O, from)。
        2. Set(O, to, fromValue, true)。
      4. そうでなければ ? DeletePropertyOrThrow(O, to)。
      5. k++。
    3. k = len
    4. k > (len - actualDeleteCount + itemCount) の間、
      1. DeletePropertyOrThrow(O, ! ToString(𝔽(k - 1)))。
      2. k--。
  17. そうでなく itemCount > actualDeleteCount の場合
    1. k = (len - actualDeleteCount)。
    2. k > actualStart の間、
      1. from = ! ToString(𝔽(k + actualDeleteCount - 1))。
      2. to = ! ToString(𝔽(k + itemCount - 1))。
      3. HasProperty(O, from) が true なら
        1. fromValue = ? Get(O, from)。
        2. Set(O, to, fromValue, true)。
      4. そうでなければ ? DeletePropertyOrThrow(O, to)。
      5. k--。
  18. k = actualStart
  19. Eitems について
    1. Set(O, ! ToString(𝔽(k)), E, true)。
    2. k++。
  20. Set(O, "length", 𝔽(len - actualDeleteCount + itemCount), true) を実行。
  21. A を返す。
Note 2

ステップ , で明示的に長さを設定するのは組込み配列でない場合でも正しい長さを保証するため。

Note 3

汎用。

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

ECMA-402 国際化 API を含む実装は ECMA-402 仕様に従って実装しなければならない。含まない場合は以下の仕様を用いる。

Note 1

ECMA-402 第 1 版はこのメソッドの代替仕様を含まなかった。

オプション引数の意味は ECMA-402 に定義され、未サポート実装は他目的に利用してはならない。

手順:

  1. array = ? ToObject(this value)。
  2. len = ? LengthOfArrayLike(array)。
  3. separatorホストロケールに適切な実装定義リスト区切り文字列(例 ", ")とする。
  4. R を空文字列。
  5. k = 0。
  6. k < len の間、
    1. k > 0 なら R = R + separator
    2. element = ? Get(array, ! ToString(𝔽(k)))。
    3. elementundefined でも null でもなければ
      1. S = ? ToString(? Invoke(element, "toLocaleString"))。
      2. R = R + S
    4. k++。
  7. R を返す。
Note 2

各要素の toLocaleString 結果をロケール依存区切りで連結。toString のロケール感知版。

Note 3

汎用。

23.1.3.33 Array.prototype.toReversed ( )

このメソッドは呼び出し時以下を実行する:

  1. O = ? ToObject(this value)。
  2. len = ? LengthOfArrayLike(O)。
  3. A = ? ArrayCreate(len)。
  4. k = 0。
  5. k < len の間、
    1. from = ! ToString(𝔽(len - k - 1))。
    2. Pk = ! ToString(𝔽(k))。
    3. fromValue = ? Get(O, from)。
    4. CreateDataPropertyOrThrow(A, Pk, fromValue)。
    5. k++。
  6. A を返す。

23.1.3.34 Array.prototype.toSorted ( comparator )

呼び出し時手順:

  1. comparatorundefined でなく IsCallable(comparator) が false なら TypeError
  2. O = ? ToObject(this value)。
  3. len = ? LengthOfArrayLike(O)。
  4. A = ? ArrayCreate(len)。
  5. SortCompare を (x, y) を引数に comparator を捕捉し CompareArrayElements を呼ぶ抽象クロージャとする。
  6. sortedList = ? SortIndexedProperties(O, len, SortCompare, read-through-holes)。
  7. j = 0。
  8. j < len の間、
    1. CreateDataPropertyOrThrow(A, ! ToString(𝔽(j)), sortedList[j])。
    2. j++。
  9. A を返す。

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

呼び出し時手順:

  1. O = ? ToObject(this value)。
  2. len = ? LengthOfArrayLike(O)。
  3. relativeStart = ? ToIntegerOrInfinity(start)。
  4. relativeStart = -∞ なら actualStart = 0。
  5. そうでなく relativeStart < 0 なら actualStart = max(len + relativeStart, 0)。
  6. それ以外は actualStart = min(relativeStart, len)。
  7. insertCountitems 要素数。
  8. start が存在しなければ actualSkipCount = 0。
  9. そうでなく skipCount が存在しなければ actualSkipCount = len - actualStart
  10. それ以外
    1. sc = ? ToIntegerOrInfinity(skipCount)。
    2. actualSkipCount = clamp(sc, 0, len - actualStart)。
  11. newLen = len + insertCount - actualSkipCount
  12. newLen > 253 - 1 なら TypeError
  13. A = ? ArrayCreate(newLen)。
  14. i = 0。
  15. r = actualStart + actualSkipCount
  16. i < actualStart の間、
    1. Pi = ! ToString(𝔽(i))。
    2. iValue = ? Get(O, Pi)。
    3. CreateDataPropertyOrThrow(A, Pi, iValue)。
    4. i++。
  17. Eitems について
    1. Pi = ! ToString(𝔽(i))。
    2. CreateDataPropertyOrThrow(A, Pi, E)。
    3. i++。
  18. i < newLen の間、
    1. Pi = ! ToString(𝔽(i))。
    2. from = ! ToString(𝔽(r))。
    3. fromValue = ? Get(O, from)。
    4. CreateDataPropertyOrThrow(A, Pi, fromValue)。
    5. i++。
    6. r++。
  19. A を返す。

23.1.3.36 Array.prototype.toString ( )

呼び出し時手順:

  1. array = ? ToObject(this value)。
  2. func = ? Get(array, "join")。
  3. IsCallable(func) が false なら func を %Object.prototype.toString% に設定。
  4. ? Call(func, array) を返す。
Note

汎用。

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

引数を配列先頭に順序を保って挿入する。

手順:

  1. O = ? ToObject(this value)。
  2. len = ? LengthOfArrayLike(O)。
  3. argCount = items の要素数。
  4. argCount > 0 なら
    1. len + argCount > 253 - 1 なら TypeError
    2. k = len
    3. k > 0 の間、
      1. from = ! ToString(𝔽(k - 1))。
      2. to = ! ToString(𝔽(k + argCount - 1))。
      3. fromPresent = ? HasProperty(O, from)。
      4. fromPresenttrue なら
        1. fromValue = ? Get(O, from)。
        2. Set(O, to, fromValue, true)。
      5. そうでなければ ? DeletePropertyOrThrow(O, to)。
      6. k--。
    4. j = +0𝔽
    5. Eitems について
      1. Set(O, ! ToString(j), E, true)。
      2. j += 1𝔽
  5. Set(O, "length", 𝔽(len + argCount), true)。
  6. 𝔽(len + argCount) を返す。

このメソッドの "length"1𝔽

Note

汎用。

23.1.3.38 Array.prototype.values ( )

呼び出し時手順:

  1. O = ? ToObject(this value)。
  2. CreateArrayIterator(O, value) を返す。

23.1.3.39 Array.prototype.with ( index, value )

呼び出し時手順:

  1. O = ? ToObject(this value)。
  2. len = ? LengthOfArrayLike(O)。
  3. relativeIndex = ? ToIntegerOrInfinity(index)。
  4. relativeIndex ≥ 0 なら actualIndex = relativeIndex;そうでなければ actualIndex = len + relativeIndex
  5. actualIndexlen または actualIndex < 0 なら RangeError
  6. A = ? ArrayCreate(len)。
  7. k = 0。
  8. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. k = actualIndex なら fromValue = value;そうでなければ fromValue = ? Get(O, Pk)。
    3. CreateDataPropertyOrThrow(A, Pk, fromValue)。
    4. k++。
  9. A を返す。

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

%Symbol.iterator% プロパティの初期値は 23.1.3.38 で定義される %Array.prototype.values% である。

23.1.3.41 Array.prototype [ %Symbol.unscopables% ]

%Symbol.unscopables% データプロパティの初期値は以下で生成されるオブジェクト:

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

このプロパティは { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } 属性を持つ。

Note

このオブジェクトの own プロパティ名は ECMAScript 2015 以前に Array.prototype の標準プロパティでなかった名前であり、with 文でシャドウされる既存コードの挙動を守るため無視される。

"with" が含まれないのは既に 予約語 であるため。

23.1.4 Array インスタンスのプロパティ

Array インスタンスは Array エキゾチックオブジェクトであり、その内部メソッドを持つ。Array プロトタイプオブジェクトからプロパティを継承する。

Array インスタンスは "length" プロパティと配列インデックス名を持つ列挙可能プロパティ集合を有する。

23.1.4.1 length

Array インスタンスの "length" プロパティは、配列インデックス名を持つ全ての configurable な自プロパティ名より常に数値的に大きい値を持つデータプロパティである。

初期属性は { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }。

Note

"length" の値を減少させると旧値と新値の間のインデックスを持つ自要素が削除される(ただし非設定可能は削除不可)。非設定可能な array-indexed プロパティの最大値以上に "length" を減らそうとすると、その最大値 + 1 に設定される。10.4.2.1 参照。

23.1.5 Array イテレータオブジェクト

Array Iterator は特定の Array インスタンス上の反復を表すオブジェクトである。名前付きコンストラクターは存在せず、Array インスタンスの特定メソッド呼出により生成される。

23.1.5.1 CreateArrayIterator ( array, kind )

The abstract operation CreateArrayIterator takes arguments array (オブジェクト) and kind (key+value, key, または value) and returns オブジェクト. Array メソッドが返すイテレータオブジェクトを生成するために用いる。 It performs the following steps when called:

  1. iteratorOrdinaryObjectCreate(%ArrayIteratorPrototype%, « [[IteratedArrayLike]], [[ArrayLikeNextIndex]], [[ArrayLikeIterationKind]] ») とする。
  2. iterator.[[IteratedArrayLike]] = array
  3. iterator.[[ArrayLikeNextIndex]] = 0。
  4. iterator.[[ArrayLikeIterationKind]] = kind
  5. iterator を返す。

23.1.5.2 %ArrayIteratorPrototype% オブジェクト

%ArrayIteratorPrototype% オブジェクト:

  • Array Iterator オブジェクトが継承するプロパティを持つ。
  • 通常のオブジェクト。
  • [[Prototype]] 内部スロット値は %Iterator.prototype%
  • 以下のプロパティを持つ:

23.1.5.2.1 %ArrayIteratorPrototype%.next ( )

  1. Othis 値。
  2. O がオブジェクトでなければ TypeError
  3. OArray Iterator Instance の全内部スロットを持たなければ TypeError
  4. array = O.[[IteratedArrayLike]]
  5. arrayundefined なら CreateIteratorResultObject(undefined, true)。
  6. index = O.[[ArrayLikeNextIndex]]
  7. kind = O.[[ArrayLikeIterationKind]]
  8. array[[TypedArrayName]] 内部スロットを持つなら
    1. taRecord = MakeTypedArrayWithBufferWitnessRecord(array, seq-cst)。
    2. IsTypedArrayOutOfBounds(taRecord) が true なら TypeError
    3. len = TypedArrayLength(taRecord)。
  9. そうでなければ
    1. len = ? LengthOfArrayLike(array)。
  10. indexlen なら
    1. O.[[IteratedArrayLike]] = undefined
    2. CreateIteratorResultObject(undefined, true) を返す。
  11. O.[[ArrayLikeNextIndex]] = index + 1。
  12. indexNumber = 𝔽(index)。
  13. kind = key なら
    1. result = indexNumber
  14. そうでなければ
    1. elementKey = ! ToString(indexNumber)。
    2. elementValue = ? Get(array, elementKey)。
    3. kind = value なら
      1. result = elementValue
    4. そうでなければ(key+value
      1. result = CreateArrayFromListindexNumber, elementValue »)。
  15. CreateIteratorResultObject(result, false) を返す。

23.1.5.2.2 %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag% プロパティの初期値は文字列 "Array Iterator"

属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }。

23.1.5.3 Array Iterator インスタンスのプロパティ

Array Iterator インスタンスは %ArrayIteratorPrototype% から継承する通常オブジェクトで、初期化時に Table 72 の内部スロットを持つ。

Table 72: Array Iterator インスタンスの内部スロット
Internal Slot Type Description
[[IteratedArrayLike]] an Object or undefined 反復対象となる配列ライクオブジェクト。
[[ArrayLikeNextIndex]] a non-negative integer 次に調べる要素の整数インデックス
[[ArrayLikeIterationKind]] key+value, key, or value 各反復で返す内容を識別する値。

23.2 TypedArray オブジェクト

TypedArray は基礎となるバイナリデータバッファ (25.1) に対する配列ライクなビューを提供する。TypedArray 要素型TypedArray インスタンスのすべての要素が持つ基礎バイナリのスカラーデータ型である。サポートされる各要素型ごとに Table 73 に列挙される別個の TypedArray コンストラクターが存在する。Table 73 内の各コンストラクターはそれぞれ固有のプロトタイプオブジェクトを持つ。

Table 73: TypedArray コンストラクタ
コンストラクター名と組込み 要素型 要素サイズ 変換操作 説明
Int8Array
%Int8Array%
int8 1 ToInt8 8 ビット 2 の補数符号付き整数
Uint8Array
%Uint8Array%
uint8 1 ToUint8 8 ビット符号なし整数
Uint8ClampedArray
%Uint8ClampedArray%
uint8clamped 1 ToUint8Clamp 8 ビット符号なし整数 (クランプ変換)
Int16Array
%Int16Array%
int16 2 ToInt16 16 ビット 2 の補数符号付き整数
Uint16Array
%Uint16Array%
uint16 2 ToUint16 16 ビット符号なし整数
Int32Array
%Int32Array%
int32 4 ToInt32 32 ビット 2 の補数符号付き整数
Uint32Array
%Uint32Array%
uint32 4 ToUint32 32 ビット符号なし整数
BigInt64Array
%BigInt64Array%
bigint64 8 ToBigInt64 64 ビット 2 の補数符号付き整数
BigUint64Array
%BigUint64Array%
biguint64 8 ToBigUint64 64 ビット符号なし整数
Float16Array
%Float16Array%
float16 2 16 ビット IEEE 浮動小数点
Float32Array
%Float32Array%
float32 4 32 ビット IEEE 浮動小数点
Float64Array
%Float64Array%
float64 8 64 ビット IEEE 浮動小数点

以下の定義では TypedArray への参照は上表から適切なコンストラクター名に置き換えるものとする。

23.2.1 %TypedArray% 組込みオブジェクト

%TypedArray% 組込みオブジェクト:

23.2.1.1 %TypedArray% ( )

この関数は呼び出し時に次を行う:

  1. TypeError 例外を投げる。

この関数の "length" プロパティは +0𝔽 である。

23.2.2 %TypedArray% 組込みオブジェクトのプロパティ

%TypedArray% 組込みオブジェクト:

  • %Function.prototype%[[Prototype]] 内部スロットを持つ。
  • "name" プロパティ値は "TypedArray"
  • 以下のプロパティを持つ:

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

このメソッドは呼び出し時に以下を行う:

  1. Cthis 値とする。
  2. IsConstructor(C) が false なら TypeError 例外。
  3. mapperundefined なら
    1. mappingfalse とする。
  4. そうでなければ
    1. IsCallable(mapper) が false なら TypeError 例外。
    2. mappingtrue とする。
  5. usingIterator を ? GetMethod(source, %Symbol.iterator%) とする。
  6. usingIteratorundefined でなければ
    1. values を ? IteratorToList(? GetIteratorFromMethod(source, usingIterator)) とする。
    2. lenvalues の要素数とする。
    3. targetObj を ? TypedArrayCreateFromConstructor(C, « 𝔽(len) ») とする。
    4. k = 0。
    5. k < len の間繰り返し、
      1. Pk = ! ToString(𝔽(k))。
      2. kValuevalues の先頭要素とする。
      3. values から先頭要素を除去。
      4. mappingtrue なら
        1. mappedValue = ? Call(mapper, thisArg, « kValue, 𝔽(k) »)。
      5. そうでなければ
        1. mappedValue = kValue
      6. Set(targetObj, Pk, mappedValue, true)。
      7. kk + 1 に。
    6. アサート: values は空 List
    7. targetObj を返す。
  7. 注: sourceiterable でないので配列ライクであるとみなす。
  8. arrayLike = ! ToObject(source)。
  9. len = ? LengthOfArrayLike(arrayLike)。
  10. targetObj = ? TypedArrayCreateFromConstructor(C, « 𝔽(len) »)。
  11. k = 0。
  12. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ? Get(arrayLike, Pk)。
    3. mappingtrue なら
      1. mappedValue = ? Call(mapper, thisArg, « kValue, 𝔽(k) »)。
    4. そうでなければ
      1. mappedValue = kValue
    5. Set(targetObj, Pk, mappedValue, true)。
    6. k++。
  13. targetObj を返す。

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

このメソッドは呼び出し時に以下を行う:

  1. lenitems の要素数とする。
  2. Cthis 値とする。
  3. IsConstructor(C) が false なら TypeError 例外。
  4. newObj = ? TypedArrayCreateFromConstructor(C, « 𝔽(len) »)。
  5. k = 0。
  6. k < len の間、
    1. kValue = items[k]。
    2. Pk = ! ToString(𝔽(k))。
    3. Set(newObj, Pk, kValue, true)。
    4. k++。
  7. newObj を返す。

23.2.2.3 %TypedArray%.prototype

%TypedArray%.prototype の初期値は %TypedArray% プロトタイプオブジェクトである。

このプロパティは { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } を持つ。

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

%TypedArray%[%Symbol.species%] は set アクセサが undefinedアクセサプロパティであり、get アクセサは以下を行う:

  1. this 値を返す。

この関数の "name" プロパティ値は "get [Symbol.species]"

Note

%TypedArray.prototype% の各メソッドは通常 this 値のコンストラクターを用いて派生オブジェクトを生成する。サブクラスコンストラクターは %Symbol.species% を再定義して既定挙動を上書きできる。

23.2.3 %TypedArray% プロトタイプオブジェクトのプロパティ

%TypedArray% プロトタイプオブジェクト:

  • [[Prototype]] 内部スロット値は %Object.prototype%
  • %TypedArray.prototype% である。
  • 通常のオブジェクトである。
  • [[ViewedArrayBuffer]] など TypedArray インスタンス特有の内部スロットを持たない。

23.2.3.1 %TypedArray%.prototype.at ( index )

  1. Othis 値とする。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. relativeIndex = ? ToIntegerOrInfinity(index)。
  5. relativeIndex ≥ 0 なら
    1. k = relativeIndex
  6. そうでなければ
    1. k = len + relativeIndex
  7. k < 0 または klen なら undefined を返す。
  8. Get(O, ! ToString(𝔽(k))) を返す。

23.2.3.2 get %TypedArray%.prototype.buffer

%TypedArray%.prototype.buffer は set アクセサが undefinedアクセサプロパティであり、get アクセサは以下を行う:

  1. Othis 値とする。
  2. RequireInternalSlot(O, [[TypedArrayName]])。
  3. アサート: O[[ViewedArrayBuffer]] 内部スロットを持つ。
  4. buffer = O.[[ViewedArrayBuffer]]
  5. buffer を返す。

23.2.3.3 get %TypedArray%.prototype.byteLength

%TypedArray%.prototype.byteLength は set アクセサが undefinedアクセサプロパティであり、get アクセサは以下を行う:

  1. Othis 値。
  2. RequireInternalSlot(O, [[TypedArrayName]])。
  3. アサート: O[[ViewedArrayBuffer]] 内部スロットを持つ。
  4. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst)。
  5. size = TypedArrayByteLength(taRecord)。
  6. 𝔽(size) を返す。

23.2.3.4 get %TypedArray%.prototype.byteOffset

%TypedArray%.prototype.byteOffset は set アクセサが undefinedアクセサプロパティであり、get アクセサは以下を行う:

  1. Othis 値。
  2. RequireInternalSlot(O, [[TypedArrayName]])。
  3. アサート: O[[ViewedArrayBuffer]] 内部スロットを持つ。
  4. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst)。
  5. IsTypedArrayOutOfBounds(taRecord) が true なら +0𝔽 を返す。
  6. offset = O.[[ByteOffset]]
  7. 𝔽(offset) を返す。

23.2.3.5 %TypedArray%.prototype.constructor

%TypedArray%.prototype.constructor の初期値は %TypedArray% である。

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

引数の意味と使用法は 23.1.3.4 に定義された Array.prototype.copyWithin と同じ。

このメソッドは呼び出し時に次を行う:

  1. Othis 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. relativeTarget = ? ToIntegerOrInfinity(target)。
  5. relativeTarget = -∞ なら targetIndex = 0。
  6. そうでなく relativeTarget < 0 なら targetIndex = max(len + relativeTarget, 0)。
  7. それ以外は targetIndex = min(relativeTarget, len)。
  8. relativeStart = ? ToIntegerOrInfinity(start)。
  9. relativeStart = -∞ なら startIndex = 0。
  10. そうでなく relativeStart < 0 なら startIndex = max(len + relativeStart, 0)。
  11. それ以外は startIndex = min(relativeStart, len)。
  12. endundefined なら relativeEnd = len; そうでなければ relativeEnd = ? ToIntegerOrInfinity(end)。
  13. relativeEnd = -∞ なら endIndex = 0。
  14. そうでなく relativeEnd < 0 なら endIndex = max(len + relativeEnd, 0)。
  15. それ以外は endIndex = min(relativeEnd, len)。
  16. count = min(endIndex - startIndex, len - targetIndex)。
  17. count > 0 なら
    1. 注: コピーはソースのビットレベルエンコーディングを保持する方法で行わねばならない。
    2. buffer = O.[[ViewedArrayBuffer]]
    3. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst)。
    4. IsTypedArrayOutOfBounds(taRecord) が true なら TypeError
    5. len = TypedArrayLength(taRecord)。
    6. elementSize = TypedArrayElementSize(O)。
    7. byteOffset = O.[[ByteOffset]]
    8. bufferByteLimit = (len × elementSize) + byteOffset
    9. toByteIndex = (targetIndex × elementSize) + byteOffset
    10. fromByteIndex = (startIndex × elementSize) + byteOffset
    11. countBytes = count × elementSize
    12. もし fromByteIndex < toByteIndex かつ toByteIndex < fromByteIndex + countBytes なら
      1. direction = -1。
      2. fromByteIndex = fromByteIndex + countBytes - 1。
      3. toByteIndex = toByteIndex + countBytes - 1。
    13. そうでなければ
      1. direction = 1。
    14. countBytes > 0 の間繰り返し、
      1. もし fromByteIndex < bufferByteLimit かつ toByteIndex < bufferByteLimit なら
        1. value = GetValueFromBuffer(buffer, fromByteIndex, uint8, true, unordered)。
        2. SetValueInBuffer(buffer, toByteIndex, uint8, value, true, unordered) を実行。
        3. fromByteIndex += direction
        4. toByteIndex += direction
        5. countBytes = countBytes - 1。
      2. そうでなければ
        1. countBytes = 0。
  18. O を返す。

23.2.3.7 %TypedArray%.prototype.entries ( )

このメソッドは呼び出し時に次を行う:

  1. Othis 値。
  2. ValidateTypedArray(O, seq-cst)。
  3. CreateArrayIterator(O, key+value) を返す。

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

引数の意味と使用法は 23.1.3.6Array.prototype.every と同じ。

このメソッドは呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. IsCallable(callback) が false なら TypeError
  5. k = 0。
  6. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ! Get(O, Pk)。
    3. testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »))。
    4. testResultfalse なら false
    5. k++。
  7. true を返す。

このメソッドは汎用ではない。this 値は [[TypedArrayName]] 内部スロットを持つオブジェクトでなければならない。

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

引数の意味と使用法は 23.1.3.7Array.prototype.fill と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. O.[[ContentType]]bigint なら value = ? ToBigInt(value)。そうでなければ value = ? ToNumber(value)。
  5. relativeStart = ? ToIntegerOrInfinity(start)。
  6. relativeStart = -∞ なら startIndex = 0。
  7. そうでなく relativeStart < 0 なら startIndex = max(len + relativeStart, 0)。
  8. それ以外は startIndex = min(relativeStart, len)。
  9. endundefined なら relativeEnd = len; そうでなければ relativeEnd = ? ToIntegerOrInfinity(end)。
  10. relativeEnd = -∞ なら endIndex = 0。
  11. そうでなく relativeEnd < 0 なら endIndex = max(len + relativeEnd, 0)。
  12. それ以外は endIndex = min(relativeEnd, len)。
  13. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst)。
  14. IsTypedArrayOutOfBounds(taRecord) が true なら TypeError
  15. len = TypedArrayLength(taRecord)。
  16. endIndex = min(endIndex, len)。
  17. k = startIndex
  18. k < endIndex の間、
    1. Pk = ! ToString(𝔽(k))。
    2. Set(O, Pk, value, true)。
    3. k++。
  19. O を返す。

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

引数の意味と使用法は 23.1.3.8Array.prototype.filter と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. IsCallable(callback) が false なら TypeError
  5. kept = 新しい空 List
  6. captured = 0。
  7. k = 0。
  8. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ! Get(O, Pk)。
    3. selected = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »))。
    4. selectedtrue なら
      1. kValuekept に追加。
      2. captured = captured + 1。
    5. k++。
  9. A = ? TypedArraySpeciesCreate(O, « 𝔽(captured) »)。
  10. n = 0。
  11. ekept について
    1. Set(A, ! ToString(𝔽(n)), e, true)。
    2. n++。
  12. A を返す。

このメソッドは汎用ではない。this 値は [[TypedArrayName]] 内部スロットを持つ必要がある。

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

引数の意味と使用法は 23.1.3.9Array.prototype.find と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg)。
  5. findRec.[[Value]] を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.10Array.prototype.findIndex と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. findRec = ? FindViaPredicate(O, len, ascending, predicate, thisArg)。
  5. findRec.[[Index]] を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.11Array.prototype.findLast と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg)。
  5. findRec.[[Value]] を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.12Array.prototype.findLastIndex と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. findRec = ? FindViaPredicate(O, len, descending, predicate, thisArg)。
  5. findRec.[[Index]] を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.15Array.prototype.forEach と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. IsCallable(callback) が false なら TypeError
  5. k = 0。
  6. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ! Get(O, Pk)。
    3. ? Call(callback, thisArg, « kValue, 𝔽(k), O »)。
    4. k++。
  7. undefined を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.16Array.prototype.includes と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. len = 0 なら false
  5. n = ? ToIntegerOrInfinity(fromIndex)。
  6. アサート: fromIndexundefined なら n = 0。
  7. n = +∞ なら false
  8. そうでなく n = -∞ なら n = 0。
  9. n ≥ 0 なら
    1. k = n
  10. そうでなければ
    1. k = len + n
    2. k < 0 なら k = 0。
  11. k < len の間、
    1. elementK = ! Get(O, ! ToString(𝔽(k)))。
    2. SameValueZero(searchElement, elementK) が true なら true
    3. k++。
  12. false を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.17Array.prototype.indexOf と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. len = 0 なら -1𝔽
  5. n = ? ToIntegerOrInfinity(fromIndex)。
  6. アサート: fromIndex undefinedn = 0。
  7. n = +∞ なら -1𝔽
  8. そうでなく n = -∞ なら n = 0。
  9. n ≥ 0 なら
    1. k = n
  10. そうでなければ
    1. k = len + n
    2. k < 0 なら k = 0。
  11. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kPresent = ! HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. elementK = ! Get(O, Pk)。
      2. IsStrictlyEqual(searchElement, elementK) が true なら 𝔽(k)。
    4. k++。
  12. -1𝔽 を返す。

汎用ではない。

23.2.3.18 %TypedArray%.prototype.join ( separator )

引数の意味と使用法は 23.1.3.18Array.prototype.join と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. separatorundefined なら sep = ",";そうでなければ sep = ? ToString(separator)。
  5. R = 空文字列。
  6. k = 0。
  7. k < len の間、
    1. k > 0 なら R = Rsep の連結。
    2. element = ! Get(O, ! ToString(𝔽(k)))。
    3. elementundefined でないなら
      1. S = ! ToString(element)。
      2. R = R + S
    4. k++。
  8. R を返す。

汎用ではない。

23.2.3.19 %TypedArray%.prototype.keys ( )

このメソッドは呼び出し時:

  1. O = this 値。
  2. ValidateTypedArray(O, seq-cst)。
  3. CreateArrayIterator(O, key) を返す。

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

引数の意味と使用法は 23.1.3.20Array.prototype.lastIndexOf と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. len = 0 なら -1𝔽
  5. fromIndex が存在するなら n = ? ToIntegerOrInfinity(fromIndex); そうでなければ n = len - 1。
  6. n = -∞ なら -1𝔽
  7. n ≥ 0 なら
    1. k = min(n, len - 1)。
  8. そうでなければ
    1. k = len + n
  9. k ≥ 0 の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kPresent = ! HasProperty(O, Pk)。
    3. kPresenttrue なら
      1. elementK = ! Get(O, Pk)。
      2. IsStrictlyEqual(searchElement, elementK) が true なら 𝔽(k)。
    4. k--。
  10. -1𝔽 を返す。

汎用ではない。

23.2.3.21 get %TypedArray%.prototype.length

%TypedArray%.prototype.length は set アクセサが undefinedアクセサプロパティであり、get アクセサは以下を行う:

  1. O = this 値。
  2. RequireInternalSlot(O, [[TypedArrayName]])。
  3. アサート: O[[ViewedArrayBuffer]][[ArrayLength]] を持つ。
  4. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst)。
  5. IsTypedArrayOutOfBounds(taRecord) が true なら +0𝔽
  6. length = TypedArrayLength(taRecord)。
  7. 𝔽(length) を返す。

この関数は汎用ではない。

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

引数の意味と使用法は 23.1.3.21Array.prototype.map と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. IsCallable(callback) が false なら TypeError
  5. A = ? TypedArraySpeciesCreate(O, « 𝔽(len) »)。
  6. k = 0。
  7. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ! Get(O, Pk)。
    3. mappedValue = ? Call(callback, thisArg, « kValue, 𝔽(k), O »)。
    4. Set(A, Pk, mappedValue, true)。
    5. k++。
  8. A を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.24Array.prototype.reduce と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. IsCallable(callback) が false なら TypeError
  5. len = 0 かつ initialValue 非存在なら TypeError
  6. k = 0。
  7. accumulator = undefined
  8. initialValue 存在なら
    1. accumulator = initialValue
  9. そうでなければ
    1. Pk = ! ToString(𝔽(k))。
    2. accumulator = ! Get(O, Pk)。
    3. k++。
  10. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ! Get(O, Pk)。
    3. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »)。
    4. k++。
  11. accumulator を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.25Array.prototype.reduceRight と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. IsCallable(callback) が false なら TypeError
  5. len = 0 かつ initialValue 無しなら TypeError
  6. k = len - 1。
  7. accumulator = undefined
  8. initialValue 存在なら
    1. accumulator = initialValue
  9. そうでなければ
    1. Pk = ! ToString(𝔽(k))。
    2. accumulator = ! Get(O, Pk)。
    3. k--。
  10. k ≥ 0 の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ! Get(O, Pk)。
    3. accumulator = ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), O »)。
    4. k--。
  11. accumulator を返す。

汎用ではない。

23.2.3.25 %TypedArray%.prototype.reverse ( )

引数の意味と使用法は 23.1.3.26Array.prototype.reverse と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. middle = floor(len / 2)。
  5. lower = 0。
  6. lowermiddle の間、
    1. upper = len - lower - 1。
    2. upperP = ! ToString(𝔽(upper))。
    3. lowerP = ! ToString(𝔽(lower))。
    4. lowerValue = ! Get(O, lowerP)。
    5. upperValue = ! Get(O, upperP)。
    6. Set(O, lowerP, upperValue, true)。
    7. Set(O, upperP, lowerValue, true)。
    8. lower++。
  7. O を返す。

汎用ではない。

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

このメソッドは source から値を読み取り複数の値をこの TypedArray に設定する。詳細は source の型に依存する。任意の offset は書き込み開始位置の要素インデックスを示し、省略時 0。

呼び出し時:

  1. target = this 値。
  2. RequireInternalSlot(target, [[TypedArrayName]])。
  3. アサート: target[[ViewedArrayBuffer]] を持つ。
  4. targetOffset = ? ToIntegerOrInfinity(offset)。
  5. targetOffset < 0 なら RangeError
  6. もし source[[TypedArrayName]] を持つオブジェクトなら
    1. SetTypedArrayFromTypedArray(target, targetOffset, source)。
  7. そうでなければ
    1. SetTypedArrayFromArrayLike(target, targetOffset, source)。
  8. undefined を返す。

汎用ではない。

23.2.3.26.1 SetTypedArrayFromArrayLike ( target, targetOffset, source )

The abstract operation SetTypedArrayFromArrayLike takes arguments target (a TypedArray), targetOffset (a non-negative integer or +∞), and source (an ECMAScript language value, but not a TypedArray) and returns unused を含む通常完了または throw 完了. targettargetOffset から source の値を複数設定する。 It performs the following steps when called:

  1. targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, seq-cst)。
  2. IsTypedArrayOutOfBounds(targetRecord) が true なら TypeError
  3. targetLength = TypedArrayLength(targetRecord)。
  4. src = ? ToObject(source)。
  5. srcLength = ? LengthOfArrayLike(src)。
  6. targetOffset = +∞ なら RangeError
  7. srcLength + targetOffset > targetLength なら RangeError
  8. k = 0。
  9. k < srcLength の間、
    1. Pk = ! ToString(𝔽(k))。
    2. value = ? Get(src, Pk)。
    3. targetIndex = 𝔽(targetOffset + k)。
    4. TypedArraySetElement(target, targetIndex, value)。
    5. k++。
  10. unused を返す。

23.2.3.26.2 SetTypedArrayFromTypedArray ( target, targetOffset, source )

The abstract operation SetTypedArrayFromTypedArray takes arguments target (a TypedArray), targetOffset (a non-negative integer or +∞), and source (a TypedArray) and returns unused を含む通常完了または throw 完了. targettargetOffset から source の値を複数設定する。 It performs the following steps when called:

  1. targetBuffer = target.[[ViewedArrayBuffer]]
  2. targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, seq-cst)。
  3. IsTypedArrayOutOfBounds(targetRecord) が true なら TypeError
  4. targetLength = TypedArrayLength(targetRecord)。
  5. srcBuffer = source.[[ViewedArrayBuffer]]
  6. srcRecord = MakeTypedArrayWithBufferWitnessRecord(source, seq-cst)。
  7. IsTypedArrayOutOfBounds(srcRecord) が true なら TypeError
  8. srcLength = TypedArrayLength(srcRecord)。
  9. targetType = TypedArrayElementType(target)。
  10. targetElementSize = TypedArrayElementSize(target)。
  11. targetByteOffset = target.[[ByteOffset]]
  12. srcType = TypedArrayElementType(source)。
  13. srcElementSize = TypedArrayElementSize(source)。
  14. srcByteOffset = source.[[ByteOffset]]
  15. targetOffset = +∞ なら RangeError
  16. srcLength + targetOffset > targetLength なら RangeError
  17. target.[[ContentType]]source.[[ContentType]] なら TypeError
  18. IsSharedArrayBuffer(srcBuffer) かつ IsSharedArrayBuffer(targetBuffer) かつ srcBuffer.[[ArrayBufferData]] = targetBuffer.[[ArrayBufferData]] なら sameSharedArrayBuffer = true、そうでなければ false
  19. SameValue(srcBuffer, targetBuffer) または sameSharedArrayBuffertrue なら
    1. srcByteLength = TypedArrayByteLength(srcRecord)。
    2. srcBuffer = ? CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength)。
    3. srcByteIndex = 0。
  20. そうでなければ
    1. srcByteIndex = srcByteOffset
  21. targetByteIndex = (targetOffset × targetElementSize) + targetByteOffset
  22. limit = targetByteIndex + (targetElementSize × srcLength)。
  23. srcType = targetType なら
    1. 注: 転送はビットレベルエンコーディングを保持する形で行う。
    2. targetByteIndex < limit の間、
      1. value = GetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered)。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered)。
      3. srcByteIndex++。
      4. targetByteIndex++。
  24. そうでなければ
    1. targetByteIndex < limit の間、
      1. value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, unordered)。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, unordered)。
      3. srcByteIndex += srcElementSize
      4. targetByteIndex += targetElementSize
  25. unused を返す。

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

引数の意味と使用法は 23.1.3.28Array.prototype.slice と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. srcArrayLength = TypedArrayLength(taRecord)。
  4. relativeStart = ? ToIntegerOrInfinity(start)。
  5. relativeStart = -∞ なら startIndex = 0。
  6. そうでなく relativeStart < 0 なら startIndex = max(srcArrayLength + relativeStart, 0)。
  7. それ以外 startIndex = min(relativeStart, srcArrayLength)。
  8. endundefined なら relativeEnd = srcArrayLength; そうでなければ relativeEnd = ? ToIntegerOrInfinity(end)。
  9. relativeEnd = -∞ なら endIndex = 0。
  10. そうでなく relativeEnd < 0 なら endIndex = max(srcArrayLength + relativeEnd, 0)。
  11. それ以外 endIndex = min(relativeEnd, srcArrayLength)。
  12. countBytes = max(endIndex - startIndex, 0)。
  13. A = ? TypedArraySpeciesCreate(O, « 𝔽(countBytes) »)。
  14. countBytes > 0 なら
    1. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst)。
    2. IsTypedArrayOutOfBounds(taRecord) が true なら TypeError
    3. endIndex = min(endIndex, TypedArrayLength(taRecord))。
    4. countBytes = max(endIndex - startIndex, 0)。
    5. srcType = TypedArrayElementType(O)。
    6. targetType = TypedArrayElementType(A)。
    7. もし srcType = targetType なら
      1. 注: 転送はビットエンコーディング保持で行う。
      2. srcBuffer = O.[[ViewedArrayBuffer]]
      3. targetBuffer = A.[[ViewedArrayBuffer]]
      4. elementSize = TypedArrayElementSize(O)。
      5. srcByteOffset = O.[[ByteOffset]]
      6. srcByteIndex = (startIndex × elementSize) + srcByteOffset
      7. targetByteIndex = A.[[ByteOffset]]
      8. endByteIndex = targetByteIndex + (countBytes × elementSize)。
      9. targetByteIndex < endByteIndex の間、
        1. value = GetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered)。
        2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered)。
        3. srcByteIndex++。
        4. targetByteIndex++。
    8. そうでなければ
      1. n = 0。
      2. k = startIndex
      3. k < endIndex の間、
        1. Pk = ! ToString(𝔽(k))。
        2. kValue = ! Get(O, Pk)。
        3. Set(A, ! ToString(𝔽(n)), kValue, true)。
        4. k++。
        5. n++。
  15. A を返す。

汎用ではない。

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

引数の意味と使用法は 23.1.3.29Array.prototype.some と同じ。

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. IsCallable(callback) が false なら TypeError
  5. k = 0。
  6. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ! Get(O, Pk)。
    3. testResult = ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), O »))。
    4. testResulttrue なら true
    5. k++。
  7. false を返す。

汎用ではない。

23.2.3.29 %TypedArray%.prototype.sort ( comparator )

これは独立したメソッドであり、以下に述べる点を除き 23.1.3.30Array.prototype.sort と同じ要件を実装する。実装は this 値が固定長で疎でない整数インデックス付きプロパティを持つことを利用して最適化できる。

汎用ではない。

呼び出し時:

  1. comparatorundefined でなく IsCallable(comparator) が false なら TypeError
  2. obj = this 値。
  3. taRecord = ? ValidateTypedArray(obj, seq-cst)。
  4. len = TypedArrayLength(taRecord)。
  5. 注: 以下のクロージャは文字列比較ではなく数値比較を行う。
  6. SortCompare を (x, y) を取り comparator を捕捉し CompareTypedArrayElements を呼ぶ抽象クロージャとする。
  7. sortedList = ? SortIndexedProperties(obj, len, SortCompare, read-through-holes)。
  8. j = 0。
  9. j < len の間、
    1. Set(obj, ! ToString(𝔽(j)), sortedList[j], true)。
    2. j++。
  10. obj を返す。
Note

NaN は他の任意値より常に大きく比較されるため (CompareTypedArrayElements 参照)、comparator 未指定時は NaN 値は末尾に並ぶ。

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

このメソッドは元の TypedArray と同じ要素型・同じ ArrayBuffer を参照し、start (含む) から end (含まない) までの要素を参照する新しい TypedArray を返す。start または end が負なら配列末尾からのインデックスを示す。

呼び出し時:

  1. O = this 値。
  2. RequireInternalSlot(O, [[TypedArrayName]])。
  3. アサート: O[[ViewedArrayBuffer]] を持つ。
    1. buffer = O.[[ViewedArrayBuffer]]
  4. srcRecord = MakeTypedArrayWithBufferWitnessRecord(O, seq-cst)。
  5. IsTypedArrayOutOfBounds(srcRecord) が true なら
    1. srcLength = 0。
  6. そうでなければ
    1. srcLength = TypedArrayLength(srcRecord)。
  7. relativeStart = ? ToIntegerOrInfinity(start)。
  8. relativeStart = -∞ なら startIndex = 0。
  9. そうでなく relativeStart < 0 なら startIndex = max(srcLength + relativeStart, 0)。
  10. それ以外 startIndex = min(relativeStart, srcLength)。
  11. elementSize = TypedArrayElementSize(O)。
  12. srcByteOffset = O.[[ByteOffset]]
  13. beginByteOffset = srcByteOffset + (startIndex × elementSize)。
  14. もし O.[[ArrayLength]]auto かつ endundefined なら
    1. argumentsList = « buffer, 𝔽(beginByteOffset) »。
  15. そうでなければ
    1. endundefined なら relativeEnd = srcLength; そうでなければ relativeEnd = ? ToIntegerOrInfinity(end)。
    2. relativeEnd = -∞ なら endIndex = 0。
    3. そうでなく relativeEnd < 0 なら endIndex = max(srcLength + relativeEnd, 0)。
    4. それ以外 endIndex = min(relativeEnd, srcLength)。
    5. newLength = max(endIndex - startIndex, 0)。
    6. argumentsList = « buffer, 𝔽(beginByteOffset), 𝔽(newLength) »。
  16. TypedArraySpeciesCreate(O, argumentsList) を返す。

汎用ではない。

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

これは 23.1.3.32Array.prototype.toLocaleString と同アルゴリズムを実装するが、"length"[[Get]] の代わりに TypedArrayLength を呼ぶ点が異なる。基礎バッファがリサイズ不可で固定長かつ疎でないことを利用した最適化は許されるが、観測可能な仕様上の挙動を変えてはならない。

汎用ではない。アルゴリズム実行前に ValidateTypedArraythis 値と seq-cst で呼ばれ、その結果が異常完了ならアルゴリズムを実行せず例外を投げる。

Note

実装が ECMA-402 国際化 API を含む場合、このメソッドは ECMA-402 における Array.prototype.toLocaleString アルゴリズムに基づく。

23.2.3.32 %TypedArray%.prototype.toReversed ( )

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. A = ? TypedArrayCreateSameType(O, len)。
  5. k = 0。
  6. k < len の間、
    1. from = ! ToString(𝔽(len - k - 1))。
    2. Pk = ! ToString(𝔽(k))。
    3. fromValue = ! Get(O, from)。
    4. Set(A, Pk, fromValue, true)。
    5. k++。
  7. A を返す。

23.2.3.33 %TypedArray%.prototype.toSorted ( comparator )

呼び出し時:

  1. comparatorundefined でなく IsCallable(comparator) が false なら TypeError
  2. O = this 値。
  3. taRecord = ? ValidateTypedArray(O, seq-cst)。
  4. len = TypedArrayLength(taRecord)。
  5. A = ? TypedArrayCreateSameType(O, len)。
  6. 注: 以下のクロージャは文字列比較でなく数値比較。
  7. SortCompare を (x, y) を取り comparator を捕捉し CompareTypedArrayElements を呼ぶ抽象クロージャとする。
  8. sortedList = ? SortIndexedProperties(O, len, SortCompare, read-through-holes)。
  9. j = 0。
  10. j < len の間、
    1. Set(A, ! ToString(𝔽(j)), sortedList[j], true)。
    2. j++。
  11. A を返す。

23.2.3.34 %TypedArray%.prototype.toString ( )

"toString" プロパティの初期値は 23.1.3.36 で定義される %Array.prototype.toString% である。

23.2.3.35 %TypedArray%.prototype.values ( )

呼び出し時:

  1. O = this 値。
  2. ValidateTypedArray(O, seq-cst)。
  3. CreateArrayIterator(O, value) を返す。

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

呼び出し時:

  1. O = this 値。
  2. taRecord = ? ValidateTypedArray(O, seq-cst)。
  3. len = TypedArrayLength(taRecord)。
  4. relativeIndex = ? ToIntegerOrInfinity(index)。
  5. relativeIndex ≥ 0 なら actualIndex = relativeIndex; そうでなければ actualIndex = len + relativeIndex
  6. O.[[ContentType]]bigint なら numericValue = ? ToBigInt(value); そうでなければ numericValue = ? ToNumber(value)。
  7. IsValidIntegerIndex(O, 𝔽(actualIndex)) が false なら RangeError
  8. A = ? TypedArrayCreateSameType(O, len)。
  9. k = 0。
  10. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. k = actualIndex なら fromValue = numericValue; そうでなければ fromValue = ! Get(O, Pk)。
    3. Set(A, Pk, fromValue, true)。
    4. k++。
  11. A を返す。

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

%Symbol.iterator% プロパティの初期値は 23.2.3.35 で定義される %TypedArray.prototype.values% である。

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

%TypedArray%.prototype[%Symbol.toStringTag%] は set アクセサが undefinedアクセサプロパティであり、get アクセサは以下を行う:

  1. O = this 値。
  2. O がオブジェクトでなければ undefined
  3. O[[TypedArrayName]] を持たなければ undefined
  4. name = O.[[TypedArrayName]]
  5. アサート: name は String。
  6. name を返す。

このプロパティは { [[Enumerable]]: false, [[Configurable]]: true } を持つ。

この関数の "name" プロパティ初期値は "get [Symbol.toStringTag]"

23.2.4 TypedArray オブジェクト用抽象操作

23.2.4.1 TypedArrayCreateFromConstructor ( constructor, argumentList )

The abstract operation TypedArrayCreateFromConstructor takes arguments constructor (a constructor) and argumentList (a List of ECMAScript language values) and returns TypedArray を含む通常完了または throw 完了. コンストラクター関数を用いた新規 TypedArray の作成を規定する。 It performs the following steps when called:

  1. newTypedArray = ? Construct(constructor, argumentList)。
  2. taRecord = ? ValidateTypedArray(newTypedArray, seq-cst)。
  3. アサート: newTypedArrayTypedArray インスタンスのプロパティ 記載の内部スロットを全て持つ。
  4. argumentList の要素数が 1 で argumentList[0] が Number なら
    1. IsTypedArrayOutOfBounds(taRecord) が true なら TypeError
    2. length = TypedArrayLength(taRecord)。
    3. length < (argumentList[0]) なら TypeError
  5. newTypedArray を返す。

23.2.4.2 TypedArrayCreateSameType ( exemplar, length )

The abstract operation TypedArrayCreateSameType takes arguments exemplar (a TypedArray) and length (a non-negative integer) and returns TypedArray を含む通常完了または throw 完了. exemplar から派生したコンストラクターと length を用いて新しい TypedArray を生成する。TypedArraySpeciesCreate%Symbol.species% によりカスタムサブクラスを構築できるのに対し常に組込み TypedArray コンストラクターを用いる。 It performs the following steps when called:

  1. constructorexemplar.[[TypedArrayName]] に対応する Table 73 の組込みオブジェクトとする。
  2. result = ? TypedArrayCreateFromConstructor(constructor, « 𝔽(length) »)。
  3. アサート: result[[TypedArrayName]][[ContentType]] を持つ。
  4. アサート: result.[[ContentType]]exemplar.[[ContentType]]
  5. result を返す。

23.2.4.3 TypedArraySpeciesCreate ( exemplar, argumentList )

The abstract operation TypedArraySpeciesCreate takes arguments exemplar (a TypedArray) and argumentList (a List of ECMAScript language values) and returns TypedArray を含む通常完了または throw 完了. exemplar から派生したコンストラクターを用いて新しい TypedArray を作成する。ArraySpeciesCreate と異なり常に実際の TypedArray を生成することを強制する。 It performs the following steps when called:

  1. defaultConstructorexemplar.[[TypedArrayName]] に対応する組込みオブジェクトとする。
  2. constructor = ? SpeciesConstructor(exemplar, defaultConstructor)。
  3. result = ? TypedArrayCreateFromConstructor(constructor, argumentList)。
  4. result.[[ContentType]]exemplar.[[ContentType]] なら TypeError
  5. result を返す。

23.2.4.4 ValidateTypedArray ( O, order )

The abstract operation ValidateTypedArray takes arguments O (an ECMAScript language value) and order (seq-cst or unordered) and returns TypedArray With Buffer Witness Record を含む通常完了または throw 完了. It performs the following steps when called:

  1. RequireInternalSlot(O, [[TypedArrayName]])。
  2. アサート: O[[ViewedArrayBuffer]] を持つ。
  3. taRecord = MakeTypedArrayWithBufferWitnessRecord(O, order)。
  4. IsTypedArrayOutOfBounds(taRecord) が true なら TypeError
  5. taRecord を返す。

23.2.4.5 TypedArrayElementSize ( O )

The abstract operation TypedArrayElementSize takes argument O (a TypedArray) and returns 非負整数. It performs the following steps when called:

  1. O.[[TypedArrayName]] に対し Table 73 で規定された要素サイズ値を返す。

23.2.4.6 TypedArrayElementType ( O )

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

  1. O.[[TypedArrayName]] に対し Table 73 で規定された要素型値を返す。

23.2.4.7 CompareTypedArrayElements ( x, y, comparator )

The abstract operation CompareTypedArrayElements takes arguments x (a Number or a BigInt), y (a Number or a BigInt), and comparator (a function object or undefined) and returns Number を含む通常完了または異常完了. It performs the following steps when called:

  1. アサート: xy は両方 Number か両方 BigInt。
  2. comparatorundefined でないなら
    1. v = ? ToNumber(? Call(comparator, undefined, « x, y »))。
    2. vNaN なら +0𝔽
    3. v を返す。
  3. xy が両方 NaN なら +0𝔽
  4. xNaN なら 1𝔽
  5. yNaN なら -1𝔽
  6. x < y なら -1𝔽
  7. x > y なら 1𝔽
  8. x-0𝔽 かつ y+0𝔽 なら -1𝔽
  9. x+0𝔽 かつ y-0𝔽 なら 1𝔽
  10. +0𝔽 を返す。
Note
これは 23.1.3.30.2 の文字列比較ではなく数値比較を行う。

23.2.5 TypedArray コンストラクター

TypedArray コンストラクターは:

  • Table 73 にて TypedArray の代わりに用いられる名称が異なるだけで、以下に記述する構造を持つ組込みオブジェクトである。
  • 引数の数と型により挙動が変わる関数であり、呼び出し時の実際の挙動は渡された引数の数と種類に依存する。
  • 関数として呼び出すことを意図しておらず、その形で呼べば例外を投げる。
  • クラス定義の extends 句に利用できる。指定された TypedArray の挙動を継承するサブクラスコンストラクターは、%TypedArray%.prototype 組込みメソッドを支える内部状態でインスタンスを初期化するため TypedArray コンストラクターへの super 呼び出しを含めねばならない。

23.2.5.1 TypedArray ( ...args )

TypedArray コンストラクターは呼び出し時に以下を行う:

  1. NewTarget が undefined なら TypeError
  2. constructorName をこの TypedArray コンストラクターに対応する Table 73 の Constructor Name の String 値とする。
  3. proto = "%TypedArray.prototype%"
  4. numberOfArgs = args の要素数。
  5. numberOfArgs = 0 なら
    1. AllocateTypedArray(constructorName, NewTarget, proto, 0) を返す。
  6. それ以外
    1. firstArgument = args[0]。
    2. firstArgument がオブジェクトなら
      1. O = ? AllocateTypedArray(constructorName, NewTarget, proto)。
      2. firstArgument[[TypedArrayName]] を持つなら
        1. InitializeTypedArrayFromTypedArray(O, firstArgument)。
      3. そうでなく [[ArrayBufferData]] を持つなら
        1. numberOfArgs > 1 なら byteOffset = args[1]; そうでなければ undefined
        2. numberOfArgs > 2 なら length = args[2]; そうでなければ undefined
        3. InitializeTypedArrayFromArrayBuffer(O, firstArgument, byteOffset, length)。
      4. それ以外
        1. アサート: firstArgument はオブジェクトで [[TypedArrayName]][[ArrayBufferData]] も持たない。
        2. usingIterator = ? GetMethod(firstArgument, %Symbol.iterator%)。
        3. usingIteratorundefined でなければ
          1. values = ? IteratorToList(? GetIteratorFromMethod(firstArgument, usingIterator))。
          2. InitializeTypedArrayFromList(O, values)。
        4. そうでなければ
          1. 注: firstArgumentiterable でないので配列ライクと仮定。
          2. InitializeTypedArrayFromArrayLike(O, firstArgument)。
      5. O を返す。
    3. そうでなければ
      1. アサート: firstArgument はオブジェクトでない。
      2. elementLength = ? ToIndex(firstArgument)。
      3. AllocateTypedArray(constructorName, NewTarget, proto, elementLength) を返す。

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

The abstract operation AllocateTypedArray takes arguments constructorName (Table 73 にある TypedArray コンストラクター名 String), newTarget (a constructor), and defaultProto (a String) and optional argument length (非負整数) and returns TypedArray を含む通常完了または throw 完了. TypedArray コンストラクターインスタンスを検証・生成する。length が渡されればその長さの ArrayBuffer も割当て関連付ける。TypedArray が用いる共通セマンティクスを提供。 It performs the following steps when called:

  1. proto = ? GetPrototypeFromConstructor(newTarget, defaultProto)。
  2. obj = TypedArrayCreate(proto)。
  3. アサート: obj.[[ViewedArrayBuffer]]undefined
  4. obj.[[TypedArrayName]] = constructorName
  5. constructorName"BigInt64Array" または "BigUint64Array" なら obj.[[ContentType]] = bigint
  6. それ以外は obj.[[ContentType]] = number
  7. length 非存在なら
    1. obj.[[ByteLength]] = 0。
    2. obj.[[ByteOffset]] = 0。
    3. obj.[[ArrayLength]] = 0。
  8. そうでなければ
    1. AllocateTypedArrayBuffer(obj, length)。
  9. obj を返す。

23.2.5.1.2 InitializeTypedArrayFromTypedArray ( O, srcArray )

The abstract operation InitializeTypedArrayFromTypedArray takes arguments O (a TypedArray) and srcArray (a TypedArray) and returns unused を含む通常完了または throw 完了. It performs the following steps when called:

  1. srcData = srcArray.[[ViewedArrayBuffer]]
  2. elementType = TypedArrayElementType(O)。
  3. elementSize = TypedArrayElementSize(O)。
  4. srcType = TypedArrayElementType(srcArray)。
  5. srcElementSize = TypedArrayElementSize(srcArray)。
  6. srcByteOffset = srcArray.[[ByteOffset]]
  7. srcRecord = MakeTypedArrayWithBufferWitnessRecord(srcArray, seq-cst)。
  8. IsTypedArrayOutOfBounds(srcRecord) が true なら TypeError
  9. elementLength = TypedArrayLength(srcRecord)。
  10. byteLength = elementSize × elementLength
  11. elementType = srcType なら
    1. data = ? CloneArrayBuffer(srcData, srcByteOffset, byteLength)。
  12. そうでなければ
    1. data = ? AllocateArrayBuffer(%ArrayBuffer%, byteLength)。
    2. srcArray.[[ContentType]]O.[[ContentType]] なら TypeError
    3. srcByteIndex = srcByteOffset
    4. targetByteIndex = 0。
    5. count = elementLength
    6. count > 0 の間、
      1. value = GetValueFromBuffer(srcData, srcByteIndex, srcType, true, unordered)。
      2. SetValueInBuffer(data, targetByteIndex, elementType, value, true, unordered)。
      3. srcByteIndex += srcElementSize
      4. targetByteIndex += elementSize
      5. count--。
  13. O.[[ViewedArrayBuffer]] = data
  14. O.[[ByteLength]] = byteLength
  15. O.[[ByteOffset]] = 0。
  16. O.[[ArrayLength]] = elementLength
  17. unused を返す。

23.2.5.1.3 InitializeTypedArrayFromArrayBuffer ( O, buffer, byteOffset, length )

The abstract operation InitializeTypedArrayFromArrayBuffer takes arguments O (a TypedArray), buffer (an ArrayBuffer or a SharedArrayBuffer), byteOffset (an ECMAScript language value), and length (an ECMAScript language value) and returns unused を含む通常完了または throw 完了. It performs the following steps when called:

  1. elementSize = TypedArrayElementSize(O)。
  2. offset = ? ToIndex(byteOffset)。
  3. offset mod elementSize ≠ 0 なら RangeError
  4. bufferIsFixedLength = IsFixedLengthArrayBuffer(buffer)。
  5. lengthundefined でなければ
    1. newLength = ? ToIndex(length)。
  6. IsDetachedBuffer(buffer) が true なら TypeError
  7. bufferByteLength = ArrayBufferByteLength(buffer, seq-cst)。
  8. lengthundefined かつ bufferIsFixedLengthfalse なら
    1. offset > bufferByteLength なら RangeError
    2. O.[[ByteLength]] = auto
    3. O.[[ArrayLength]] = auto
  9. そうでなければ
    1. もし lengthundefined なら
      1. bufferByteLength mod elementSize ≠ 0 なら RangeError
      2. newByteLength = bufferByteLength - offset
      3. newByteLength < 0 なら RangeError
    2. そうでなければ
      1. newByteLength = newLength × elementSize
      2. offset + newByteLength > bufferByteLength なら RangeError
    3. O.[[ByteLength]] = newByteLength
    4. O.[[ArrayLength]] = newByteLength / elementSize
  10. O.[[ViewedArrayBuffer]] = buffer
  11. O.[[ByteOffset]] = offset
  12. unused を返す。

23.2.5.1.4 InitializeTypedArrayFromList ( O, values )

The abstract operation InitializeTypedArrayFromList takes arguments O (a TypedArray) and values (a List of ECMAScript language values) and returns unused を含む通常完了または throw 完了. It performs the following steps when called:

  1. len = values の要素数。
  2. AllocateTypedArrayBuffer(O, len)。
  3. k = 0。
  4. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = values の先頭要素。
    3. values から先頭を除去。
    4. Set(O, Pk, kValue, true)。
    5. k++。
  5. アサート: values は空。
  6. unused を返す。

23.2.5.1.5 InitializeTypedArrayFromArrayLike ( O, arrayLike )

The abstract operation InitializeTypedArrayFromArrayLike takes arguments O (a TypedArray) and arrayLike (an Object, but not a TypedArray or an ArrayBuffer) and returns unused を含む通常完了または throw 完了. It performs the following steps when called:

  1. len = ? LengthOfArrayLike(arrayLike)。
  2. AllocateTypedArrayBuffer(O, len)。
  3. k = 0。
  4. k < len の間、
    1. Pk = ! ToString(𝔽(k))。
    2. kValue = ? Get(arrayLike, Pk)。
    3. Set(O, Pk, kValue, true)。
    4. k++。
  5. unused を返す。

23.2.5.1.6 AllocateTypedArrayBuffer ( O, length )

The abstract operation AllocateTypedArrayBuffer takes arguments O (a TypedArray) and length (a non-negative integer) and returns unused を含む通常完了または throw 完了. O に ArrayBuffer を割当て関連付ける。 It performs the following steps when called:

  1. アサート: O.[[ViewedArrayBuffer]]undefined
  2. elementSize = TypedArrayElementSize(O)。
  3. byteLength = elementSize × length
  4. data = ? AllocateArrayBuffer(%ArrayBuffer%, byteLength)。
  5. O.[[ViewedArrayBuffer]] = data
  6. O.[[ByteLength]] = byteLength
  7. O.[[ByteOffset]] = 0。
  8. O.[[ArrayLength]] = length
  9. unused を返す。

23.2.6 TypedArray コンストラクターのプロパティ

TypedArray コンストラクターは:

  • [[Prototype]] 内部スロット値が %TypedArray%
  • "length" プロパティ値は 3𝔽
  • "name" プロパティ値は Table 73 に規定されたコンストラクター名の String 値。
  • 以下のプロパティを持つ:

23.2.6.1 TypedArray.BYTES_PER_ELEMENT

TypedArray.BYTES_PER_ELEMENT の値は Table 73 における TypedArray の要素サイズ値。

属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

23.2.6.2 TypedArray.prototype

TypedArray.prototype の初期値は対応する TypedArray プロトタイプ組込みオブジェクト (23.2.7) である。

属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

23.2.7 TypedArray プロトタイプオブジェクトのプロパティ

TypedArray プロトタイプオブジェクトは:

  • [[Prototype]] 内部スロット値が %TypedArray.prototype%
  • 通常のオブジェクト。
  • [[ViewedArrayBuffer]] など TypedArray インスタンス固有内部スロットを持たない。

23.2.7.1 TypedArray.prototype.BYTES_PER_ELEMENT

TypedArray.prototype.BYTES_PER_ELEMENT の値は Table 73 における TypedArray の要素サイズ値。

属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }。

23.2.7.2 TypedArray.prototype.constructor

与えられた TypedArray コンストラクターのプロトタイプにおける "constructor" プロパティ初期値はそのコンストラクター自身である。

23.2.8 TypedArray インスタンスのプロパティ

TypedArray インスタンスは TypedArray である。各 TypedArray インスタンスは対応する TypedArray プロトタイプオブジェクトからプロパティを継承し、[[ViewedArrayBuffer]], [[TypedArrayName]], [[ContentType]], [[ByteLength]], [[ByteOffset]], [[ArrayLength]] の内部スロットを持つ。