ページ表示設定

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. numberOfArgs を values の要素数とする。
  4. numberOfArgs = 0 である場合、! ArrayCreate(0, proto) を返す。
  5. numberOfArgs = 1 である場合、
    1. length を values[0] とする。
    2. array を ! ArrayCreate(0, proto) とする。
    3. length が Number でない場合、
      1. ! CreateDataPropertyOrThrow(array, "0", length) を実行する。
      2. intLength を 1𝔽 とする。
    4. そうでない場合、
      1. intLength を ! ToUint32(length) とする。
      2. SameValueZero(intLength, length) が false である場合、RangeError 例外をスローする。
    5. ! Set(array, "length", intLength, true) を実行する。
    6. array を返す。
  6. 表明: numberOfArgs ≥ 2。
  7. array を ? ArrayCreate(numberOfArgs, proto) とする。
  8. k を 0 とする。
  9. k < numberOfArgs の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. itemK を values[k] とする。
    3. ! CreateDataPropertyOrThrow(array, propertyKey, itemK) を実行する。
    4. k を k + 1 に設定する。
  10. 表明: array の "length" プロパティの数学値は numberOfArgs である。
  11. array を返す。

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

Array コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 値が 1𝔽 である "length" プロパティを持ちます。
  • 次のプロパティを持ちます。

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

この関数は呼び出されたとき、次の手順を実行します。

  1. ctor を this 値とする。
  2. mapper が undefined である場合、
    1. mapping を false とする。
  3. そうでない場合、
    1. IsCallable(mapper) が false である場合、TypeError 例外をスローする。
    2. mapping を true とする。
  4. usingIterator を ? GetMethod(items, %Symbol.iterator%) とする。
  5. usingIterator が undefined でない場合、
    1. IsConstructor(ctor) が true である場合、
      1. array を ? Construct(ctor) とする。
    2. そうでない場合、
      1. array を ! ArrayCreate(0) とする。
    3. iteratorRecord を ? GetIteratorFromMethod(items, usingIterator) とする。
    4. k を 0 とする。
    5. 次を繰り返す。
      1. k ≥ 253 - 1 である場合、
        1. error を ThrowCompletion(新しく作成された TypeError オブジェクト) とする。
        2. ? IteratorClose(iteratorRecord, error) を返す。
      2. propertyKey を ! ToString(𝔽(k)) とする。
      3. next を ? IteratorStepValue(iteratorRecord) とする。
      4. next が done である場合、
        1. ? Set(array, "length", 𝔽(k), true) を実行する。
        2. array を返す。
      5. mapping が true である場合、
        1. mappedValue を Completion(Call(mapper, thisArg, « next, 𝔽(k) »)) とする。
        2. IfAbruptCloseIterator(mappedValue, iteratorRecord)。
      6. そうでない場合、
        1. mappedValue を next とする。
      7. defineStatus を Completion(CreateDataPropertyOrThrow(array, propertyKey, mappedValue)) とする。
      8. IfAbruptCloseIterator(defineStatus, iteratorRecord)。
      9. k を k + 1 に設定する。
  6. 注記: items は iterable ではないため、array-like オブジェクトであると仮定する。
  7. arrayLike を ! ToObject(items) とする。
  8. length を ? LengthOfArrayLike(arrayLike) とする。
  9. IsConstructor(ctor) が true である場合、
    1. array を ? Construct(ctor, « 𝔽(length) ») とする。
  10. そうでない場合、
    1. array を ? ArrayCreate(length) とする。
  11. k を 0 とする。
  12. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ? Get(arrayLike, propertyKey) とする。
    3. mapping が true である場合、
      1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
    4. そうでない場合、
      1. mappedValue を kValue とする。
    5. ? CreateDataPropertyOrThrow(array, propertyKey, mappedValue) を実行する。
    6. k を k + 1 に設定する。
  13. ? Set(array, "length", 𝔽(length), true) を実行する。
  14. array を返す。
注

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

23.1.2.2 Array.fromAsync ( items [ , mapper [ , thisArg ] ] )

この async 関数は呼び出されたとき、次の手順を実行します。

  1. ctor を this 値とする。
  2. mapping を false とする。
  3. mapper が undefined でない場合、
    1. IsCallable(mapper) が false である場合、TypeError 例外をスローする。
    2. mapping を true に設定する。
  4. iteratorRecord を undefined とする。
  5. usingAsyncIterator を ? GetMethod(items, %Symbol.asyncIterator%) とする。
  6. usingAsyncIterator が undefined である場合、
    1. usingSyncIterator を ? GetMethod(items, %Symbol.iterator%) とする。
    2. usingSyncIterator が undefined でない場合、
      1. iteratorRecord を CreateAsyncFromSyncIterator(? GetIteratorFromMethod(items, usingSyncIterator)) に設定する。
  7. そうでない場合、
    1. iteratorRecord を ? GetIteratorFromMethod(items, usingAsyncIterator) に設定する。
  8. iteratorRecord が undefined でない場合、
    1. IsConstructor(ctor) が true である場合、
      1. array を ? Construct(ctor) とする。
    2. そうでない場合、
      1. array を ! ArrayCreate(0) とする。
    3. k を 0 とする。
    4. 次を繰り返す。
      1. k ≥ 253 - 1 である場合、
        1. error を ThrowCompletion(新しく作成された TypeError オブジェクト) とする。
        2. ? AsyncIteratorClose(iteratorRecord, error) を返す。
      2. propertyKey を ! ToString(𝔽(k)) とする。
      3. nextResult を ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]]) とする。
      4. nextResult を ? Await(nextResult) に設定する。
      5. nextResult が Object でない場合、TypeError 例外をスローする。
      6. done を ? IteratorComplete(nextResult) とする。
      7. done が true である場合、
        1. ? Set(array, "length", 𝔽(k), true) を実行する。
        2. array を返す。
      8. nextValue を ? IteratorValue(nextResult) とする。
      9. mapping が true である場合、
        1. mappedValue を Completion(Call(mapper, thisArg, « nextValue, 𝔽(k) »)) とする。
        2. IfAbruptCloseAsyncIterator(mappedValue, iteratorRecord)。
        3. mappedValue を Completion(Await(mappedValue)) に設定する。
        4. IfAbruptCloseAsyncIterator(mappedValue, iteratorRecord)。
      10. そうでない場合、
        1. mappedValue を nextValue とする。
      11. defineStatus を Completion(CreateDataPropertyOrThrow(array, propertyKey, mappedValue)) とする。
      12. IfAbruptCloseAsyncIterator(defineStatus, iteratorRecord)。
      13. k を k + 1 に設定する。
  9. そうでない場合、
    1. 注記: items は async iterable でも iterable でもないため、array-like オブジェクトであると仮定する。
    2. arrayLike を ! ToObject(items) とする。
    3. length を ? LengthOfArrayLike(arrayLike) とする。
    4. IsConstructor(ctor) が true である場合、
      1. array を ? Construct(ctor, « 𝔽(length) ») とする。
    5. そうでない場合、
      1. array を ? ArrayCreate(length) とする。
    6. k を 0 とする。
    7. k < length の間、次を繰り返す。
      1. propertyKey を ! ToString(𝔽(k)) とする。
      2. kValue を ? Get(arrayLike, propertyKey) とする。
      3. kValue を ? Await(kValue) に設定する。
      4. mapping が true である場合、
        1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
        2. mappedValue を ? Await(mappedValue) に設定する。
      5. そうでない場合、
        1. mappedValue を kValue とする。
      6. ? CreateDataPropertyOrThrow(array, propertyKey, mappedValue) を実行する。
      7. k を k + 1 に設定する。
    8. ? Set(array, "length", 𝔽(length), true) を実行する。
    9. array を返す。
注

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

23.1.2.3 Array.isArray ( arg )

この関数は呼び出されたとき、次の手順を実行します。

  1. ? IsArray(arg) を返す。

23.1.2.4 Array.of ( ...items )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. length を items の要素数とする。
  2. lengthNumber を 𝔽(length) とする。
  3. ctor を this 値とする。
  4. IsConstructor(ctor) が true である場合、
    1. array を ? Construct(ctor, « lengthNumber ») とする。
  5. そうでない場合、
    1. array を ? ArrayCreate(length) とする。
  6. k を 0 とする。
  7. k < length の間、次を繰り返す。
    1. kValue を items[k] とする。
    2. propertyKey を ! ToString(𝔽(k)) とする。
    3. ? CreateDataPropertyOrThrow(array, propertyKey, kValue) を実行する。
    4. k を k + 1 に設定する。
  8. ? Set(array, "length", lengthNumber, true) を実行する。
  9. array を返す。
注

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

23.1.2.5 Array.prototype

Array.prototype の値は Array prototype オブジェクトです。

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

23.1.2.6 get Array [ %Symbol.species% ]

Array[%Symbol.species%] は、set アクセサー関数が undefined であるアクセサープロパティです。その get アクセサー関数は、呼び出されたときに次の手順を実行します。

  1. this 値を返す。

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

注

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

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

Array prototype オブジェクトは:

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

Array prototype オブジェクトは、ECMAScript 2015 仕様より前に作成された ECMAScript コードとの互換性を保証するため、Array 特殊オブジェクトであると規定されています。

23.1.3.1 Array.prototype.at ( index )

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. k を ? ToAbsoluteIndex(index, length) とする。
  4. k < 0 または k ≥ length である場合、undefined を返す。
  5. ? Get(obj, ! ToString(𝔽(k))) を返す。

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

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

呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. array を ? ArraySpeciesCreate(obj, 0) とする。
  3. nextIndex を 0 とする。
  4. obj を items の先頭に追加する。
  5. items の各要素 item について、次を行う。
    1. spreadable を ? IsConcatSpreadable(item) とする。
    2. spreadable が true である場合、
      1. length を ? LengthOfArrayLike(item) とする。
      2. nextIndex + length > 253 - 1 である場合、TypeError 例外をスローする。
      3. sourceIndex を 0 とする。
      4. sourceIndex < length の間、次を繰り返す。
        1. propertyKey を ! ToString(𝔽(sourceIndex)) とする。
        2. exists を ? HasProperty(item, propertyKey) とする。
        3. exists が true である場合、
          1. subElement を ? Get(item, propertyKey) とする。
          2. ? CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), subElement) を実行する。
        4. nextIndex を nextIndex + 1 に設定する。
        5. sourceIndex を sourceIndex + 1 に設定する。
    3. そうでない場合、
      1. 注記: item は展開されるのではなく、単一の項目として追加される。
      2. nextIndex ≥ 253 - 1 である場合、TypeError 例外をスローする。
      3. ? CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), item) を実行する。
      4. nextIndex を nextIndex + 1 に設定する。
  6. ? Set(array, "length", 𝔽(nextIndex), true) を実行する。
  7. array を返す。

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

注 1

手順 6 で "length" プロパティを明示的に設定するのは、items の最後の空でない要素に末尾の hole がある場合や、array が組込み Array でない場合でも、長さが正しいことを保証することを意図しています。

注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.2.1 IsConcatSpreadable ( obj )

抽象操作 IsConcatSpreadable。引数 obj (ECMAScript 言語値)。戻り値:(正常完了 (値:Boolean) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. obj が Object でない場合、false を返す。
  2. spreadable を ? Get(obj, %Symbol.isConcatSpreadable%) とする。
  3. spreadable が undefined でない場合、ToBoolean(spreadable) を返す。
  4. ? IsArray(obj) を返す。

23.1.3.3 Array.prototype.constructor

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

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

注 1

end 引数は省略可能です。指定されていない場合、this 値の長さが使用されます。

注 2

target が負である場合、length を配列の長さとして length + target として扱われます。start が負である場合、length + start として扱われます。end が負である場合、length + end として扱われます。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. to を ? ToClampedIndex(target, length) とする。
  4. from を ? ToClampedIndex(start, length) とする。
  5. end が undefined である場合、final を length とする。そうでない場合、final を ? ToClampedIndex(end, length) とする。
  6. count を min(final - from, length - to) とする。
  7. from < to かつ to < from + count である場合、
    1. direction を -1 とする。
    2. from を from + count - 1 に設定する。
    3. to を to + count - 1 に設定する。
  8. そうでない場合、
    1. direction を 1 とする。
  9. count > 0 の間、次を繰り返す。
    1. fromKey を ! ToString(𝔽(from)) とする。
    2. toKey を ! ToString(𝔽(to)) とする。
    3. fromPresent を ? HasProperty(obj, fromKey) とする。
    4. fromPresent が true である場合、
      1. fromValue を ? Get(obj, fromKey) とする。
      2. ? Set(obj, toKey, fromValue, true) を実行する。
    5. そうでない場合、
      1. 表明: fromPresent は false である。
      2. ? DeletePropertyOrThrow(obj, toKey) を実行する。
    6. from を from + direction に設定する。
    7. to を to + direction に設定する。
    8. count を count - 1 に設定する。
  10. obj を返す。
注 3

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.5 Array.prototype.entries ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. CreateArrayIterator(obj, key+value) を返す。

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

注 1

callback は3つの引数を受け取り、Boolean 値へ型強制できる値を返す関数であるべきです。every は、callback が false を返す要素を見つけるまで、配列に存在する各要素について昇順に callback を1回ずつ呼び出します。そのような要素が見つかった場合、every は直ちに false を返します。そうでない場合、every は true を返します。callback は実際に存在する配列要素についてのみ呼び出され、存在しない配列要素については呼び出されません。

thisArg パラメーターが指定された場合、callback の各呼出しで this 値として使用されます。指定されていない場合は、代わりに undefined が使用されます。

callback は、要素の値、要素のインデックス、および走査中のオブジェクトという3つの引数で呼び出されます。

every は呼び出されたオブジェクトを直接変更しませんが、callback の呼出しによってそのオブジェクトが変更される場合があります。

every によって処理される要素の範囲は、callback の最初の呼出しより前に設定されます。every の呼出し開始後に配列へ追加された要素は callback によって訪問されません。配列の既存要素が変更された場合、callback に渡される値は every がその要素を訪問した時点の値になります。every の呼出し開始後、訪問される前に削除された要素は訪問されません。every は数学における「すべてに対して」量化子のように動作します。特に、空の配列については true を返します。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  4. k を 0 とする。
  5. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. testResult を ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
      3. testResult が false である場合、false を返す。
    4. k を k + 1 に設定する。
  6. true を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

start 引数は省略可能です。指定されていない場合、+0𝔽 が使用されます。

end 引数は省略可能です。指定されていない場合、this 値の長さが使用されます。

注 2

start が負である場合、length を配列の長さとして length + start として扱われます。end が負である場合、length + end として扱われます。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. k を ? ToClampedIndex(start, length) とする。
  4. end が undefined である場合、final を length とする。そうでない場合、final を ? ToClampedIndex(end, length) とする。
  5. k < final の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. ? Set(obj, propertyKey, value, true) を実行する。
    3. k を k + 1 に設定する。
  6. obj を返す。
注 3

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

callback は3つの引数を受け取り、Boolean 値へ型強制できる値を返す関数であるべきです。filter は、配列の各要素について昇順に callback を1回ずつ呼び出し、callback が true を返すすべての値から新しい配列を構築します。callback は実際に存在する配列要素についてのみ呼び出され、存在しない配列要素については呼び出されません。

thisArg パラメーターが指定された場合、callback の各呼出しで this 値として使用されます。指定されていない場合は、代わりに undefined が使用されます。

callback は、要素の値、要素のインデックス、および走査中のオブジェクトという3つの引数で呼び出されます。

filter は呼び出されたオブジェクトを直接変更しませんが、callback の呼出しによってそのオブジェクトが変更される場合があります。

filter によって処理される要素の範囲は、callback の最初の呼出しより前に設定されます。filter の呼出し開始後に配列へ追加された要素は callback によって訪問されません。配列の既存要素が変更された場合、callback に渡される値は filter がその要素を訪問した時点の値になります。filter の呼出し開始後、訪問される前に削除された要素は訪問されません。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  4. array を ? ArraySpeciesCreate(obj, 0) とする。
  5. k を 0 とする。
  6. to を 0 とする。
  7. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. selected を ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
      3. selected が true である場合、
        1. ? CreateDataPropertyOrThrow(array, ! ToString(𝔽(to)), kValue) を実行する。
        2. to を to + 1 に設定する。
    4. k を k + 1 に設定する。
  8. array を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

このメソッドは、predicate が true に型強制される値を返す要素を見つけるまで、配列の各要素についてインデックスの昇順に predicate を1回ずつ呼び出します。そのような要素が見つかった場合、find は直ちにその要素値を返します。そうでない場合、find は undefined を返します。

追加情報については FindViaPredicate を参照してください。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. findRecord を ? FindViaPredicate(obj, length, ascending, predicate, thisArg) とする。
  4. findRecord.[[Value]] を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

このメソッドは、predicate が true に型強制される値を返す要素を見つけるまで、配列の各要素についてインデックスの昇順に predicate を1回ずつ呼び出します。そのような要素が見つかった場合、findIndex は直ちにその要素値のインデックスを返します。そうでない場合、findIndex は -1 を返します。

追加情報については FindViaPredicate を参照してください。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. findRecord を ? FindViaPredicate(obj, length, ascending, predicate, thisArg) とする。
  4. findRecord.[[Index]] を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

このメソッドは、predicate が true に型強制される値を返す要素を見つけるまで、配列の各要素についてインデックスの降順に predicate を1回ずつ呼び出します。そのような要素が見つかった場合、findLast は直ちにその要素値を返します。そうでない場合、findLast は undefined を返します。

追加情報については FindViaPredicate を参照してください。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. findRecord を ? FindViaPredicate(obj, length, descending, predicate, thisArg) とする。
  4. findRecord.[[Value]] を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array オブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

このメソッドは、predicate が true に型強制される値を返す要素を見つけるまで、配列の各要素についてインデックスの降順に predicate を1回ずつ呼び出します。そのような要素が見つかった場合、findLastIndex は直ちにその要素値のインデックスを返します。そうでない場合、findLastIndex は -1 を返します。

追加情報については FindViaPredicate を参照してください。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. findRecord を ? FindViaPredicate(obj, length, descending, predicate, thisArg) とする。
  4. findRecord.[[Index]] を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array オブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.12.1 FindViaPredicate ( obj, length, direction, predicate, thisArg )

抽象操作 FindViaPredicate。引数 obj (Object)、length (非負整数)、direction ((ascending または descending))、predicate (ECMAScript 言語値) および thisArg (ECMAScript 言語値)。戻り値:(正常完了 (値:レコード (フィールド:[[Index]] (整数の Number), [[Value]] (ECMAScript 言語値))) または throw 完了)。

obj は array-like オブジェクトまたは TypedArray であるべきです。この操作は、predicate が true に型強制される値を返す要素を見つけるまで、obj の各要素について、direction によって示されるインデックスの昇順または降順で predicate を1回ずつ呼び出します。その時点で、この操作は見つかった要素のインデックスと値を示す Record を返します。そのような要素が見つからない場合、この操作はインデックスに -1𝔽、値に undefined を指定する Record を返します。

predicate は関数であるべきです。配列の要素について呼び出されるとき、要素の値、要素のインデックス、および走査中のオブジェクトという3つの引数が渡されます。その戻り値は Boolean 値へ型強制されます。

thisArg は predicate の各呼出しに対する this 値として使用されます。

この操作は呼び出されたオブジェクトを直接変更しませんが、predicate の呼出しによってそのオブジェクトが変更される場合があります。

処理される要素の範囲は、走査の開始直前、predicate の最初の呼出しより前に設定されます。その後に配列へ追加された要素は predicate によって訪問されません。配列の既存要素が変更された場合、predicate に渡される値は、この操作がその要素を訪問した時点の値になります。走査開始後、訪問される前に削除された要素も訪問され、prototype から検索されるか、undefined になります。

呼び出されると、次の手順を実行する。

  1. IsCallable(predicate) が false である場合、TypeError 例外をスローする。
  2. direction が ascending である場合、
    1. indices を、0(含む)から length(含まない)までの区間内の整数を昇順に並べた List とする。
  3. そうでない場合、
    1. indices を、0(含む)から length(含まない)までの区間内の整数を降順に並べた List とする。
  4. indices の各整数 k について、次を行う。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. 注記: obj が TypedArray である場合、次の Get の呼出しは正常完了を返す。
    3. kValue を ? Get(obj, propertyKey) とする。
    4. testResult を ? Call(predicate, thisArg, « kValue, 𝔽(k), obj ») とする。
    5. ToBoolean(testResult) が true である場合、Record { [[Index]]: 𝔽(k), [[Value]]: kValue } を返す。
  5. Record { [[Index]]: -1𝔽, [[Value]]: undefined } を返す。

23.1.3.13 Array.prototype.flat ( [ depth ] )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. sourceLength を ? LengthOfArrayLike(obj) とする。
  3. depthNumber を 1 とする。
  4. depth が undefined でない場合、
    1. depthNumber を ? ToIntegerOrInfinity(depth) に設定する。
    2. depthNumber < 0 である場合、depthNumber を 0 に設定する。
  5. array を ? ArraySpeciesCreate(obj, 0) とする。
  6. ? FlattenIntoArray(array, obj, sourceLength, 0, depthNumber) を実行する。
  7. array を返す。

23.1.3.13.1 FlattenIntoArray ( target, source, sourceLength, start, depth [ , mapperFunc [ , thisArg ] ] )

抽象操作 FlattenIntoArray。引数 target (Object)、source (Object)、sourceLength (非負整数)、start (非負整数) および depth ((非負整数 または +∞))および省略可能な引数 mapperFunc (関数オブジェクト) および thisArg (ECMAScript 言語値)。戻り値:(正常完了 (値:非負整数) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. 表明: mapperFunc が存在する場合、IsCallable(mapperFunc) は true であり、thisArg が存在し、depth は 1 である。
  2. targetIndex を start とする。
  3. sourceIndex を 0 とする。
  4. sourceIndex < sourceLength の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(sourceIndex)) とする。
    2. exists を ? HasProperty(source, propertyKey) とする。
    3. exists が true である場合、
      1. element を ? Get(source, propertyKey) とする。
      2. mapperFunc が存在する場合、
        1. element を ? Call(mapperFunc, thisArg, « element, 𝔽(sourceIndex), source ») に設定する。
      3. shouldFlatten を false とする。
      4. depth > 0 である場合、
        1. shouldFlatten を ? IsArray(element) に設定する。
      5. shouldFlatten が true である場合、
        1. depth = +∞ である場合、newDepth を +∞ とする。
        2. そうでない場合、newDepth を depth - 1 とする。
        3. elementLength を ? LengthOfArrayLike(element) とする。
        4. targetIndex を ? FlattenIntoArray(target, element, elementLength, targetIndex, newDepth) に設定する。
      6. そうでない場合、
        1. targetIndex ≥ 253 - 1 である場合、TypeError 例外をスローする。
        2. ? CreateDataPropertyOrThrow(target, ! ToString(𝔽(targetIndex)), element) を実行する。
        3. targetIndex を targetIndex + 1 に設定する。
    4. sourceIndex を sourceIndex + 1 に設定する。
  5. targetIndex を返す。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. sourceLength を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(mapperFunc) が false である場合、TypeError 例外をスローする。
  4. array を ? ArraySpeciesCreate(obj, 0) とする。
  5. ? FlattenIntoArray(array, obj, sourceLength, 0, 1, mapperFunc, thisArg) を実行する。
  6. array を返す。

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

注 1

callback は3つの引数を受け取る関数であるべきです。forEach は配列に存在する各要素について昇順に callback を1回ずつ呼び出します。callback は実際に存在する配列要素についてのみ呼び出され、存在しない配列要素については呼び出されません。

thisArg パラメーターが指定された場合、callback の各呼出しで this 値として使用されます。指定されていない場合は、代わりに undefined が使用されます。

callback は、要素の値、要素のインデックス、および走査中のオブジェクトという3つの引数で呼び出されます。

forEach は呼び出されたオブジェクトを直接変更しませんが、callback の呼出しによってそのオブジェクトが変更される場合があります。

forEach によって処理される要素の範囲は、callback の最初の呼出しより前に設定されます。forEach の呼出し開始後に配列へ追加された要素は callback によって訪問されません。配列の既存要素が変更された場合、callback に渡される値は forEach がその要素を訪問した時点の値になります。forEach の呼出し開始後、訪問される前に削除された要素は訪問されません。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  4. k を 0 とする。
  5. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») を実行する。
    4. k を k + 1 に設定する。
  6. undefined を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

このメソッドは SameValueZero アルゴリズムを使用して searchElement と配列の要素を昇順に比較し、いずれかの位置で見つかった場合は true を返します。そうでない場合は false を返します。

省略可能な第2引数 fromIndex の既定値は +0𝔽 です(すなわち、配列全体が検索されます)。配列の長さ以上である場合、false が返され、配列は検索されません。-0𝔽 より小さい場合、配列の末尾からのオフセットとして使用され、fromIndex が計算されます。計算されたインデックスが +0𝔽 以下である場合、配列全体が検索されます。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. length = 0 である場合、false を返す。
  4. k を ? ToClampedIndex(fromIndex, length) とする。
  5. k < length の間、次を繰り返す。
    1. elementK を ? Get(obj, ! ToString(𝔽(k))) とする。
    2. SameValueZero(searchElement, elementK) が true である場合、true を返す。
    3. k を k + 1 に設定する。
  6. false を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

注 3

このメソッドは、類似する indexOf メソッドと意図的に2つの点で異なります。第1に、IsStrictlyEqual ではなく SameValueZero アルゴリズムを使用するため、NaN の配列要素を検出できます。第2に、存在しない配列要素をスキップせず、代わりに undefined として扱います。

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

このメソッドは IsStrictlyEqual アルゴリズムを使用して searchElement と配列の要素を昇順に比較し、1つ以上のインデックスで見つかった場合、そのような最小のインデックスを返します。そうでない場合、-1𝔽 を返します。

注 1

省略可能な第2引数 fromIndex の既定値は +0𝔽 です(すなわち、配列全体が検索されます)。配列の長さ以上である場合、-1𝔽 が返され、配列は検索されません。-0𝔽 より小さい場合、配列の末尾からのオフセットを計算するために使用されます。計算されたインデックスが +0𝔽 以下である場合、配列全体が検索されます。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. length = 0 である場合、-1𝔽 を返す。
  4. k を ? ToClampedIndex(fromIndex, length) とする。
  5. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. elementK を ? Get(obj, propertyKey) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true である場合、𝔽(k) を返す。
    4. k を k + 1 に設定する。
  6. -1𝔽 を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.18 Array.prototype.join ( separator )

このメソッドは配列の要素を String に変換し、その後、それらの String を separator の出現で区切って連結します。separator が指定されていない場合、単一のコンマが separator として使用されます。

呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. separator が undefined である場合、separatorString を "," とする。
  4. そうでない場合、separatorString を ? ToString(separator) とする。
  5. result を空の String とする。
  6. k を 0 とする。
  7. k < length の間、次を繰り返す。
    1. k > 0 である場合、result を result と separatorString の文字列連結に設定する。
    2. element を ? Get(obj, ! ToString(𝔽(k))) とする。
    3. element が undefined でも null でもない場合、
      1. elementString を ? ToString(element) とする。
      2. result を result と elementString の文字列連結に設定する。
    4. k を k + 1 に設定する。
  8. result を返す。
注

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.19 Array.prototype.keys ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. CreateArrayIterator(obj, key) を返す。

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

注 1

このメソッドは IsStrictlyEqual アルゴリズムを使用して searchElement と配列の要素を降順に比較し、1つ以上のインデックスで見つかった場合、そのような最大のインデックスを返します。そうでない場合、-1𝔽 を返します。

省略可能な第2引数 fromIndex の既定値は配列の長さから1を引いた値です(すなわち、配列全体が検索されます)。配列の長さ以上である場合、配列全体が検索されます。-0𝔽 より小さい場合、配列の末尾からのオフセットを計算するために使用されます。計算されたインデックスが -0𝔽 より小さい場合、-1𝔽 が返されます。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. length = 0 である場合、-1𝔽 を返す。
  4. fromIndex が存在しない場合、k を length - 1 とする。そうでない場合、k を min(? ToAbsoluteIndex(fromIndex, length), length - 1) とする。
  5. k ≥ 0 の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. elementK を ? Get(obj, propertyKey) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true である場合、𝔽(k) を返す。
    4. k を k - 1 に設定する。
  6. -1𝔽 を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

callback は3つの引数を受け取る関数であるべきです。map は配列の各要素について昇順に callback を1回ずつ呼び出し、その結果から新しい Array を構築します。callback は実際に存在する配列要素についてのみ呼び出され、存在しない配列要素については呼び出されません。

thisArg パラメーターが指定された場合、callback の各呼出しで this 値として使用されます。指定されていない場合は、代わりに undefined が使用されます。

callback は、要素の値、要素のインデックス、および走査中のオブジェクトという3つの引数で呼び出されます。

map は呼び出されたオブジェクトを直接変更しませんが、callback の呼出しによってそのオブジェクトが変更される場合があります。

map によって処理される要素の範囲は、callback の最初の呼出しより前に設定されます。map の呼出し開始後に配列へ追加された要素は callback によって訪問されません。配列の既存要素が変更された場合、callback に渡される値は map がその要素を訪問した時点の値になります。map の呼出し開始後、訪問される前に削除された要素は訪問されません。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  4. array を ? ArraySpeciesCreate(obj, length) とする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. mappedValue を ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») とする。
      3. ? CreateDataPropertyOrThrow(array, propertyKey, mappedValue) を実行する。
    4. k を k + 1 に設定する。
  7. array を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.22 Array.prototype.pop ( )

注 1

このメソッドは配列の最後の要素を削除して返します。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. length = 0 である場合、
    1. ? Set(obj, "length", +0𝔽, true) を実行する。
    2. undefined を返す。
  4. 表明: length > 0。
  5. newLength を 𝔽(length - 1) とする。
  6. index を ! ToString(newLength) とする。
  7. element を ? Get(obj, index) とする。
  8. ? DeletePropertyOrThrow(obj, index) を実行する。
  9. ? Set(obj, "length", newLength, true) を実行する。
  10. element を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

このメソッドは、引数を現れる順序で配列の末尾に追加します。配列の新しい長さを返します。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. argCount を items の要素数とする。
  4. length + argCount > 253 - 1 である場合、TypeError 例外をスローする。
  5. items の各要素 item について、次を行う。
    1. ? Set(obj, ! ToString(𝔽(length)), item, true) を実行する。
    2. length を length + 1 に設定する。
  6. ? Set(obj, "length", 𝔽(length), true) を実行する。
  7. 𝔽(length) を返す。

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

注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

callback は4つの引数を受け取る関数であるべきです。reduce は、initialValue が指定されていない限り最初の要素をスキップして、配列に存在する各要素について昇順に callback を1回ずつ呼び出します。

callback は4つの引数で呼び出されます。previousValue(前回の callback 呼出しからの値)、currentValue(現在の要素の値)、currentIndex、および走査中のオブジェクトです。callback が最初に呼び出されるとき、previousValue と currentValue は2通りの値のいずれかになります。reduce の呼出しで initialValue が指定された場合、previousValue は initialValue となり、currentValue は配列の最初の値となります。initialValue が指定されていない場合、previousValue は配列の最初の値となり、currentValue は2番目の値となります。配列が要素を含まず、initialValue が指定されていない場合は TypeError です。

reduce は呼び出されたオブジェクトを直接変更しませんが、callback の呼出しによってそのオブジェクトが変更される場合があります。

reduce によって処理される要素の範囲は、callback の最初の呼出しより前に設定されます。reduce の呼出し開始後に配列へ追加された要素は callback によって訪問されません。配列の既存要素が変更された場合、callback に渡される値は reduce がその要素を訪問した時点の値になります。reduce の呼出し開始後、訪問される前に削除された要素は訪問されません。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  4. length = 0 かつ initialValue が存在しない場合、TypeError 例外をスローする。
  5. k を 0 とする。
  6. accumulator を undefined とする。
  7. initialValue が存在する場合、
    1. accumulator を initialValue に設定する。
  8. そうでない場合、
    1. kPresent を false とする。
    2. kPresent が false かつ k < length の間、次を繰り返す。
      1. propertyKey を ! ToString(𝔽(k)) とする。
      2. kPresent を ? HasProperty(obj, propertyKey) に設定する。
      3. kPresent が true である場合、
        1. accumulator を ? Get(obj, propertyKey) に設定する。
      4. k を k + 1 に設定する。
    3. kPresent が false である場合、TypeError 例外をスローする。
  9. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. accumulator を ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») に設定する。
    4. k を k + 1 に設定する。
  10. accumulator を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

callback は4つの引数を受け取る関数であるべきです。reduceRight は、initialValue が指定されていない限り最初の呼出しをスキップして、配列に存在する各要素について降順に callback を1回ずつ呼び出します。

callback は4つの引数で呼び出されます。previousValue(前回の callback 呼出しからの値)、currentValue(現在の要素の値)、currentIndex、および走査中のオブジェクトです。関数が最初に呼び出されるとき、previousValue と currentValue は2通りの値のいずれかになります。reduceRight の呼出しで initialValue が指定された場合、previousValue は initialValue となり、currentValue は配列の最後の値となります。initialValue が指定されていない場合、previousValue は配列の最後の値となり、currentValue は最後から2番目の値となります。配列が要素を含まず、initialValue が指定されていない場合は TypeError です。

reduceRight は呼び出されたオブジェクトを直接変更しませんが、callback の呼出しによってそのオブジェクトが変更される場合があります。

reduceRight によって処理される要素の範囲は、callback の最初の呼出しより前に設定されます。reduceRight の呼出し開始後に配列へ追加された要素は callback によって訪問されません。配列の既存要素が callback によって変更された場合、callback に渡される値は reduceRight がその要素を訪問した時点の値になります。reduceRight の呼出し開始後、訪問される前に削除された要素は訪問されません。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  4. length = 0 かつ initialValue が存在しない場合、TypeError 例外をスローする。
  5. k を length - 1 とする。
  6. accumulator を undefined とする。
  7. initialValue が存在する場合、
    1. accumulator を initialValue に設定する。
  8. そうでない場合、
    1. kPresent を false とする。
    2. kPresent が false かつ k ≥ 0 の間、次を繰り返す。
      1. propertyKey を ! ToString(𝔽(k)) とする。
      2. kPresent を ? HasProperty(obj, propertyKey) に設定する。
      3. kPresent が true である場合、
        1. accumulator を ? Get(obj, propertyKey) に設定する。
      4. k を k - 1 に設定する。
    3. kPresent が false である場合、TypeError 例外をスローする。
  9. k ≥ 0 の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. accumulator を ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») に設定する。
    4. k を k - 1 に設定する。
  10. accumulator を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.26 Array.prototype.reverse ( )

注 1

このメソッドは配列の要素を並べ替えて順序を反転します。反転された配列を返します。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. middle を floor(length / 2) とする。
  4. lower を 0 とする。
  5. lower ≠ middle の間、次を繰り返す。
    1. upper を length - lower - 1 とする。
    2. upperP を ! ToString(𝔽(upper)) とする。
    3. lowerP を ! ToString(𝔽(lower)) とする。
    4. lowerExists を ? HasProperty(obj, lowerP) とする。
    5. lowerExists が true である場合、
      1. lowerValue を ? Get(obj, lowerP) とする。
    6. upperExists を ? HasProperty(obj, upperP) とする。
    7. upperExists が true である場合、
      1. upperValue を ? Get(obj, upperP) とする。
    8. lowerExists が true かつ upperExists が true である場合、
      1. ? Set(obj, lowerP, upperValue, true) を実行する。
      2. ? Set(obj, upperP, lowerValue, true) を実行する。
    9. そうでなく、lowerExists が false かつ upperExists が true である場合、
      1. ? Set(obj, lowerP, upperValue, true) を実行する。
      2. ? DeletePropertyOrThrow(obj, upperP) を実行する。
    10. そうでなく、lowerExists が true かつ upperExists が false である場合、
      1. ? DeletePropertyOrThrow(obj, lowerP) を実行する。
      2. ? Set(obj, upperP, lowerValue, true) を実行する。
    11. そうでない場合、
      1. 表明: lowerExists と upperExists はともに false である。
      2. 注記: 操作は不要である。
    12. lower を lower + 1 に設定する。
  6. obj を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.27 Array.prototype.shift ( )

このメソッドは配列の最初の要素を削除して返します。

呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. length = 0 である場合、
    1. ? Set(obj, "length", +0𝔽, true) を実行する。
    2. undefined を返す。
  4. first を ? Get(obj, "0") とする。
  5. k を 1 とする。
  6. k < length の間、次を繰り返す。
    1. from を ! ToString(𝔽(k)) とする。
    2. to を ! ToString(𝔽(k - 1)) とする。
    3. fromPresent を ? HasProperty(obj, from) とする。
    4. fromPresent が true である場合、
      1. fromValue を ? Get(obj, from) とする。
      2. ? Set(obj, to, fromValue, true) を実行する。
    5. そうでない場合、
      1. 表明: fromPresent は false である。
      2. ? DeletePropertyOrThrow(obj, to) を実行する。
    6. k を k + 1 に設定する。
  7. ? DeletePropertyOrThrow(obj, ! ToString(𝔽(length - 1))) を実行する。
  8. ? Set(obj, "length", 𝔽(length - 1), true) を実行する。
  9. first を返す。
注

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.28 Array.prototype.slice ( start, end )

このメソッドは、要素 start から要素 end の直前まで(end が undefined の場合は配列の末尾まで)の配列要素を含む配列を返します。start が負である場合、length を配列の長さとして length + start として扱われます。end が負である場合、length を配列の長さとして length + end として扱われます。

呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. k を ? ToClampedIndex(start, length) とする。
  4. end が undefined である場合、final を length とする。そうでない場合、final を ? ToClampedIndex(end, length) とする。
  5. count を max(final - k, 0) とする。
  6. array を ? ArraySpeciesCreate(obj, count) とする。
  7. resultIndex を 0 とする。
  8. k < final の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. ? CreateDataPropertyOrThrow(array, ! ToString(𝔽(resultIndex)), kValue) を実行する。
    4. k を k + 1 に設定する。
    5. resultIndex を resultIndex + 1 に設定する。
  9. ? Set(array, "length", 𝔽(resultIndex), true) を実行する。
  10. array を返す。
注 1

手順 9 で "length" プロパティを明示的に設定するのは、array が組込み Array でない場合でも長さが正しいことを保証することを意図しています。

注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

注 1

callback は3つの引数を受け取り、Boolean 値へ型強制できる値を返す関数であるべきです。some は、callback が true を返す要素を見つけるまで、配列に存在する各要素について昇順に callback を1回ずつ呼び出します。そのような要素が見つかった場合、some は直ちに true を返します。そうでない場合、some は false を返します。callback は実際に存在する配列要素についてのみ呼び出され、存在しない配列要素については呼び出されません。

thisArg パラメーターが指定された場合、callback の各呼出しで this 値として使用されます。指定されていない場合は、代わりに undefined が使用されます。

callback は、要素の値、要素のインデックス、および走査中のオブジェクトという3つの引数で呼び出されます。

some は呼び出されたオブジェクトを直接変更しませんが、callback の呼出しによってそのオブジェクトが変更される場合があります。

some によって処理される要素の範囲は、callback の最初の呼出しより前に設定されます。some の呼出し開始後に配列へ追加された要素は callback によって訪問されません。配列の既存要素が変更された場合、callback に渡される値は some がその要素を訪問した時点の値になります。some の呼出し開始後、訪問される前に削除された要素は訪問されません。some は数学における「存在する」量化子のように動作します。特に、空の配列については false を返します。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  4. k を 0 とする。
  5. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. testResult を ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
      3. testResult が true である場合、true を返す。
    4. k を k + 1 に設定する。
  6. false を返す。
注 2

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.30 Array.prototype.sort ( comparator )

このメソッドはこの配列の要素を並べ替えます。comparator が undefined でない場合、2つの引数 x と y を受け取り、x < y である場合は負の Number、x > y である場合は正の Number、それ以外の場合はゼロを返す関数であるべきです。

呼び出されたとき、次の手順を実行します。

  1. comparator が undefined でなく、IsCallable(comparator) が false である場合、TypeError 例外をスローする。
  2. obj を ? ToObject(this 値) とする。
  3. length を ? LengthOfArrayLike(obj) とする。
  4. sortCompare を、comparator を捕捉し、パラメーター (x, y) を持ち、呼び出されたときに次の手順を実行する新しい Abstract Closure とする。
    1. ? CompareArrayElements(x, y, comparator) を返す。
  5. sortedList を ? SortIndexedProperties(obj, length, sortCompare, skip-holes) とする。
  6. itemCount を sortedList の要素数とする。
  7. j を 0 とする。
  8. j < itemCount の間、次を繰り返す。
    1. ? Set(obj, ! ToString(𝔽(j)), sortedList[j], true) を実行する。
    2. j を j + 1 に設定する。
  9. 注記: 手順 5 の SortIndexedProperties の呼出しは skip-holes を使用する。残りのインデックスは、検出されてソートから除外された hole の数を保持するために削除される。
  10. j < length の間、次を繰り返す。
    1. ? DeletePropertyOrThrow(obj, ! ToString(𝔽(j))) を実行する。
    2. j を j + 1 に設定する。
  11. obj を返す。
注 1

存在しないプロパティ値は常に undefined プロパティ値より大きいものとして比較され、undefined は常に他の任意の値より大きいものとして比較されるため(CompareArrayElements を参照)、undefined プロパティ値は常に結果の末尾にソートされ、その後に存在しないプロパティ値が続きます。

注 2

手順 5 および 6 の ToString 抽象操作によって実行されるメソッド呼出しは、sortCompare が一貫した比較器として動作しなくなる可能性があります。

注 3

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.30.1 SortIndexedProperties ( obj, length, sortCompare, holes )

抽象操作 SortIndexedProperties。引数 obj (Object)、length (非負整数)、sortCompare (2 つのパラメーターを持つ抽象クロージャ) および holes ((skip-holes または read-through-holes))。戻り値:(正常完了 (値:リスト (要素:ECMAScript 言語値)) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. items を新しい空の List とする。
  2. k を 0 とする。
  3. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. holes が skip-holes である場合、
      1. kRead を ? HasProperty(obj, propertyKey) とする。
    3. そうでない場合、
      1. 表明: holes は read-through-holes である。
      2. kRead を true とする。
    4. kRead が true である場合、
      1. kValue を ? Get(obj, propertyKey) とする。
      2. kValue を items に追加する。
    5. k を k + 1 に設定する。
  4. 実装定義の順序の sortCompare の呼出しを使用して items をソートする。そのような呼出しのいずれかが中断完了を返した場合、それ以降の sortCompare 呼出しを実行する前に停止し、その Completion Record を返す。
  5. items を返す。

ソート順序とは、上記アルゴリズムの手順 4 完了後の items の順序です。sortCompare が items の要素に対する一貫した比較器でない場合、ソート順序は実装定義です。SortIndexedProperties が Array.prototype.sort または Array.prototype.toSorted によって呼び出される場合、comparator が undefined であり、sortCompare へ引数として渡される特定の値に対する ToString のすべての適用が同じ結果を生成しない場合にも、ソート順序は実装定義です。

ソート順序が実装定義であると規定されていない限り、次の条件をすべて満たさなければなりません。

  • itemCount 未満の非負整数の数学的置換 π が存在し、itemCount 未満のすべての非負整数 j について、要素 old[j] が new[π(j)] と完全に同じでなければなりません。
  • そして、itemCount 未満のすべての非負整数 j および k について、ℝ(sortCompare(old[j], old[k])) < 0 である場合、π(j) < π(k) でなければなりません。
  • また、j < k < itemCount を満たすすべての非負整数 j および k について、ℝ(sortCompare(old[j], old[k])) = 0 である場合、π(j) < π(k) でなければなりません。すなわち、ソートは安定です。

ここでは、表記 old[j] は手順 4 が実行される前の items[j] を参照するために使用され、表記 new[j] は手順 4 が実行された後の items[j] を参照するために使用されます。

Abstract Closure または関数 comparator は、集合 values 内のすべての値 a、b、および c(同じ値であってもよい)について、以下の要件がすべて満たされる場合、値の集合 values に対する一貫した比較器です。表記 a <C b は ℝ(comparator(a, b)) < 0 を意味し、a =C b は ℝ(comparator(a, b)) = 0 を意味し、a >C b は ℝ(comparator(a, b)) > 0 を意味します。

  • comparator(a, b) を呼び出すと、2つの引数として特定の値の組 a と b が与えられたとき、常に同じ値 v が返されます。さらに、v は Number であり、NaN ではありません。これは、特定の a と b の組について、a <C b、a =C b、および a >C b のうち正確に1つが真になることを意味します。
  • comparator(a, b) の呼出しは obj または obj の prototype chain 上のいかなるオブジェクトも変更しません。
  • a =C a(反射性)
  • a =C b である場合、b =C a(対称性)
  • a =C b かつ b =C c である場合、a =C c(=C の推移性)
  • a <C b かつ b <C c である場合、a <C c(<C の推移性)
  • a >C b かつ b >C c である場合、a >C c(>C の推移性)
注

上記の条件は、comparator が集合 values を同値類に分割し、それらの同値類が全順序付けされることを保証するために必要十分です。

23.1.3.30.2 CompareArrayElements ( x, y, comparator )

抽象操作 CompareArrayElements。引数 x (ECMAScript 言語値)、y (ECMAScript 言語値) および comparator ((関数オブジェクト または undefined))。戻り値:(正常完了 (値:Number) または 中途完了)。 呼び出されると、次の手順を実行する。

  1. x が undefined かつ y が undefined である場合、+0𝔽 を返す。
  2. x が undefined である場合、1𝔽 を返す。
  3. y が undefined である場合、-1𝔽 を返す。
  4. comparator が undefined でない場合、
    1. result を ? ToNumber(? Call(comparator, undefined, « x, y »)) とする。
    2. result が NaN である場合、+0𝔽 を返す。
    3. result を返す。
  5. xString を ? ToString(x) とする。
  6. yString を ? ToString(y) とする。
  7. xSmaller を ! IsLessThan(xString, yString, true) とする。
  8. xSmaller が true である場合、-1𝔽 を返す。
  9. ySmaller を ! IsLessThan(yString, xString, true) とする。
  10. ySmaller が true である場合、1𝔽 を返す。
  11. +0𝔽 を返す。

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

注 1

このメソッドは整数インデックス start から始まる配列の deleteCount 個の要素を削除し、それらを items の要素で置き換えます。削除された要素(存在する場合)を含む Array を返します。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. actualStart を ? ToClampedIndex(start, length) とする。
  4. itemCount を items の要素数とする。
  5. start が存在しない場合、
    1. actualDeleteCount を 0 とする。
  6. そうでなく、deleteCount が存在しない場合、
    1. actualDeleteCount を length - actualStart とする。
    2. 表明: actualDeleteCount ≥ 0。
  7. そうでない場合、
    1. dc を ? ToIntegerOrInfinity(deleteCount) とする。
    2. actualDeleteCount を dc を 0 と length - actualStart の間にクランプした結果とする。
  8. length + itemCount - actualDeleteCount > 253 - 1 である場合、TypeError 例外をスローする。
  9. deletedArray を ? ArraySpeciesCreate(obj, actualDeleteCount) とする。
  10. k を 0 とする。
  11. k < actualDeleteCount の間、次を繰り返す。
    1. from を ! ToString(𝔽(actualStart + k)) とする。
    2. ? HasProperty(obj, from) が true である場合、
      1. fromValue を ? Get(obj, from) とする。
      2. ? CreateDataPropertyOrThrow(deletedArray, ! ToString(𝔽(k)), fromValue) を実行する。
    3. k を k + 1 に設定する。
  12. ? Set(deletedArray, "length", 𝔽(actualDeleteCount), true) を実行する。
  13. itemCount < actualDeleteCount である場合、
    1. k を actualStart に設定する。
    2. k < (length - actualDeleteCount) の間、次を繰り返す。
      1. from を ! ToString(𝔽(k + actualDeleteCount)) とする。
      2. to を ! ToString(𝔽(k + itemCount)) とする。
      3. ? HasProperty(obj, from) が true である場合、
        1. fromValue を ? Get(obj, from) とする。
        2. ? Set(obj, to, fromValue, true) を実行する。
      4. そうでない場合、
        1. ? DeletePropertyOrThrow(obj, to) を実行する。
      5. k を k + 1 に設定する。
    3. k を length に設定する。
    4. k > (length - actualDeleteCount + itemCount) の間、次を繰り返す。
      1. ? DeletePropertyOrThrow(obj, ! ToString(𝔽(k - 1))) を実行する。
      2. k を k - 1 に設定する。
  14. そうでなく、itemCount > actualDeleteCount である場合、
    1. k を (length - actualDeleteCount) に設定する。
    2. k > actualStart の間、次を繰り返す。
      1. from を ! ToString(𝔽(k + actualDeleteCount - 1)) とする。
      2. to を ! ToString(𝔽(k + itemCount - 1)) とする。
      3. ? HasProperty(obj, from) が true である場合、
        1. fromValue を ? Get(obj, from) とする。
        2. ? Set(obj, to, fromValue, true) を実行する。
      4. そうでない場合、
        1. ? DeletePropertyOrThrow(obj, to) を実行する。
      5. k を k - 1 に設定する。
  15. k を actualStart に設定する。
  16. items の各要素 item について、次を行う。
    1. ? Set(obj, ! ToString(𝔽(k)), item, true) を実行する。
    2. k を k + 1 に設定する。
  17. ? Set(obj, "length", 𝔽(length - actualDeleteCount + itemCount), true) を実行する。
  18. deletedArray を返す。
注 2

手順 12 および 17 で "length" プロパティを明示的に設定するのは、オブジェクトが組込み Array でない場合でも長さが正しいことを保証することを意図しています。

注 3

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

ECMA-402 Internationalization API を含む ECMAScript 実装は、ECMA-402 で規定されるとおりにこのメソッドを実装しなければなりません。それ以外の場合、このメソッドには次の仕様が使用されます。

注 1

ECMA-402 の第1版には、このメソッドの代替仕様は含まれていませんでした。

このメソッドの省略可能なパラメーターの意味は ECMA-402 で定義されます。ECMA-402 のサポートを含まない実装は、それらのパラメーター位置を他の目的に使用してはなりません。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. array を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(array) とする。
  3. separator を、ホスト環境の現在のロケールに適した実装定義のリスト区切り String 値(" , " など)とする。
  4. result を空の String とする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. k > 0 である場合、result を result と separator の文字列連結に設定する。
    2. element を ? Get(array, ! ToString(𝔽(k))) とする。
    3. element が undefined でも null でもない場合、
      1. elementString を ? ToString(? Invoke(element, "toLocaleString")) とする。
      2. result を result と elementString の文字列連結に設定する。
    4. k を k + 1 に設定する。
  7. result を返す。
注 2

このメソッドは配列の要素をそれぞれの toLocaleString メソッドを使用して String に変換し、その後、それらの String を実装定義のロケール依存 separator String の出現で区切って連結します。このメソッドは toString に類似していますが、ホスト環境の現在のロケールの慣例に対応するロケール依存の結果を生成することを意図しています。

注 3

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.33 Array.prototype.toReversed ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. array を ? ArrayCreate(length) とする。
  4. k を 0 とする。
  5. k < length の間、次を繰り返す。
    1. from を ! ToString(𝔽(length - k - 1)) とする。
    2. propertyKey を ! ToString(𝔽(k)) とする。
    3. fromValue を ? Get(obj, from) とする。
    4. ! CreateDataPropertyOrThrow(array, propertyKey, fromValue) を実行する。
    5. k を k + 1 に設定する。
  6. array を返す。

23.1.3.34 Array.prototype.toSorted ( comparator )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. comparator が undefined でなく、IsCallable(comparator) が false である場合、TypeError 例外をスローする。
  2. obj を ? ToObject(this 値) とする。
  3. length を ? LengthOfArrayLike(obj) とする。
  4. array を ? ArrayCreate(length) とする。
  5. sortCompare を、comparator を捕捉し、パラメーター (x, y) を持ち、呼び出されたときに次の手順を実行する新しい Abstract Closure とする。
    1. ? CompareArrayElements(x, y, comparator) を返す。
  6. sortedList を ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) とする。
  7. j を 0 とする。
  8. j < length の間、次を繰り返す。
    1. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(j)), sortedList[j]) を実行する。
    2. j を j + 1 に設定する。
  9. array を返す。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. actualStart を ? ToClampedIndex(start, length) とする。
  4. insertCount を items の要素数とする。
  5. maxSkipCount を length - actualStart とする。
  6. start が存在しない場合、
    1. actualSkipCount を 0 とする。
  7. そうでなく、skipCount が存在しない場合、
    1. actualSkipCount を maxSkipCount とする。
  8. そうでない場合、
    1. actualSkipCount を ? ToIntegerOrInfinity(skipCount) を 0 と maxSkipCount の間にクランプした結果とする。
  9. newLength を length + insertCount - actualSkipCount とする。
  10. 表明: newLength ≥ 0。
  11. newLength > 253 - 1 である場合、TypeError 例外をスローする。
  12. newArray を ? ArrayCreate(newLength) とする。
  13. writeIndex を 0 とする。
  14. readIndex を actualStart + actualSkipCount とする。
  15. writeIndex < actualStart の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(writeIndex)) とする。
    2. iValue を ? Get(obj, propertyKey) とする。
    3. ! CreateDataPropertyOrThrow(newArray, propertyKey, iValue) を実行する。
    4. writeIndex を writeIndex + 1 に設定する。
  16. items の各要素 item について、次を行う。
    1. propertyKey を ! ToString(𝔽(writeIndex)) とする。
    2. ! CreateDataPropertyOrThrow(newArray, propertyKey, item) を実行する。
    3. writeIndex を writeIndex + 1 に設定する。
  17. writeIndex < newLength の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(writeIndex)) とする。
    2. from を ! ToString(𝔽(readIndex)) とする。
    3. fromValue を ? Get(obj, from) とする。
    4. ! CreateDataPropertyOrThrow(newArray, propertyKey, fromValue) を実行する。
    5. writeIndex を writeIndex + 1 に設定する。
    6. readIndex を readIndex + 1 に設定する。
  18. newArray を返す。

23.1.3.36 Array.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. array を ? ToObject(this 値) とする。
  2. func を ? Get(array, "join") とする。
  3. IsCallable(func) が false である場合、func をイントリンシック関数 %Object.prototype.toString% に設定する。
  4. ? Call(func, array) を返す。
注

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

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

このメソッドは、引数リスト内で現れる順序と配列内での順序が同じになるよう、引数を配列の先頭に追加します。

呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. argCount を items の要素数とする。
  4. argCount > 0 である場合、
    1. length + argCount > 253 - 1 である場合、TypeError 例外をスローする。
    2. k を length とする。
    3. k > 0 の間、次を繰り返す。
      1. from を ! ToString(𝔽(k - 1)) とする。
      2. to を ! ToString(𝔽(k + argCount - 1)) とする。
      3. fromPresent を ? HasProperty(obj, from) とする。
      4. fromPresent が true である場合、
        1. fromValue を ? Get(obj, from) とする。
        2. ? Set(obj, to, fromValue, true) を実行する。
      5. そうでない場合、
        1. 表明: fromPresent は false である。
        2. ? DeletePropertyOrThrow(obj, to) を実行する。
      6. k を k - 1 に設定する。
    4. j を 0 とする。
    5. items の各要素 item について、次を行う。
      1. ? Set(obj, ! ToString(𝔽(j)), item, true) を実行する。
      2. j を j + 1 に設定する。
  5. ? Set(obj, "length", 𝔽(length + argCount), true) を実行する。
  6. 𝔽(length + argCount) を返す。

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

注

このメソッドは意図的に汎用です。this 値が Array であることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

23.1.3.38 Array.prototype.values ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. CreateArrayIterator(obj, value) を返す。

23.1.3.39 Array.prototype.with ( index, value )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を ? ToObject(this 値) とする。
  2. length を ? LengthOfArrayLike(obj) とする。
  3. actualIndex を ? ToAbsoluteIndex(index, length) とする。
  4. actualIndex < 0 または actualIndex ≥ length である場合、RangeError 例外をスローする。
  5. array を ? ArrayCreate(length) とする。
  6. k を 0 とする。
  7. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. k = actualIndex である場合、fromValue を value とする。
    3. そうでない場合、fromValue を ? Get(obj, propertyKey) とする。
    4. ! CreateDataPropertyOrThrow(array, propertyKey, fromValue) を実行する。
    5. k を k + 1 に設定する。
  8. array を返す。

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 } を持ちます。

注

このオブジェクト自身のプロパティ名は、ECMAScript 2015 仕様より前には Array.prototype の標準プロパティとして含まれていなかったプロパティ名です。これらの名前は、外側のスコープでこれらの名前のいずれかを binding として使用し、その binding が binding object が Array である with 文によって隠される既存コードの動作を保持するため、with 文の binding の目的では無視されます。

"with" が unscopableList に含まれていない理由は、すでに予約語だからです。

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

Array インスタンスは Array 特殊オブジェクトであり、そのようなオブジェクトに対して規定された内部メソッドを持ちます。Array インスタンスは Array prototype オブジェクトからプロパティを継承します。

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

23.1.4.1 length

Array インスタンスの "length" プロパティはデータプロパティであり、その値は、名前が配列インデックスであるすべての configurable な独自プロパティの名前より常に数値的に大きくなります。

"length" プロパティは初期状態で属性 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } を持ちます。

注

"length" プロパティの値を減少させると、配列インデックスが古い長さの値と新しい長さの値の間にある独自配列要素が削除されるという副作用があります。ただし、non-configurable プロパティは削除できません。Array の "length" プロパティを、その配列に存在する non-configurable な配列インデックス付きプロパティの最大の数値独自プロパティ名以下の数値に設定しようとすると、length はその non-configurable な数値独自プロパティ名より1大きい数値に設定されます。10.4.2.1 を参照してください。

23.1.5 Array Iterator オブジェクト

Array Iterator は、特定の Array インスタンスオブジェクトに対する特定の反復を表すオブジェクトです。Array Iterator オブジェクトには名前付きコンストラクターはありません。代わりに、Array Iterator オブジェクトは Array インスタンスオブジェクトの特定のメソッドを呼び出すことによって作成されます。

23.1.5.1 CreateArrayIterator ( array, kind )

抽象操作 CreateArrayIterator。引数 array (Object) および kind ((key+value、key または value))。戻り値:Object。 そのような iterator を返す Array メソッドの iterator オブジェクトを作成するために使用されます。 呼び出されると、次の手順を実行する。

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

23.1.5.2 %ArrayIteratorPrototype% オブジェクト

%ArrayIteratorPrototype% オブジェクトは:

23.1.5.2.1 %ArrayIteratorPrototype%.next ( )

  1. iteratorObj を this 値とする。
  2. iteratorObj が Object でない場合、TypeError 例外をスローする。
  3. iteratorObj が Array Iterator Instance(23.1.5.3)のすべての内部スロットを持たない場合、TypeError 例外をスローする。
  4. array を iteratorObj.[[IteratedArrayLike]] とする。
  5. array が undefined である場合、CreateIteratorResultObject(undefined, true) を返す。
  6. index を iteratorObj.[[ArrayLikeNextIndex]] とする。
  7. kind を iteratorObj.[[ArrayLikeIterationKind]] とする。
  8. array が [[TypedArrayName]] 内部スロットを持つ場合、
    1. taRecord を ? ValidateTypedArrayBounds(array, seq-cst) とする。
    2. length を TypedArrayLength(taRecord) とする。
  9. そうでない場合、
    1. length を ? LengthOfArrayLike(array) とする。
  10. index ≥ length である場合、
    1. iteratorObj.[[IteratedArrayLike]] を undefined に設定する。
    2. CreateIteratorResultObject(undefined, true) を返す。
  11. iteratorObj.[[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. そうでない場合、
      1. 表明: kind は key+value である。
      2. result を CreateArrayFromList(« indexNumber, elementValue ») とする。
  15. CreateIteratorResultObject(result, false) を返す。

23.1.5.2.2 %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag% プロパティの初期値は String 値 "Array Iterator" です。

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

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

Array Iterator インスタンスは、%ArrayIteratorPrototype% イントリンシックオブジェクトからプロパティを継承する通常オブジェクトです。Array Iterator インスタンスは、表 70 に列挙される内部スロットを持つ状態で最初に作成されます。

表 70: Array Iterator インスタンスの内部スロット
内部スロット 型 説明
[[IteratedArrayLike]] an Object or undefined 反復対象となっている array-like オブジェクト。
[[ArrayLikeNextIndex]] a non-negative integer この iterator によって次に検査される要素の整数インデックス。
[[ArrayLikeIterationKind]] key+value, key, or value 反復の各要素について何が返されるかを識別する値。

23.2 TypedArray オブジェクト

TypedArray は、基礎となるバイナリデータバッファ(25.1)の array-like なビューを提供します。TypedArray 要素型とは、TypedArray インスタンスのすべての要素が持つ基礎となるバイナリスカラーデータ型です。サポートされる各要素型について、表 71 に列挙される個別の TypedArray コンストラクターがあります。表 71 内の各コンストラクターには、それぞれ対応する個別の prototype オブジェクトがあります。

表 71: 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]] 内部スロットを持ちます。
  • 値が "TypedArray" である "name" プロパティを持ちます。
  • 次のプロパティを持ちます。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. ctor を this 値とする。
  2. IsConstructor(ctor) が false である場合、TypeError 例外をスローする。
  3. mapper が undefined である場合、
    1. mapping を false とする。
  4. そうでない場合、
    1. IsCallable(mapper) が false である場合、TypeError 例外をスローする。
    2. mapping を true とする。
  5. usingIterator を ? GetMethod(source, %Symbol.iterator%) とする。
  6. usingIterator が undefined でない場合、
    1. values を ? IteratorToList(? GetIteratorFromMethod(source, usingIterator)) とする。
    2. length を values の要素数とする。
    3. targetObj を ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
    4. k を 0 とする。
    5. k < length の間、次を繰り返す。
      1. kValue を values[k] とする。
      2. mapping が true である場合、
        1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
      3. そうでない場合、
        1. mappedValue を kValue とする。
      4. ? TypedArraySetElement(targetObj, 𝔽(k), mappedValue) を実行する。
      5. k を k + 1 に設定する。
    6. targetObj を返す。
  7. 注記: source は iterable オブジェクトではないため、すでに array-like オブジェクトであると仮定する。
  8. arrayLike を ! ToObject(source) とする。
  9. length を ? LengthOfArrayLike(arrayLike) とする。
  10. targetObj を ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
  11. k を 0 とする。
  12. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ? Get(arrayLike, propertyKey) とする。
    3. mapping が true である場合、
      1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
    4. そうでない場合、
      1. mappedValue を kValue とする。
    5. ? TypedArraySetElement(targetObj, 𝔽(k), mappedValue) を実行する。
    6. k を k + 1 に設定する。
  13. targetObj を返す。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. length を items の要素数とする。
  2. ctor を this 値とする。
  3. IsConstructor(ctor) が false である場合、TypeError 例外をスローする。
  4. newObj を ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. kValue を items[k] とする。
    2. ? TypedArraySetElement(newObj, 𝔽(k), kValue) を実行する。
    3. k を k + 1 に設定する。
  7. newObj を返す。

23.2.2.3 %TypedArray%.prototype

%TypedArray%.prototype の初期値は %TypedArray% prototype オブジェクトです。

このプロパティは属性 { [[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]" です。

注

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

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

%TypedArray% prototype オブジェクトは:

  • 値が %Object.prototype% である [[Prototype]] 内部スロットを持ちます。
  • %TypedArray.prototype% です。
  • 通常オブジェクトです。
  • [[ViewedArrayBuffer]] または TypedArray インスタンスオブジェクトに固有のその他の内部スロットを持ちません。

23.2.3.1 %TypedArray%.prototype.at ( index )

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. k を ? ToAbsoluteIndex(index, length) とする。
  5. k < 0 または k ≥ length である場合、undefined を返す。
  6. TypedArrayGetElement(obj, 𝔽(k)) を返す。

23.2.3.2 get %TypedArray%.prototype.buffer

%TypedArray%.prototype.buffer は、set アクセサー関数が undefined であるアクセサープロパティです。その get アクセサー関数は、呼び出されたときに次の手順を実行します。

  1. obj を this 値とする。
  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. 表明: obj は [[ViewedArrayBuffer]] 内部スロットを持つ。
  4. buffer を obj.[[ViewedArrayBuffer]] とする。
  5. buffer を返す。

23.2.3.3 get %TypedArray%.prototype.byteLength

%TypedArray%.prototype.byteLength は、set アクセサー関数が undefined であるアクセサープロパティです。その get アクセサー関数は、呼び出されたときに次の手順を実行します。

  1. obj を this 値とする。
  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. 表明: obj は [[ViewedArrayBuffer]] 内部スロットを持つ。
  4. taRecord を MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  5. IsTypedArrayOutOfBounds(taRecord) が true である場合、+0𝔽 を返す。
  6. size を TypedArrayByteLength(taRecord) とする。
  7. 𝔽(size) を返す。

23.2.3.4 get %TypedArray%.prototype.byteOffset

%TypedArray%.prototype.byteOffset は、set アクセサー関数が undefined であるアクセサープロパティです。その get アクセサー関数は、呼び出されたときに次の手順を実行します。

  1. obj を this 値とする。
  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. 表明: obj は [[ViewedArrayBuffer]] 内部スロットを持つ。
  4. taRecord を MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  5. IsTypedArrayOutOfBounds(taRecord) が true である場合、+0𝔽 を返す。
  6. offset を obj.[[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. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. targetIndex を ? ToClampedIndex(target, length) とする。
  5. startIndex を ? ToClampedIndex(start, length) とする。
  6. end が undefined である場合、endIndex を length とする。そうでない場合、endIndex を ? ToClampedIndex(end, length) とする。
  7. count を min(endIndex - startIndex, length - targetIndex) とする。
  8. count > 0 である場合、
    1. 注記: コピーは、元データのビットレベルのエンコーディングを保持する方法で実行されなければならない。
    2. buffer を obj.[[ViewedArrayBuffer]] とする。
    3. taRecord を ? ValidateTypedArrayBounds(obj, seq-cst) に設定する。
    4. length を TypedArrayLength(taRecord) に設定する。
    5. 注記: 上記手順の副作用によって obj のサイズが縮小されている場合があり、その場合、依然として適用可能な最長の接頭部分でコピーを続行するべきである。
    6. count を min(count, length - startIndex, length - targetIndex) に設定する。
    7. elementSize を TypedArrayElementSize(obj) とする。
    8. byteOffset を obj.[[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 ≥ 0 かつ toByteIndex ≥ 0。
      2. value を GetValueFromBuffer(buffer, fromByteIndex, uint8, true, unordered) とする。
      3. SetValueInBuffer(buffer, toByteIndex, uint8, value, true, unordered) を実行する。
      4. fromByteIndex を fromByteIndex + direction に設定する。
      5. toByteIndex を toByteIndex + direction に設定する。
      6. countBytes を countBytes - 1 に設定する。
  9. obj を返す。

23.2.3.7 %TypedArray%.prototype.entries ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. ? ValidateTypedArray(obj, seq-cst) を実行する。
  3. CreateArrayIterator(obj, key+value) を返す。

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

このメソッドの引数の解釈と使用法は、23.1.3.6 で定義される Array.prototype.every と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. testResult を ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
    3. testResult が false である場合、false を返す。
    4. k を k + 1 に設定する。
  7. true を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.7 で定義される Array.prototype.fill と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. obj.[[ContentType]] が bigint である場合、value を ? ToBigInt(value) に設定する。
  5. そうでない場合、value を ? ToNumber(value) に設定する。
  6. startIndex を ? ToClampedIndex(start, length) とする。
  7. end が undefined である場合、endIndex を length とする。そうでない場合、endIndex を ? ToClampedIndex(end, length) とする。
  8. taRecord を ? ValidateTypedArrayBounds(obj, seq-cst) に設定する。
  9. length を TypedArrayLength(taRecord) に設定する。
  10. endIndex を min(endIndex, length) に設定する。
  11. k を startIndex とする。
  12. k < endIndex の間、次を繰り返す。
    1. ! TypedArraySetElement(obj, 𝔽(k), value) を実行する。
    2. k を k + 1 に設定する。
  13. obj を返す。

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

このメソッドの引数の解釈と使用法は、23.1.3.8 で定義される Array.prototype.filter と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  5. kept を新しい空の List とする。
  6. captured を 0 とする。
  7. k を 0 とする。
  8. k < length の間、次を繰り返す。
    1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. selected を ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
    3. selected が true である場合、
      1. kValue を kept に追加する。
      2. captured を captured + 1 に設定する。
    4. k を k + 1 に設定する。
  9. result を ? TypedArraySpeciesCreate(obj, « 𝔽(captured) ») とする。
  10. n を 0 とする。
  11. kept の各要素 element について、次を行う。
    1. ! TypedArraySetElement(result, 𝔽(n), element) を実行する。
    2. n を n + 1 に設定する。
  12. result を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.9 で定義される Array.prototype.find と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. findRecord を ? FindViaPredicate(obj, length, ascending, predicate, thisArg) とする。
  5. findRecord.[[Value]] を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.10 で定義される Array.prototype.findIndex と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. findRecord を ? FindViaPredicate(obj, length, ascending, predicate, thisArg) とする。
  5. findRecord.[[Index]] を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.11 で定義される Array.prototype.findLast と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. findRecord を ? FindViaPredicate(obj, length, descending, predicate, thisArg) とする。
  5. findRecord.[[Value]] を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.12 で定義される Array.prototype.findLastIndex と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. findRecord を ? FindViaPredicate(obj, length, descending, predicate, thisArg) とする。
  5. findRecord.[[Index]] を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.15 で定義される Array.prototype.forEach と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») を実行する。
    3. k を k + 1 に設定する。
  7. undefined を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.16 で定義される Array.prototype.includes と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. length = 0 である場合、false を返す。
  5. k を ? ToClampedIndex(fromIndex, length) とする。
  6. k < length の間、次を繰り返す。
    1. elementK を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. SameValueZero(searchElement, elementK) が true である場合、true を返す。
    3. k を k + 1 に設定する。
  7. false を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.17 で定義される Array.prototype.indexOf と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. length = 0 である場合、-1𝔽 を返す。
  5. k を ? ToClampedIndex(fromIndex, length) とする。
  6. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ! HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. elementK を TypedArrayGetElement(obj, 𝔽(k)) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true である場合、𝔽(k) を返す。
    4. k を k + 1 に設定する。
  7. -1𝔽 を返す。

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

23.2.3.18 %TypedArray%.prototype.join ( separator )

このメソッドの引数の解釈と使用法は、23.1.3.18 で定義される Array.prototype.join と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. separator が undefined である場合、separatorString を "," とする。
  5. そうでない場合、separatorString を ? ToString(separator) とする。
  6. result を空の String とする。
  7. k を 0 とする。
  8. k < length の間、次を繰り返す。
    1. k > 0 である場合、result を result と separatorString の文字列連結に設定する。
    2. element を TypedArrayGetElement(obj, 𝔽(k)) とする。
    3. element が undefined でない場合、
      1. elementString を ! ToString(element) とする。
      2. result を result と elementString の文字列連結に設定する。
    4. k を k + 1 に設定する。
  9. result を返す。

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

23.2.3.19 %TypedArray%.prototype.keys ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. ? ValidateTypedArray(obj, seq-cst) を実行する。
  3. CreateArrayIterator(obj, key) を返す。

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

このメソッドの引数の解釈と使用法は、23.1.3.20 で定義される Array.prototype.lastIndexOf と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. length = 0 である場合、-1𝔽 を返す。
  5. fromIndex が存在しない場合、k を length - 1 とする。そうでない場合、k を min(? ToAbsoluteIndex(fromIndex, length), length - 1) とする。
  6. k ≥ 0 の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ! HasProperty(obj, propertyKey) とする。
    3. kPresent が true である場合、
      1. elementK を TypedArrayGetElement(obj, 𝔽(k)) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true である場合、𝔽(k) を返す。
    4. k を k - 1 に設定する。
  7. -1𝔽 を返す。

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

23.2.3.21 get %TypedArray%.prototype.length

%TypedArray%.prototype.length は、set アクセサー関数が undefined であるアクセサープロパティです。その get アクセサー関数は、呼び出されたときに次の手順を実行します。

  1. obj を this 値とする。
  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. 表明: obj は [[ViewedArrayBuffer]] および [[ArrayLength]] 内部スロットを持つ。
  4. taRecord を MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  5. IsTypedArrayOutOfBounds(taRecord) が true である場合、+0𝔽 を返す。
  6. length を TypedArrayLength(taRecord) とする。
  7. 𝔽(length) を返す。

この関数は汎用ではありません。this 値は [[TypedArrayName]] 内部スロットを持つオブジェクトでなければなりません。

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

このメソッドの引数の解釈と使用法は、23.1.3.21 で定義される Array.prototype.map と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  5. result を ? TypedArraySpeciesCreate(obj, « 𝔽(length) ») とする。
  6. k を 0 とする。
  7. k < length の間、次を繰り返す。
    1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. mappedValue を ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») とする。
    3. ? TypedArraySetElement(result, 𝔽(k), mappedValue) を実行する。
    4. k を k + 1 に設定する。
  8. result を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.24 で定義される Array.prototype.reduce と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  5. length = 0 かつ initialValue が存在しない場合、TypeError 例外をスローする。
  6. k を 0 とする。
  7. accumulator を undefined とする。
  8. initialValue が存在する場合、
    1. accumulator を initialValue に設定する。
  9. そうでない場合、
    1. accumulator を TypedArrayGetElement(obj, 𝔽(k)) に設定する。
    2. k を k + 1 に設定する。
  10. k < length の間、次を繰り返す。
    1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. accumulator を ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») に設定する。
    3. k を k + 1 に設定する。
  11. accumulator を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.25 で定義される Array.prototype.reduceRight と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  5. length = 0 かつ initialValue が存在しない場合、TypeError 例外をスローする。
  6. k を length - 1 とする。
  7. accumulator を undefined とする。
  8. initialValue が存在する場合、
    1. accumulator を initialValue に設定する。
  9. そうでない場合、
    1. accumulator を TypedArrayGetElement(obj, 𝔽(k)) に設定する。
    2. k を k - 1 に設定する。
  10. k ≥ 0 の間、次を繰り返す。
    1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. accumulator を ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») に設定する。
    3. k を k - 1 に設定する。
  11. accumulator を返す。

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

23.2.3.25 %TypedArray%.prototype.reverse ( )

このメソッドの引数の解釈と使用法は、23.1.3.26 で定義される Array.prototype.reverse と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. middle を floor(length / 2) とする。
  5. lower を 0 とする。
  6. lower ≠ middle の間、次を繰り返す。
    1. upper を length - lower - 1 とする。
    2. lowerValue を TypedArrayGetElement(obj, 𝔽(lower)) とする。
    3. upperValue を TypedArrayGetElement(obj, 𝔽(upper)) とする。
    4. ! TypedArraySetElement(obj, 𝔽(lower), upperValue) を実行する。
    5. ! TypedArraySetElement(obj, 𝔽(upper), lowerValue) を実行する。
    6. lower を lower + 1 に設定する。
  7. obj を返す。

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

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

このメソッドは、source から値を読み取り、この TypedArray 内に複数の値を設定します。詳細は source の型に基づいて異なります。省略可能な offset 値は、この TypedArray 内で値の書込みを開始する最初の要素インデックスを示します。省略された場合、0 であるとみなされます。

呼び出されたとき、次の手順を実行します。

  1. target を this 値とする。
  2. ? RequireInternalSlot(target, [[TypedArrayName]]) を実行する。
  3. 表明: target は [[ViewedArrayBuffer]] 内部スロットを持つ。
  4. targetOffset を ? ToIntegerOrInfinity(offset) とする。
  5. targetOffset < 0 である場合、RangeError 例外をスローする。
  6. source が [[TypedArrayName]] 内部スロットを持つ Object である場合、
    1. ? SetTypedArrayFromTypedArray(target, targetOffset, source) を実行する。
  7. そうでない場合、
    1. ? SetTypedArrayFromArrayLike(target, targetOffset, source) を実行する。
  8. undefined を返す。

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

23.2.3.26.1 SetTypedArrayFromArrayLike ( target, targetOffset, source )

抽象操作 SetTypedArrayFromArrayLike。引数 target (TypedArray)、targetOffset ((非負整数 または +∞)) および source (an ECMAScript language value, but not a TypedArray)。戻り値:(正常完了 (値:unused) または throw 完了)。 source から値を読み取り、インデックス targetOffset から開始して target 内に複数の値を設定します。 呼び出されると、次の手順を実行する。

  1. targetRecord を ? ValidateTypedArrayBounds(target, seq-cst) とする。
  2. targetLength を TypedArrayLength(targetRecord) とする。
  3. source を ? ToObject(source) に設定する。
  4. sourceLength を ? LengthOfArrayLike(source) とする。
  5. targetOffset = +∞ である場合、RangeError 例外をスローする。
  6. sourceLength + targetOffset > targetLength である場合、RangeError 例外をスローする。
  7. k を 0 とする。
  8. k < sourceLength の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. value を ? Get(source, propertyKey) とする。
    3. targetIndex を 𝔽(targetOffset + k) とする。
    4. ? TypedArraySetElement(target, targetIndex, value) を実行する。
    5. k を k + 1 に設定する。
  9. unused を返す。

23.2.3.26.2 SetTypedArrayFromTypedArray ( target, targetOffset, source )

抽象操作 SetTypedArrayFromTypedArray。引数 target (TypedArray)、targetOffset ((非負整数 または +∞)) および source (TypedArray)。戻り値:(正常完了 (値:unused) または throw 完了)。 source から値を読み取り、インデックス targetOffset から開始して target 内に複数の値を設定します。 呼び出されると、次の手順を実行する。

  1. targetBuffer を target.[[ViewedArrayBuffer]] とする。
  2. targetRecord を ? ValidateTypedArrayBounds(target, seq-cst) とする。
  3. targetLength を TypedArrayLength(targetRecord) とする。
  4. sourceBuffer を source.[[ViewedArrayBuffer]] とする。
  5. sourceRecord を ? ValidateTypedArrayBounds(source, seq-cst) とする。
  6. sourceLength を TypedArrayLength(sourceRecord) とする。
  7. targetType を TypedArrayElementType(target) とする。
  8. targetElementSize を TypedArrayElementSize(target) とする。
  9. targetByteOffset を target.[[ByteOffset]] とする。
  10. sourceType を TypedArrayElementType(source) とする。
  11. sourceElementSize を TypedArrayElementSize(source) とする。
  12. sourceByteOffset を source.[[ByteOffset]] とする。
  13. targetOffset = +∞ である場合、RangeError 例外をスローする。
  14. sourceLength + targetOffset > targetLength である場合、RangeError 例外をスローする。
  15. target.[[ContentType]] が source.[[ContentType]] でない場合、TypeError 例外をスローする。
  16. IsSharedArrayBuffer(sourceBuffer) が true、IsSharedArrayBuffer(targetBuffer) が true、かつ sourceBuffer.[[ArrayBufferData]] が targetBuffer.[[ArrayBufferData]] である場合、sameSharedArrayBuffer を true とする。そうでない場合、sameSharedArrayBuffer を false とする。
  17. SameValue(sourceBuffer, targetBuffer) が true または sameSharedArrayBuffer が true である場合、
    1. sourceByteLength を TypedArrayByteLength(sourceRecord) とする。
    2. sourceBuffer を ? CloneArrayBuffer(sourceBuffer, sourceByteOffset, sourceByteLength) に設定する。
    3. sourceByteIndex を 0 とする。
  18. そうでない場合、
    1. sourceByteIndex を sourceByteOffset とする。
  19. targetByteIndex を (targetOffset × targetElementSize) + targetByteOffset とする。
  20. limit を targetByteIndex + (targetElementSize × sourceLength) とする。
  21. sourceType が targetType である場合、
    1. 注記: 転送は、元データのビットレベルのエンコーディングを保持する方法で実行されなければならない。
    2. targetByteIndex < limit の間、次を繰り返す。
      1. value を GetValueFromBuffer(sourceBuffer, sourceByteIndex, uint8, true, unordered) とする。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) を実行する。
      3. sourceByteIndex を sourceByteIndex + 1 に設定する。
      4. targetByteIndex を targetByteIndex + 1 に設定する。
  22. そうでない場合、
    1. targetByteIndex < limit の間、次を繰り返す。
      1. value を GetValueFromBuffer(sourceBuffer, sourceByteIndex, sourceType, true, unordered) とする。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, unordered) を実行する。
      3. sourceByteIndex を sourceByteIndex + sourceElementSize に設定する。
      4. targetByteIndex を targetByteIndex + targetElementSize に設定する。
  23. unused を返す。

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

このメソッドの引数の解釈と使用法は、23.1.3.28 で定義される Array.prototype.slice と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. sourceArrayLength を TypedArrayLength(taRecord) とする。
  4. startIndex を ? ToClampedIndex(start, sourceArrayLength) とする。
  5. end が undefined である場合、endIndex を sourceArrayLength とする。そうでない場合、endIndex を ? ToClampedIndex(end, sourceArrayLength) とする。
  6. countBytes を max(endIndex - startIndex, 0) とする。
  7. resultArray を ? TypedArraySpeciesCreate(obj, « 𝔽(countBytes) ») とする。
  8. countBytes > 0 である場合、
    1. taRecord を ? ValidateTypedArrayBounds(obj, seq-cst) に設定する。
    2. endIndex を min(endIndex, TypedArrayLength(taRecord)) に設定する。
    3. countBytes を max(endIndex - startIndex, 0) に設定する。
    4. sourceType を TypedArrayElementType(obj) とする。
    5. targetType を TypedArrayElementType(resultArray) とする。
    6. sourceType が targetType である場合、
      1. 注記: 転送は、元データのビットレベルのエンコーディングを保持する方法で実行されなければならない。
      2. sourceBuffer を obj.[[ViewedArrayBuffer]] とする。
      3. targetBuffer を resultArray.[[ViewedArrayBuffer]] とする。
      4. elementSize を TypedArrayElementSize(obj) とする。
      5. sourceByteOffset を obj.[[ByteOffset]] とする。
      6. sourceByteIndex を (startIndex × elementSize) + sourceByteOffset とする。
      7. targetByteIndex を resultArray.[[ByteOffset]] とする。
      8. endByteIndex を targetByteIndex + (countBytes × elementSize) とする。
      9. targetByteIndex < endByteIndex の間、次を繰り返す。
        1. value を GetValueFromBuffer(sourceBuffer, sourceByteIndex, uint8, true, unordered) とする。
        2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) を実行する。
        3. sourceByteIndex を sourceByteIndex + 1 に設定する。
        4. targetByteIndex を targetByteIndex + 1 に設定する。
    7. そうでない場合、
      1. n を 0 とする。
      2. k を startIndex とする。
      3. k < endIndex の間、次を繰り返す。
        1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
        2. ! TypedArraySetElement(resultArray, 𝔽(n), kValue) を実行する。
        3. k を k + 1 に設定する。
        4. n を n + 1 に設定する。
  9. resultArray を返す。

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

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

このメソッドの引数の解釈と使用法は、23.1.3.29 で定義される Array.prototype.some と同じです。

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false である場合、TypeError 例外をスローする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. kValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    2. testResult を ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
    3. testResult が true である場合、true を返す。
    4. k を k + 1 に設定する。
  7. false を返す。

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

23.2.3.29 %TypedArray%.prototype.sort ( comparator )

これは個別のメソッドであり、以下で説明する点を除き、23.1.3.30 で定義される Array.prototype.sort と同じ要件を実装します。このメソッドの実装は、this 値が固定長を持ち、整数インデックス付きプロパティが疎でないオブジェクトであることを利用して最適化してもかまいません。

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

呼び出されたとき、次の手順を実行します。

  1. comparator が undefined でなく、IsCallable(comparator) が false である場合、TypeError 例外をスローする。
  2. obj を this 値とする。
  3. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  4. length を TypedArrayLength(taRecord) とする。
  5. 注記: 次の closure は 23.1.3.30 で使用される文字列比較ではなく、数値比較を実行する。
  6. sortCompare を、comparator を捕捉し、パラメーター (x, y) を持ち、呼び出されたときに次の手順を実行する新しい Abstract Closure とする。
    1. ? CompareTypedArrayElements(x, y, comparator) を返す。
  7. sortedList を ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) とする。
  8. j を 0 とする。
  9. j < length の間、次を繰り返す。
    1. ! TypedArraySetElement(obj, 𝔽(j), sortedList[j]) を実行する。
    2. j を j + 1 に設定する。
  10. obj を返す。
注

NaN は常に他の任意の値より大きいものとして比較されるため(CompareTypedArrayElements を参照)、comparator が指定されていない場合、NaN プロパティ値は常に結果の末尾にソートされます。

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

このメソッドは、要素型がこの TypedArray の要素型であり、ArrayBuffer がこの TypedArray の ArrayBuffer であり、start(含む)から end(含まない)までの区間の要素を参照する新しい TypedArray を返します。start または end のいずれかが負である場合、配列の先頭からではなく、末尾からのインデックスを参照します。

呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. 表明: obj は [[ViewedArrayBuffer]] 内部スロットを持つ。
  4. buffer を obj.[[ViewedArrayBuffer]] とする。
  5. sourceRecord を MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  6. IsTypedArrayOutOfBounds(sourceRecord) が true である場合、
    1. sourceLength を 0 とする。
  7. そうでない場合、
    1. sourceLength を TypedArrayLength(sourceRecord) とする。
  8. startIndex を ? ToClampedIndex(start, sourceLength) とする。
  9. elementSize を TypedArrayElementSize(obj) とする。
  10. sourceByteOffset を obj.[[ByteOffset]] とする。
  11. beginByteOffset を sourceByteOffset + (startIndex × elementSize) とする。
  12. obj.[[ArrayLength]] が auto であり、end が undefined である場合、
    1. ? TypedArraySpeciesCreate(obj, « buffer, 𝔽(beginByteOffset) ») を返す。
  13. end が undefined である場合、endIndex を sourceLength とする。そうでない場合、endIndex を ? ToClampedIndex(end, sourceLength) とする。
  14. newLength を max(endIndex - startIndex, 0) とする。
  15. ? TypedArraySpeciesCreate(obj, « buffer, 𝔽(beginByteOffset), 𝔽(newLength) ») を返す。

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

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

これは個別のメソッドであり、"length" の [[Get]] を実行する代わりに TypedArrayLength が呼び出される点を除き、23.1.3.32 で定義される Array.prototype.toLocaleString と同じアルゴリズムを実装します。基礎となるバッファが resizable でない場合に this 値が固定長を持ち、整数インデックス付きプロパティが疎でないことを利用して、アルゴリズムの実装を最適化してもかまいません。ただし、そのような最適化は、規定されたアルゴリズムの動作に観測可能な変更を導入してはなりません。

このメソッドは汎用ではありません。アルゴリズムを評価する前に、this 値および seq-cst を引数として ValidateTypedArray が呼び出されます。その結果が中断完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

注

ECMAScript 実装が ECMA-402 Internationalization API を含む場合、このメソッドは ECMA-402 内の Array.prototype.toLocaleString のアルゴリズムに基づきます。

23.2.3.32 %TypedArray%.prototype.toReversed ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. resultArray を ? TypedArrayCreateSameType(obj, length) とする。
  5. k を 0 とする。
  6. k < length の間、次を繰り返す。
    1. from を length - k - 1 とする。
    2. fromValue を TypedArrayGetElement(obj, 𝔽(from)) とする。
    3. ! TypedArraySetElement(resultArray, 𝔽(k), fromValue) を実行する。
    4. k を k + 1 に設定する。
  7. resultArray を返す。

23.2.3.33 %TypedArray%.prototype.toSorted ( comparator )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. comparator が undefined でなく、IsCallable(comparator) が false である場合、TypeError 例外をスローする。
  2. obj を this 値とする。
  3. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  4. length を TypedArrayLength(taRecord) とする。
  5. resultArray を ? TypedArrayCreateSameType(obj, length) とする。
  6. 注記: 次の closure は 23.1.3.34 で使用される文字列比較ではなく、数値比較を実行する。
  7. sortCompare を、comparator を捕捉し、パラメーター (x, y) を持ち、呼び出されたときに次の手順を実行する新しい Abstract Closure とする。
    1. ? CompareTypedArrayElements(x, y, comparator) を返す。
  8. sortedList を ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) とする。
  9. j を 0 とする。
  10. j < length の間、次を繰り返す。
    1. ! TypedArraySetElement(resultArray, 𝔽(j), sortedList[j]) を実行する。
    2. j を j + 1 に設定する。
  11. resultArray を返す。

23.2.3.34 %TypedArray%.prototype.toString ( )

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

23.2.3.35 %TypedArray%.prototype.values ( )

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. ? ValidateTypedArray(obj, seq-cst) を実行する。
  3. CreateArrayIterator(obj, value) を返す。

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

このメソッドは呼び出されたとき、次の手順を実行します。

  1. obj を this 値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. actualIndex を ? ToAbsoluteIndex(index, length) とする。
  5. obj.[[ContentType]] が bigint である場合、numericValue を ? ToBigInt(value) とする。
  6. そうでない場合、numericValue を ? ToNumber(value) とする。
  7. IsValidIntegerIndex(obj, 𝔽(actualIndex)) が false である場合、RangeError 例外をスローする。
  8. resultArray を ? TypedArrayCreateSameType(obj, length) とする。
  9. k を 0 とする。
  10. k < length の間、次を繰り返す。
    1. k = actualIndex である場合、fromValue を numericValue とする。
    2. そうでない場合、fromValue を TypedArrayGetElement(obj, 𝔽(k)) とする。
    3. ! TypedArraySetElement(resultArray, 𝔽(k), fromValue) を実行する。
    4. k を k + 1 に設定する。
  11. resultArray を返す。

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. obj を this 値とする。
  2. obj が Object でない場合、undefined を返す。
  3. obj が [[TypedArrayName]] 内部スロットを持たない場合、undefined を返す。
  4. name を obj.[[TypedArrayName]] とする。
  5. 表明: name は String である。
  6. name を返す。

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

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

23.2.4 TypedArray オブジェクトのための抽象操作

23.2.4.1 TypedArrayCreateFromConstructor ( ctor, argList )

抽象操作 TypedArrayCreateFromConstructor。引数 ctor (コンストラクター) および argList (リスト (要素:ECMAScript 言語値))。戻り値:(正常完了 (値:TypedArray) または throw 完了)。 コンストラクター関数を使用して新しい TypedArray を作成することを規定するために使用されます。 呼び出されると、次の手順を実行する。

  1. ta を ? Construct(ctor, argList) とする。
  2. taRecord を ? ValidateTypedArray(ta, seq-cst) とする。
  3. 表明: ta は TypedArray インスタンスのプロパティ で言及されるすべての内部スロットを持つ。
  4. argList の要素数が 1 であり、argList[0] が Number である場合、
    1. IsTypedArrayOutOfBounds(taRecord) が true である場合、TypeError 例外をスローする。
    2. length を TypedArrayLength(taRecord) とする。
    3. length < ℝ(argList[0]) である場合、TypeError 例外をスローする。
  5. ta を返す。

23.2.4.2 TypedArrayCreateSameType ( exemplar, length )

抽象操作 TypedArrayCreateSameType。引数 exemplar (TypedArray) および length (非負整数)。戻り値:(正常完了 (値:TypedArray) または throw 完了)。 exemplar から派生したコンストラクター関数を使用して新しい TypedArray を作成することを規定するために使用されます。%Symbol.species% の使用によってカスタム TypedArray サブクラスを構築できる TypedArraySpeciesCreate とは異なり、この操作は常に組込み TypedArray コンストラクターのいずれかを使用します。 呼び出されると、次の手順を実行する。

  1. ctor を、表 71 内のコンストラクター名 exemplar.[[TypedArrayName]] に関連付けられたイントリンシックオブジェクトとする。
  2. result を ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
  3. 表明: result は [[TypedArrayName]] および [[ContentType]] 内部スロットを持つ。
  4. 表明: result.[[ContentType]] は exemplar.[[ContentType]] である。
  5. result を返す。

23.2.4.3 TypedArraySpeciesCreate ( exemplar, argList )

抽象操作 TypedArraySpeciesCreate。引数 exemplar (TypedArray) および argList (リスト (要素:ECMAScript 言語値))。戻り値:(正常完了 (値:TypedArray) または throw 完了)。 exemplar から派生したコンストラクター関数を使用して新しい TypedArray を作成することを規定するために使用されます。%Symbol.species% の使用によって Array ではないオブジェクトを作成できる ArraySpeciesCreate とは異なり、この操作はコンストラクター関数が実際の TypedArray を作成することを強制します。 呼び出されると、次の手順を実行する。

  1. defaultCtor を、表 71 内のコンストラクター名 exemplar.[[TypedArrayName]] に関連付けられたイントリンシックオブジェクトとする。
  2. ctor を ? SpeciesConstructor(exemplar, defaultCtor) とする。
  3. result を ? TypedArrayCreateFromConstructor(ctor, argList) とする。
  4. result.[[ContentType]] が exemplar.[[ContentType]] でない場合、TypeError 例外をスローする。
  5. result を返す。

23.2.4.4 ValidateTypedArray ( obj, order )

抽象操作 ValidateTypedArray。引数 obj (ECMAScript 言語値) および order ((seq-cst または unordered))。戻り値:(正常完了 (値:TypedArray With Buffer Witnessレコード) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. ? RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  2. 表明: obj は [[ViewedArrayBuffer]] 内部スロットを持つ。
  3. ? ValidateTypedArrayBounds(obj, order) を返す。

23.2.4.5 ValidateTypedArrayBounds ( ta, order )

抽象操作 ValidateTypedArrayBounds。引数 ta (TypedArray) および order ((seq-cst または unordered))。戻り値:(正常完了 (値:TypedArray With Buffer Witnessレコード) または throw 完了)。 ta が基礎となるバッファの範囲を超えていないことを検証します。 呼び出されると、次の手順を実行する。

  1. taRecord を MakeTypedArrayWithBufferWitnessRecord(ta, order) とする。
  2. IsTypedArrayOutOfBounds(taRecord) が true である場合、TypeError 例外をスローする。
  3. taRecord を返す。

23.2.4.6 TypedArrayElementSize ( obj )

抽象操作 TypedArrayElementSize。引数 obj (TypedArray)。戻り値:非負整数。 呼び出されると、次の手順を実行する。

  1. obj.[[TypedArrayName]] について 表 71 で規定される Element Size 値を返す。

23.2.4.7 TypedArrayElementType ( obj )

抽象操作 TypedArrayElementType。引数 obj (TypedArray)。戻り値:TypedArray 要素型。 呼び出されると、次の手順を実行する。

  1. obj.[[TypedArrayName]] について 表 71 で規定される Element Type 値を返す。

23.2.4.8 CompareTypedArrayElements ( x, y, comparator )

抽象操作 CompareTypedArrayElements。引数 x ((Number または BigInt))、y ((Number または BigInt)) および comparator ((関数オブジェクト または undefined))。戻り値:(正常完了 (値:Number) または 中途完了)。 呼び出されると、次の手順を実行する。

  1. 表明: x が Number かつ y が Number、または x が BigInt かつ y が BigInt である。
  2. comparator が undefined でない場合、
    1. result を ? ToNumber(? Call(comparator, undefined, « x, y »)) とする。
    2. result が NaN である場合、+0𝔽 を返す。
    3. result を返す。
  3. x が NaN かつ y が NaN である場合、+0𝔽 を返す。
  4. x が NaN である場合、1𝔽 を返す。
  5. y が NaN である場合、-1𝔽 を返す。
  6. x < y である場合、-1𝔽 を返す。
  7. x > y である場合、1𝔽 を返す。
  8. x が -0𝔽 かつ y が +0𝔽 である場合、-1𝔽 を返す。
  9. x が +0𝔽 かつ y が -0𝔽 である場合、1𝔽 を返す。
  10. +0𝔽 を返す。
注
これは 23.1.3.30.2 で使用される文字列比較ではなく、数値比較を実行します。

23.2.5 TypedArray コンストラクター

各 TypedArray コンストラクターは:

  • 特に別段の規定がある場合を除き、表 71 において、コンストラクター名として TypedArray の代わりに使用される名前だけが異なる、以下で説明する構造を持つイントリンシックオブジェクトです。
  • 引数の数と型に基づいて動作が異なる関数です。TypedArray の呼出しの実際の動作は、それに渡される引数の数と種類に依存します。
  • 関数として呼び出されることを意図しておらず、そのように呼び出されると例外をスローします。
  • クラス定義の extends 節の値として使用できます。規定された TypedArray の動作を継承しようとするサブクラスコンストラクターは、%TypedArray%.prototype の組込みメソッドをサポートするために必要な内部状態を持つサブクラスインスタンスを作成して初期化するため、TypedArray コンストラクターへの super 呼出しを含まなければなりません。

23.2.5.1 TypedArray ( ...args )

各 TypedArray コンストラクターは呼び出されたとき、次の手順を実行します。

  1. NewTarget が undefined である場合、TypeError 例外をスローする。
  2. ctorName を、この TypedArray コンストラクターについて 表 71 で規定される Constructor Name 値の String 値とする。
  3. proto を "%TypedArray.prototype%" とする。
  4. numberOfArgs を args の要素数とする。
  5. numberOfArgs = 0 である場合、? AllocateTypedArray(ctorName, NewTarget, proto, 0) を返す。
  6. firstArg を args[0] とする。
  7. firstArg が Object である場合、
    1. obj を ? AllocateTypedArray(ctorName, NewTarget, proto) とする。
    2. firstArg が [[TypedArrayName]] 内部スロットを持つ場合、
      1. ? InitializeTypedArrayFromTypedArray(obj, firstArg) を実行する。
    3. そうでなく、firstArg が [[ArrayBufferData]] 内部スロットを持つ場合、
      1. numberOfArgs > 1 である場合、byteOffset を args[1] とする。そうでない場合、byteOffset を undefined とする。
      2. numberOfArgs > 2 である場合、length を args[2] とする。そうでない場合、length を undefined とする。
      3. ? InitializeTypedArrayFromArrayBuffer(obj, firstArg, byteOffset, length) を実行する。
    4. そうでない場合、
      1. 表明: firstArg は Object であり、[[TypedArrayName]] または [[ArrayBufferData]] 内部スロットのいずれも持たない。
      2. usingIterator を ? GetMethod(firstArg, %Symbol.iterator%) とする。
      3. usingIterator が undefined でない場合、
        1. values を ? IteratorToList(? GetIteratorFromMethod(firstArg, usingIterator)) とする。
        2. ? InitializeTypedArrayFromList(obj, values) を実行する。
      4. そうでない場合、
        1. 注記: firstArg は iterable オブジェクトではないため、すでに array-like オブジェクトであると仮定する。
        2. ? InitializeTypedArrayFromArrayLike(obj, firstArg) を実行する。
    5. obj を返す。
  8. 表明: firstArg は Object ではない。
  9. elementLength を ? ToIndex(firstArg) とする。
  10. ? AllocateTypedArray(ctorName, NewTarget, proto, elementLength) を返す。

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

抽象操作 AllocateTypedArray。引数 ctorName (a String which is the name of a TypedArray constructor in 表 71)、newTarget (コンストラクター) および defaultProto (String)および省略可能な引数 length (非負整数)。戻り値:(正常完了 (値:TypedArray) または throw 完了)。 TypedArray コンストラクターのインスタンスを検証して作成するために使用されます。length 引数が渡された場合、その長さの ArrayBuffer も割り当てられ、新しい TypedArray インスタンスに関連付けられます。AllocateTypedArray は TypedArray によって使用される共通の意味論を提供します。 呼び出されると、次の手順を実行する。

  1. proto を ? GetPrototypeFromConstructor(newTarget, defaultProto) とする。
  2. obj を TypedArrayCreate(proto) とする。
  3. 表明: obj.[[ViewedArrayBuffer]] は undefined である。
  4. obj.[[TypedArrayName]] を ctorName に設定する。
  5. ctorName が "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 ( obj, sourceArray )

抽象操作 InitializeTypedArrayFromTypedArray。引数 obj (TypedArray) および sourceArray (TypedArray)。戻り値:(正常完了 (値:unused) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. sourceData を sourceArray.[[ViewedArrayBuffer]] とする。
  2. elementType を TypedArrayElementType(obj) とする。
  3. elementSize を TypedArrayElementSize(obj) とする。
  4. sourceType を TypedArrayElementType(sourceArray) とする。
  5. sourceElementSize を TypedArrayElementSize(sourceArray) とする。
  6. sourceByteOffset を sourceArray.[[ByteOffset]] とする。
  7. sourceRecord を ? ValidateTypedArrayBounds(sourceArray, seq-cst) とする。
  8. elementLength を TypedArrayLength(sourceRecord) とする。
  9. byteLength を elementSize × elementLength とする。
  10. elementType が sourceType である場合、
    1. data を ? CloneArrayBuffer(sourceData, sourceByteOffset, byteLength) とする。
  11. そうでない場合、
    1. data を ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) とする。
    2. sourceArray.[[ContentType]] が obj.[[ContentType]] でない場合、TypeError 例外をスローする。
    3. sourceByteIndex を sourceByteOffset とする。
    4. targetByteIndex を 0 とする。
    5. count を elementLength とする。
    6. count > 0 の間、次を繰り返す。
      1. value を GetValueFromBuffer(sourceData, sourceByteIndex, sourceType, true, unordered) とする。
      2. SetValueInBuffer(data, targetByteIndex, elementType, value, true, unordered) を実行する。
      3. sourceByteIndex を sourceByteIndex + sourceElementSize に設定する。
      4. targetByteIndex を targetByteIndex + elementSize に設定する。
      5. count を count - 1 に設定する。
  12. obj.[[ViewedArrayBuffer]] を data に設定する。
  13. obj.[[ByteLength]] を byteLength に設定する。
  14. obj.[[ByteOffset]] を 0 に設定する。
  15. obj.[[ArrayLength]] を elementLength に設定する。
  16. unused を返す。

23.2.5.1.3 InitializeTypedArrayFromArrayBuffer ( obj, buffer, byteOffset, length )

抽象操作 InitializeTypedArrayFromArrayBuffer。引数 obj (TypedArray)、buffer ((ArrayBuffer または SharedArrayBuffer))、byteOffset (ECMAScript 言語値) および length (ECMAScript 言語値)。戻り値:(正常完了 (値:unused) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. elementSize を TypedArrayElementSize(obj) とする。
  2. offset を ? ToIndex(byteOffset) とする。
  3. offset modulo elementSize ≠ 0 である場合、RangeError 例外をスローする。
  4. bufferIsFixedLength を IsFixedLengthArrayBuffer(buffer) とする。
  5. length が undefined でない場合、
    1. newLength を ? ToIndex(length) とする。
  6. IsDetachedBuffer(buffer) が true である場合、TypeError 例外をスローする。
  7. bufferByteLength を ArrayBufferByteLength(buffer, seq-cst) とする。
  8. length が undefined かつ bufferIsFixedLength が false である場合、
    1. offset > bufferByteLength である場合、RangeError 例外をスローする。
    2. obj.[[ByteLength]] を auto に設定する。
    3. obj.[[ArrayLength]] を auto に設定する。
  9. そうでない場合、
    1. length が undefined である場合、
      1. bufferByteLength modulo elementSize ≠ 0 である場合、RangeError 例外をスローする。
      2. newByteLength を bufferByteLength - offset とする。
      3. newByteLength < 0 である場合、RangeError 例外をスローする。
    2. そうでない場合、
      1. newByteLength を newLength × elementSize とする。
      2. offset + newByteLength > bufferByteLength である場合、RangeError 例外をスローする。
    3. obj.[[ByteLength]] を newByteLength に設定する。
    4. obj.[[ArrayLength]] を newByteLength / elementSize に設定する。
  10. obj.[[ViewedArrayBuffer]] を buffer に設定する。
  11. obj.[[ByteOffset]] を offset に設定する。
  12. unused を返す。

23.2.5.1.4 InitializeTypedArrayFromList ( obj, values )

抽象操作 InitializeTypedArrayFromList。引数 obj (TypedArray) および values (リスト (要素:ECMAScript 言語値))。戻り値:(正常完了 (値:unused) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. length を values の要素数とする。
  2. ? AllocateTypedArrayBuffer(obj, length) を実行する。
  3. k を 0 とする。
  4. k < length の間、次を繰り返す。
    1. kValue を values[k] とする。
    2. ? TypedArraySetElement(obj, 𝔽(k), kValue) を実行する。
    3. k を k + 1 に設定する。
  5. unused を返す。

23.2.5.1.5 InitializeTypedArrayFromArrayLike ( obj, arrayLike )

抽象操作 InitializeTypedArrayFromArrayLike。引数 obj (TypedArray) および arrayLike (an Object, but not a TypedArray or an ArrayBuffer)。戻り値:(正常完了 (値:unused) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. length を ? LengthOfArrayLike(arrayLike) とする。
  2. ? AllocateTypedArrayBuffer(obj, length) を実行する。
  3. k を 0 とする。
  4. k < length の間、次を繰り返す。
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ? Get(arrayLike, propertyKey) とする。
    3. ? TypedArraySetElement(obj, 𝔽(k), kValue) を実行する。
    4. k を k + 1 に設定する。
  5. unused を返す。

23.2.5.1.6 AllocateTypedArrayBuffer ( obj, length )

抽象操作 AllocateTypedArrayBuffer。引数 obj (TypedArray) および length (非負整数)。戻り値:(正常完了 (値:unused) または throw 完了)。 ArrayBuffer を割り当てて obj に関連付けます。 呼び出されると、次の手順を実行する。

  1. 表明: obj.[[ViewedArrayBuffer]] は undefined である。
  2. elementSize を TypedArrayElementSize(obj) とする。
  3. byteLength を elementSize × length とする。
  4. data を ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) とする。
  5. obj.[[ViewedArrayBuffer]] を data に設定する。
  6. obj.[[ByteLength]] を byteLength に設定する。
  7. obj.[[ByteOffset]] を 0 に設定する。
  8. obj.[[ArrayLength]] を length に設定する。
  9. unused を返す。

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

各 TypedArray コンストラクターは:

  • 値が %TypedArray% である [[Prototype]] 内部スロットを持ちます。
  • 値が 3𝔽 である "length" プロパティを持ちます。
  • 値が 表 71 でそのコンストラクターに対して規定されたコンストラクター名の String 値である "name" プロパティを持ちます。
  • 次のプロパティを持ちます。

23.2.6.1 TypedArray.BYTES_PER_ELEMENT

TypedArray.BYTES_PER_ELEMENT の値は、TypedArray について 表 71 で規定される Element Size 値です。

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

23.2.6.2 TypedArray.prototype

TypedArray.prototype の初期値は、対応する TypedArray prototype イントリンシックオブジェクト(23.2.7)です。

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

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

各 TypedArray prototype オブジェクトは:

  • 値が %TypedArray.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 通常オブジェクトです。
  • [[ViewedArrayBuffer]] または TypedArray インスタンスオブジェクトに固有のその他の内部スロットを持ちません。

23.2.7.1 TypedArray.prototype.BYTES_PER_ELEMENT

TypedArray.prototype.BYTES_PER_ELEMENT の値は、TypedArray について 表 71 で規定される Element Size 値です。

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

23.2.7.2 TypedArray.prototype.constructor

特定の TypedArray コンストラクターに対する prototype の "constructor" プロパティの初期値は、そのコンストラクター自身です。

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

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

23.3 Uint8Array オブジェクト

Uint8Array は、上記で説明した特定の種類の TypedArray です。さらに、Uint8Array コンストラクター(23.3.1)および Uint8Array prototype オブジェクト(23.3.2)には追加のメソッドがあります。

23.3.1 Uint8Array コンストラクターの追加プロパティ

23.3.1.1 Uint8Array.fromBase64 ( string [ , options ] )

  1. string が String でない場合、TypeError 例外をスローする。
  2. optionsObj を ? GetOptionsObject(options) とする。
  3. alphabet を ? Get(optionsObj, "alphabet") とする。
  4. alphabet が undefined である場合、alphabet を "base64" に設定する。
  5. alphabet が "base64" でも "base64url" でもない場合、TypeError 例外をスローする。
  6. lastChunkHandling を ? Get(optionsObj, "lastChunkHandling") とする。
  7. lastChunkHandling が undefined である場合、lastChunkHandling を "loose" に設定する。
  8. lastChunkHandling が "loose"、"strict"、または "stop-before-partial" のいずれでもない場合、TypeError 例外をスローする。
  9. result を FromBase64(string, alphabet, lastChunkHandling) とする。
  10. result.[[Error]] が none でない場合、
    1. result.[[Error]] をスローする。
  11. resultLength を result.[[Bytes]] の要素数とする。
  12. ta を ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) とする。
  13. 表明: ta.[[ViewedArrayBuffer]].[[ArrayBufferByteLength]] は result.[[Bytes]] の要素数である。
  14. ta.[[ViewedArrayBuffer]].[[ArrayBufferData]] の各インデックスの値を、result.[[Bytes]] の対応するインデックスの値に設定する。
  15. ta を返す。

23.3.1.2 Uint8Array.fromHex ( string )

  1. string が String でない場合、TypeError 例外をスローする。
  2. result を FromHex(string) とする。
  3. result.[[Error]] が none でない場合、
    1. result.[[Error]] をスローする。
  4. resultLength を result.[[Bytes]] の要素数とする。
  5. ta を ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) とする。
  6. 表明: ta.[[ViewedArrayBuffer]].[[ArrayBufferByteLength]] は result.[[Bytes]] の要素数である。
  7. ta.[[ViewedArrayBuffer]].[[ArrayBufferData]] の各インデックスの値を、result.[[Bytes]] の対応するインデックスの値に設定する。
  8. ta を返す。

23.3.2 Uint8Array Prototype オブジェクトの追加プロパティ

23.3.2.1 Uint8Array.prototype.setFromBase64 ( string [ , options ] )

  1. into を this 値とする。
  2. ? ValidateUint8Array(into) を実行する。
  3. string が String でない場合、TypeError 例外をスローする。
  4. optionsObj を ? GetOptionsObject(options) とする。
  5. alphabet を ? Get(optionsObj, "alphabet") とする。
  6. alphabet が undefined である場合、alphabet を "base64" に設定する。
  7. alphabet が "base64" でも "base64url" でもない場合、TypeError 例外をスローする。
  8. lastChunkHandling を ? Get(optionsObj, "lastChunkHandling") とする。
  9. lastChunkHandling が undefined である場合、lastChunkHandling を "loose" に設定する。
  10. lastChunkHandling が "loose"、"strict"、または "stop-before-partial" のいずれでもない場合、TypeError 例外をスローする。
  11. taRecord を ? ValidateTypedArrayBounds(into, seq-cst) とする。
  12. byteLength を TypedArrayLength(taRecord) とする。
  13. result を FromBase64(string, alphabet, lastChunkHandling, byteLength) とする。
  14. bytes を result.[[Bytes]] とする。
  15. written を bytes の要素数とする。
  16. 注記: FromBase64 はユーザーコードを呼び出さないため、into を基礎とする ArrayBuffer が detached または縮小されることはない。
  17. 表明: written ≤ byteLength。
  18. SetUint8ArrayBytes(into, bytes) を実行する。
  19. result.[[Error]] が none でない場合、
    1. result.[[Error]] をスローする。
  20. resultObj を OrdinaryObjectCreate(%Object.prototype%) とする。
  21. ! CreateDataPropertyOrThrow(resultObj, "read", 𝔽(result.[[Read]])) を実行する。
  22. ! CreateDataPropertyOrThrow(resultObj, "written", 𝔽(written)) を実行する。
  23. resultObj を返す。

23.3.2.2 Uint8Array.prototype.setFromHex ( string )

  1. into を this 値とする。
  2. ? ValidateUint8Array(into) を実行する。
  3. string が String でない場合、TypeError 例外をスローする。
  4. taRecord を ? ValidateTypedArrayBounds(into, seq-cst) とする。
  5. byteLength を TypedArrayLength(taRecord) とする。
  6. result を FromHex(string, byteLength) とする。
  7. bytes を result.[[Bytes]] とする。
  8. written を bytes の要素数とする。
  9. 注記: FromHex はユーザーコードを呼び出さないため、into を基礎とする ArrayBuffer が detached または縮小されることはない。
  10. 表明: written ≤ byteLength。
  11. SetUint8ArrayBytes(into, bytes) を実行する。
  12. result.[[Error]] が none でない場合、
    1. result.[[Error]] をスローする。
  13. resultObj を OrdinaryObjectCreate(%Object.prototype%) とする。
  14. ! CreateDataPropertyOrThrow(resultObj, "read", 𝔽(result.[[Read]])) を実行する。
  15. ! CreateDataPropertyOrThrow(resultObj, "written", 𝔽(written)) を実行する。
  16. resultObj を返す。

23.3.2.3 Uint8Array.prototype.toBase64 ( [ options ] )

  1. obj を this 値とする。
  2. ? ValidateUint8Array(obj) を実行する。
  3. optionsObj を ? GetOptionsObject(options) とする。
  4. alphabet を ? Get(optionsObj, "alphabet") とする。
  5. alphabet が undefined である場合、alphabet を "base64" に設定する。
  6. alphabet が "base64" でも "base64url" でもない場合、TypeError 例外をスローする。
  7. omitPadding を ToBoolean(? Get(optionsObj, "omitPadding")) とする。
  8. toEncode を ? GetUint8ArrayBytes(obj) とする。
  9. alphabet が "base64" である場合、
    1. outAscii を、RFC 4648 の4節で規定される base64 エンコーディングに従って toEncode をエンコードした結果のコードポイント列とする。omitPadding が false である場合に限り、padding を含める。
  10. そうでない場合、
    1. 表明: alphabet は "base64url" である。
    2. outAscii を、RFC 4648 の5節で規定される base64url エンコーディングに従って toEncode をエンコードした結果のコードポイント列とする。omitPadding が false である場合に限り、padding を含める。
  11. CodePointsToString(outAscii) を返す。

23.3.2.4 Uint8Array.prototype.toHex ( )

  1. obj を this 値とする。
  2. ? ValidateUint8Array(obj) を実行する。
  3. toEncode を ? GetUint8ArrayBytes(obj) とする。
  4. out を空の String とする。
  5. toEncode の各 byte byte について、次を行う。
    1. hex を Number::toString(𝔽(byte), 16) とする。
    2. hex を StringPad(hex, 2, "0", start) に設定する。
    3. out を out と hex の文字列連結に設定する。
  6. out を返す。

23.3.3 Uint8Array オブジェクトのための抽象操作

23.3.3.1 ValidateUint8Array ( ta )

抽象操作 ValidateUint8Array。引数 ta (ECMAScript 言語値)。戻り値:(正常完了 (値:unused) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. ? RequireInternalSlot(ta, [[TypedArrayName]]) を実行する。
  2. ta.[[TypedArrayName]] が "Uint8Array" でない場合、TypeError 例外をスローする。
  3. unused を返す。

23.3.3.2 GetUint8ArrayBytes ( ta )

抽象操作 GetUint8ArrayBytes。引数 ta (Uint8Array)。戻り値:(正常完了 (値:リスト (要素:バイト値)) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. buffer を ta.[[ViewedArrayBuffer]] とする。
  2. taRecord を ? ValidateTypedArrayBounds(ta, seq-cst) とする。
  3. length を TypedArrayLength(taRecord) とする。
  4. byteOffset を ta.[[ByteOffset]] とする。
  5. bytes を新しい空の List とする。
  6. index を 0 とする。
  7. index < length の間、次を繰り返す。
    1. byteIndex を byteOffset + index とする。
    2. byte を ℝ(GetValueFromBuffer(buffer, byteIndex, uint8, true, unordered)) とする。
    3. byte を bytes に追加する。
    4. index を index + 1 に設定する。
  8. bytes を返す。

23.3.3.3 SetUint8ArrayBytes ( into, bytes )

抽象操作 SetUint8ArrayBytes。引数 into (Uint8Array) および bytes (リスト (要素:バイト値))。戻り値:unused。 呼び出されると、次の手順を実行する。

  1. offset を into.[[ByteOffset]] とする。
  2. length を bytes の要素数とする。
  3. index を 0 とする。
  4. index < length の間、次を繰り返す。
    1. byte を bytes[index] とする。
    2. byteIndexInBuffer を index + offset とする。
    3. SetValueInBuffer(into.[[ViewedArrayBuffer]], byteIndexInBuffer, uint8, 𝔽(byte), true, unordered) を実行する。
    4. index を index + 1 に設定する。
  5. unused を返す。

23.3.3.4 SkipAsciiWhitespace ( string, index )

抽象操作 SkipAsciiWhitespace。引数 string (String) および index (非負整数)。戻り値:非負整数。 呼び出されると、次の手順を実行する。

  1. length を string の長さとする。
  2. index < length の間、次を繰り返す。
    1. char を string 内のインデックス index にあるコード単位とする。
    2. char が 0x0009 (TAB)、0x000A (LF)、0x000C (FF)、0x000D (CR)、または 0x0020 (SPACE) のいずれでもない場合、
      1. index を返す。
    3. index を index + 1 に設定する。
  3. index を返す。

23.3.3.5 DecodeFinalBase64Chunk ( chunk, throwOnExtraBits )

抽象操作 DecodeFinalBase64Chunk。引数 chunk ((a String of length 2 または 3)) および throwOnExtraBits (Boolean)。戻り値:(正常完了 (値:リスト (要素:バイト値)) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. chunkLength を chunk の長さとする。
  2. chunkLength = 2 である場合、
    1. chunk を chunk と "AA" の文字列連結に設定する。
  3. そうでない場合、
    1. 表明: chunkLength は 3 である。
    2. chunk を chunk と "A" の文字列連結に設定する。
  4. bytes を DecodeFullLengthBase64Chunk(chunk) とする。
  5. chunkLength = 2 である場合、
    1. throwOnExtraBits が true かつ bytes[1] ≠ 0 である場合、SyntaxError 例外をスローする。
    2. « bytes[0] » を返す。
  6. throwOnExtraBits が true かつ bytes[2] ≠ 0 である場合、SyntaxError 例外をスローする。
  7. « bytes[0], bytes[1] » を返す。

23.3.3.6 DecodeFullLengthBase64Chunk ( chunk )

抽象操作 DecodeFullLengthBase64Chunk。引数 chunk (a String of length 4)。戻り値:リスト (要素:byte values of length 3)。

標準 base64 alphabet は "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"、すなわち Unicode 基本ラテンブロック内のすべての文字と数字に対応するコード単位に "+" および "/" を加えたものを要素とする String です。

  1. byteSequence を、chunk を base64 としてデコードした結果の一意な3バイトの列とする(すなわち、byteSequence に RFC 4648 の4節で規定される base64 エンコーディングを適用すると chunk が生成されるような列)。
  2. byteSequence の要素を順番に要素とする List を返す。

23.3.3.7 FromBase64 ( string, alphabet, lastChunkHandling [ , maxLength ] )

抽象操作 FromBase64。引数 string (String)、alphabet (("base64" または "base64url")) および lastChunkHandling (("loose"、"strict" または "stop-before-partial"))および省略可能な引数 maxLength (非負整数)。戻り値:レコード (フィールド:[[Read]] (整数), [[Bytes]] (リスト (要素:バイト値)), [[Error]] ((a SyntaxError object または none)))。 呼び出されると、次の手順を実行する。

  1. maxLength が存在しない場合、
    1. maxLength を 253 - 1 に設定する。
    2. 注記: 入力は String であるため、String の長さは 253 - 1 文字に制限され、出力に必要な byte 数は入力の文字数を超えないので、この制限に達することは決してない。ただし、編集上、maxLength に有限値を使用する方が便利である。
  2. 注記: 以下のアルゴリズムにおける検証とデコードの順序は観測できない。実装には、最も効率的な順序で実行し、場合によっては検証とデコードを交互に行うことが推奨される。
  3. maxLength = 0 である場合、
    1. Record { [[Read]]: 0, [[Bytes]]: « », [[Error]]: none } を返す。
  4. read を 0 とする。
  5. bytes を新しい空の List とする。
  6. chunk を空の String とする。
  7. chunkLength を 0 とする。
  8. index を 0 とする。
  9. length を string の長さとする。
  10. 次を繰り返す。
    1. 表明: bytes の要素数は 3 で割り切れる。
    2. index を SkipAsciiWhitespace(string, index) に設定する。
    3. index = length である場合、
      1. chunkLength > 0 である場合、
        1. lastChunkHandling が "stop-before-partial" である場合、
          1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。
        2. lastChunkHandling が "strict" である場合、
          1. error を新しく作成された SyntaxError オブジェクトとする。
          2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
        3. 表明: lastChunkHandling は "loose" である。
        4. chunkLength = 1 である場合、
          1. error を新しく作成された SyntaxError オブジェクトとする。
          2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
        5. bytes を bytes と ! DecodeFinalBase64Chunk(chunk, false) のリスト連結に設定する。
      2. Record { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none } を返す。
    4. char を string の index から index + 1 までの部分文字列とする。
    5. index を index + 1 に設定する。
    6. char が "=" である場合、
      1. chunkLength < 2 である場合、
        1. error を新しく作成された SyntaxError オブジェクトとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      2. index を SkipAsciiWhitespace(string, index) に設定する。
      3. chunkLength = 2 である場合、
        1. index = length である場合、
          1. lastChunkHandling が "stop-before-partial" である場合、
            1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。
          2. error を新しく作成された SyntaxError オブジェクトとする。
          3. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
        2. char を string の index から index + 1 までの部分文字列に設定する。
        3. char が "=" である場合、
          1. index を SkipAsciiWhitespace(string, index + 1) に設定する。
      4. index < length である場合、
        1. error を新しく作成された SyntaxError オブジェクトとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      5. lastChunkHandling が "strict" である場合、throwOnExtraBits を true とする。そうでない場合、throwOnExtraBits を false とする。
      6. decodeResult を Completion(DecodeFinalBase64Chunk(chunk, throwOnExtraBits)) とする。
      7. decodeResult が中断完了である場合、
        1. error を decodeResult.[[Value]] とする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      8. bytes を bytes と ! decodeResult のリスト連結に設定する。
      9. Record { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none } を返す。
    7. alphabet が "base64url" である場合、
      1. char が "+" または "/" のいずれかである場合、
        1. error を新しく作成された SyntaxError オブジェクトとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      2. そうでなく、char が "-" である場合、
        1. char を "+" に設定する。
      3. そうでなく、char が "_" である場合、
        1. char を "/" に設定する。
    8. char の唯一のコード単位が標準 base64 alphabet の要素でない場合、
      1. error を新しく作成された SyntaxError オブジェクトとする。
      2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
    9. remaining を maxLength - bytes の要素数とする。
    10. remaining = 1 かつ chunkLength = 2 であるか、remaining = 2 かつ chunkLength = 3 である場合、
      1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。
    11. chunk を chunk と char の文字列連結に設定する。
    12. chunkLength を chunk の長さに設定する。
    13. chunkLength = 4 である場合、
      1. bytes を bytes と DecodeFullLengthBase64Chunk(chunk) のリスト連結に設定する。
      2. chunk を空の String に設定する。
      3. chunkLength を 0 に設定する。
      4. read を index に設定する。
      5. bytes の要素数 = maxLength である場合、
        1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。

23.3.3.8 FromHex ( string [ , maxLength ] )

抽象操作 FromHex。引数 string (String)および省略可能な引数 maxLength (非負整数)。戻り値:レコード (フィールド:[[Read]] (整数), [[Bytes]] (リスト (要素:バイト値)), [[Error]] ((a SyntaxError object または none)))。 呼び出されると、次の手順を実行する。

  1. maxLength が存在しない場合、maxLength を 253 - 1 に設定する。
  2. length を string の長さとする。
  3. bytes を新しい空の List とする。
  4. read を 0 とする。
  5. length modulo 2 ≠ 0 である場合、
    1. error を新しく作成された SyntaxError オブジェクトとする。
    2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
  6. read < length かつ bytes の要素数 < maxLength の間、次を繰り返す。
    1. hexits を string の read から read + 2 までの部分文字列とする。
    2. hexits が "0123456789abcdefABCDEF" に含まれないコード単位を含む場合、
      1. error を新しく作成された SyntaxError オブジェクトとする。
      2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
    3. read を read + 2 に設定する。
    4. byte を、16進表記で hexits によって表される整数値とする。値 10 から 15 の数字には文字 A から F および a から f を使用する。
    5. byte を bytes に追加する。
  7. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。