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

23.1 Arrayオブジェクト

Arrayは、あるクラスのプロパティ名を特別に扱うexotic objectです。この特別な扱いの定義については 10.4.2 を参照してください。

23.1.1 Arrayコンストラクター

Arrayコンストラクターは以下の通りです:

  • %Array%である。
  • グローバルオブジェクト"Array"プロパティの初期値である。
  • コンストラクターとして呼び出されたとき、新しいArrayを作成して初期化する。
  • コンストラクターとしてではなく関数として呼び出されたときも、新しいArrayを作成して初期化する。したがって、関数呼び出し Array(…) は、同じ引数を持つオブジェクト作成式 new Array(…) と等価である。
  • 引数の数と型に基づいて動作が異なる関数である。
  • クラス定義のextends節の値として使用できる。exotic Arrayの動作を継承することを意図するサブクラスコンストラクターは、Array exotic objectであるサブクラスインスタンスを初期化するために、Arrayコンストラクターへのsuper呼び出しを含めなければならない。ただし、Array.prototypeメソッドの大部分は汎用メソッドであり、そのthis値がArray exotic objectであることに依存しない。

23.1.1.1 Array ( ...values )

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

  1. NewTarget が undefined の場合、newTarget を実行中の関数オブジェクトとする。そうでない場合、newTarget を NewTarget とする。
  2. proto を ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") とする。
  3. numberOfArgsvalues 内の要素数とする。
  4. numberOfArgs = 0 の場合、! ArrayCreate(0, proto) を返す。
  5. numberOfArgs = 1 の場合、次を行う:
    1. lenvalues[0] とする。
    2. array を ! ArrayCreate(0, proto) とする。
    3. len がNumberでない場合、次を行う:
      1. CreateDataPropertyOrThrow(array, "0", len) を実行する。
      2. intLen1𝔽 とする。
    4. それ以外の場合、
      1. intLen を ! ToUint32(len) とする。
      2. SameValueZero(intLen, len) が false の場合、RangeError 例外をスローする。
    5. Set(array, "length", intLen, true) を実行する。
    6. array を返す。
  6. Assert: numberOfArgs ≥ 2。
  7. array を ? ArrayCreate(numberOfArgs, proto) とする。
  8. k を 0 とする。
  9. k < numberOfArgs の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. itemKvalues[k] とする。
    3. CreateDataPropertyOrThrow(array, propertyKey, itemK) を実行する。
    4. kk + 1 に設定する。
  10. Assert: array"length"プロパティの数学的値は numberOfArgs である。
  11. array を返す。

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

Arrayコンストラクターは以下の通りです:

  • [[Prototype]]内部スロットを持ち、その値は %Function.prototype% である。
  • 値が 1𝔽 である"length"プロパティを持つ。
  • 以下のプロパティを持つ:

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

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

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

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

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

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

  1. constructorthis値とする。
  2. mappingfalse とする。
  3. mapperundefined でない場合、次を行う:
    1. IsCallable(mapper) が false の場合、TypeError 例外をスローする。
    2. mappingtrue に設定する。
  4. iteratorRecordundefined とする。
  5. usingAsyncIterator を ? GetMethod(items, %Symbol.asyncIterator%) とする。
  6. usingAsyncIteratorundefined の場合、次を行う:
    1. usingSyncIterator を ? GetMethod(items, %Symbol.iterator%) とする。
    2. usingSyncIteratorundefined でない場合、次を行う:
      1. iteratorRecordCreateAsyncFromSyncIterator(? GetIteratorFromMethod(items, usingSyncIterator)) に設定する。
  7. それ以外の場合、
    1. iteratorRecord を ? GetIteratorFromMethod(items, usingAsyncIterator) に設定する。
  8. iteratorRecordundefined でない場合、次を行う:
    1. IsConstructor(constructor) が true の場合、次を行う:
      1. array を ? Construct(constructor) とする。
    2. それ以外の場合、
      1. array を ! ArrayCreate(0) とする。
    3. k を 0 とする。
    4. 繰り返す:
      1. k ≥ 253 - 1 の場合、次を行う:
        1. errorThrowCompletion(新しく作成された 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. donetrue の場合、次を行う:
        1. Set(array, "length", 𝔽(k), true) を実行する。
        2. array を返す。
      8. nextValue を ? IteratorValue(nextResult) とする。
      9. mappingtrue の場合、次を行う:
        1. mappedValueCompletion(Call(mapper, thisArg, « nextValue, 𝔽(k) »)) とする。
        2. IfAbruptCloseAsyncIterator(mappedValue, iteratorRecord)。
        3. mappedValueCompletion(Await(mappedValue)) に設定する。
        4. IfAbruptCloseAsyncIterator(mappedValue, iteratorRecord)。
      10. それ以外の場合、
        1. mappedValuenextValue とする。
      11. defineStatusCompletion(CreateDataPropertyOrThrow(array, propertyKey, mappedValue)) とする。
      12. IfAbruptCloseAsyncIterator(defineStatus, iteratorRecord)。
      13. kk + 1 に設定する。
  9. それ以外の場合、
    1. NOTE: itemsasync iterableでもiterableでもないため、array-like objectであると仮定する。
    2. arrayLike を ! ToObject(items) とする。
    3. len を ? LengthOfArrayLike(arrayLike) とする。
    4. IsConstructor(constructor) が true の場合、次を行う:
      1. array を ? Construct(constructor, « 𝔽(len) ») とする。
    5. それ以外の場合、
      1. array を ? ArrayCreate(len) とする。
    6. k を 0 とする。
    7. k < len の間、繰り返す:
      1. propertyKey を ! ToString(𝔽(k)) とする。
      2. kValue を ? Get(arrayLike, propertyKey) とする。
      3. kValue を ? Await(kValue) に設定する。
      4. mappingtrue の場合、次を行う:
        1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
        2. mappedValue を ? Await(mappedValue) に設定する。
      5. それ以外の場合、
        1. mappedValuekValue とする。
      6. CreateDataPropertyOrThrow(array, propertyKey, mappedValue) を実行する。
      7. kk + 1 に設定する。
    8. Set(array, "length", 𝔽(len), true) を実行する。
    9. array を返す。
Note

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

23.1.2.3 Array.isArray ( arg )

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

  1. IsArray(arg) を返す。

23.1.2.4 Array.of ( ...items )

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

  1. lenitems 内の要素数とする。
  2. lenNumber𝔽(len) とする。
  3. constructorthis値とする。
  4. IsConstructor(constructor) が true の場合、次を行う:
    1. array を ? Construct(constructor, « lenNumber ») とする。
  5. それ以外の場合、
    1. array を ? ArrayCreate(len) とする。
  6. k を 0 とする。
  7. k < len の間、繰り返す:
    1. kValueitems[k] とする。
    2. propertyKey を ! ToString(𝔽(k)) とする。
    3. CreateDataPropertyOrThrow(array, propertyKey, kValue) を実行する。
    4. kk + 1 に設定する。
  8. Set(array, "length", lenNumber, true) を実行する。
  9. array を返す。
Note

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

23.1.2.5 Array.prototype

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

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

Note

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

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

Arrayプロトタイプオブジェクトは以下の通りです:

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

Arrayプロトタイプオブジェクトは、ECMAScript 2015仕様より前に作成されたECMAScriptコードとの互換性を確保するため、Array exotic objectであると指定されています。

23.1.3.1 Array.prototype.at ( index )

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. relativeIndex を ? ToIntegerOrInfinity(index) とする。
  4. relativeIndex ≥ 0 の場合、次を行う:
    1. krelativeIndex とする。
  5. それ以外の場合、
    1. klen + relativeIndex とする。
  6. k < 0 または klen の場合、undefined を返す。
  7. 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. objitems の先頭に追加する。
  5. items の各要素 item について、次を行う:
    1. spreadable を ? IsConcatSpreadable(item) とする。
    2. spreadabletrue の場合、次を行う:
      1. len を ? LengthOfArrayLike(item) とする。
      2. nextIndex + len > 253 - 1 の場合、TypeError 例外をスローする。
      3. sourceIndex を 0 とする。
      4. sourceIndex < len の間、繰り返す:
        1. propertyKey を ! ToString(𝔽(sourceIndex)) とする。
        2. exists を ? HasProperty(item, propertyKey) とする。
        3. existstrue の場合、次を行う:
          1. subElement を ? Get(item, propertyKey) とする。
          2. CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), subElement) を実行する。
        4. nextIndexnextIndex + 1 に設定する。
        5. sourceIndexsourceIndex + 1 に設定する。
    3. それ以外の場合、
      1. NOTE: item は展開されるのではなく、単一の項目として追加される。
      2. nextIndex ≥ 253 - 1 の場合、TypeError 例外をスローする。
      3. CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), item) を実行する。
      4. nextIndexnextIndex + 1 に設定する。
  6. Set(array, "length", 𝔽(nextIndex), true) を実行する。
  7. array を返す。

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

Note 1

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

Note 2

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

23.1.3.2.1 IsConcatSpreadable ( obj )

The abstract operation IsConcatSpreadable takes argument obj (ECMAScript言語値) and returns Booleanを含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. obj がObjectでない場合、false を返す。
  2. spreadable を ? Get(obj, %Symbol.isConcatSpreadable%) とする。
  3. spreadableundefined でない場合、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 ] )

Note 1

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

Note 2

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. relativeTarget を ? ToIntegerOrInfinity(target) とする。
  4. relativeTarget = -∞ の場合、to を 0 とする。
  5. そうでなく relativeTarget < 0 の場合、tomax(len + relativeTarget, 0) とする。
  6. それ以外の場合、tomin(relativeTarget, len) とする。
  7. relativeStart を ? ToIntegerOrInfinity(start) とする。
  8. relativeStart = -∞ の場合、from を 0 とする。
  9. そうでなく relativeStart < 0 の場合、frommax(len + relativeStart, 0) とする。
  10. それ以外の場合、frommin(relativeStart, len) とする。
  11. endundefined の場合、relativeEndlen とする。そうでない場合、relativeEnd を ? ToIntegerOrInfinity(end) とする。
  12. relativeEnd = -∞ の場合、final を 0 とする。
  13. そうでなく relativeEnd < 0 の場合、finalmax(len + relativeEnd, 0) とする。
  14. それ以外の場合、finalmin(relativeEnd, len) とする。
  15. countmin(final - from, len - to) とする。
  16. from < to かつ to < from + count の場合、次を行う:
    1. direction を -1 とする。
    2. fromfrom + count - 1 に設定する。
    3. toto + count - 1 に設定する。
  17. それ以外の場合、
    1. direction を 1 とする。
  18. count > 0 の間、繰り返す:
    1. fromKey を ! ToString(𝔽(from)) とする。
    2. toKey を ! ToString(𝔽(to)) とする。
    3. fromPresent を ? HasProperty(obj, fromKey) とする。
    4. fromPresenttrue の場合、次を行う:
      1. fromValue を ? Get(obj, fromKey) とする。
      2. Set(obj, toKey, fromValue, true) を実行する。
    5. それ以外の場合、
      1. Assert: fromPresentfalse である。
      2. DeletePropertyOrThrow(obj, toKey) を実行する。
    6. fromfrom + direction に設定する。
    7. toto + direction に設定する。
    8. countcount - 1 に設定する。
  19. obj を返す。
Note 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 ] )

Note 1

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

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

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

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

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

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

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

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

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

Note 1

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

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

Note 2

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. relativeStart を ? ToIntegerOrInfinity(start) とする。
  4. relativeStart = -∞ の場合、k を 0 とする。
  5. そうでなく relativeStart < 0 の場合、kmax(len + relativeStart, 0) とする。
  6. それ以外の場合、kmin(relativeStart, len) とする。
  7. endundefined の場合、relativeEndlen とする。そうでない場合、relativeEnd を ? ToIntegerOrInfinity(end) とする。
  8. relativeEnd = -∞ の場合、final を 0 とする。
  9. そうでなく relativeEnd < 0 の場合、finalmax(len + relativeEnd, 0) とする。
  10. それ以外の場合、finalmin(relativeEnd, len) とする。
  11. k < final の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. Set(obj, propertyKey, value, true) を実行する。
    3. kk + 1 に設定する。
  12. obj を返す。
Note 3

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

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

Note 1

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

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

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

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

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

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

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

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

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

Note 1

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

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

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

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

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

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

Note 1

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

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

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

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

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

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

Note 1

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

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

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

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

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

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

Note 1

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

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

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

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

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

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

The abstract operation FindViaPredicate takes arguments obj (Object), len (非負整数), direction (ascending または descending), predicate (ECMAScript言語値), and thisArg (ECMAScript言語値) and returns フィールド [[Index]](整数Number)および [[Value]](ECMAScript言語値)を持つRecordを含む正常完了、またはスロー完了のいずれか.

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

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

thisArgpredicate の各呼び出しのthis値として使用されます。

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

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

It performs the following steps when called:

  1. IsCallable(predicate) が false の場合、TypeError 例外をスローする。
  2. directionascending である場合、次を行う:
    1. indices を、0(包含)から len(排他)までの区間内の整数を昇順に並べたListとする。
  3. それ以外の場合、
    1. indices を、0(包含)から len(排他)までの区間内の整数を降順に並べたListとする。
  4. indices の各整数 k について、次を行う:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. NOTE: objTypedArrayである場合、次の 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. sourceLen を ? LengthOfArrayLike(obj) とする。
  3. depthNum を 1 とする。
  4. depthundefined でない場合、次を行う:
    1. depthNum を ? ToIntegerOrInfinity(depth) に設定する。
    2. depthNum < 0 の場合、depthNum を 0 に設定する。
  5. array を ? ArraySpeciesCreate(obj, 0) とする。
  6. FlattenIntoArray(array, obj, sourceLen, 0, depthNum) を実行する。
  7. array を返す。

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

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

  1. Assert: mapperFunction が存在する場合、IsCallable(mapperFunction) は true であり、thisArg が存在し、depth は 1 である。
  2. targetIndexstart とする。
  3. sourceIndex+0𝔽 とする。
  4. (sourceIndex) < sourceLen の間、繰り返す:
    1. propertyKey を ! ToString(sourceIndex) とする。
    2. exists を ? HasProperty(source, propertyKey) とする。
    3. existstrue の場合、次を行う:
      1. element を ? Get(source, propertyKey) とする。
      2. mapperFunction が存在する場合、次を行う:
        1. element を ? Call(mapperFunction, thisArg, « element, sourceIndex, source ») に設定する。
      3. shouldFlattenfalse とする。
      4. depth > 0 の場合、次を行う:
        1. shouldFlatten を ? IsArray(element) に設定する。
      5. shouldFlattentrue の場合、次を行う:
        1. depth = +∞ の場合、newDepth を +∞ とする。
        2. それ以外の場合、newDepthdepth - 1 とする。
        3. elementLen を ? LengthOfArrayLike(element) とする。
        4. targetIndex を ? FlattenIntoArray(target, element, elementLen, targetIndex, newDepth) に設定する。
      6. それ以外の場合、
        1. targetIndex ≥ 253 - 1 の場合、TypeError 例外をスローする。
        2. CreateDataPropertyOrThrow(target, ! ToString(𝔽(targetIndex)), element) を実行する。
        3. targetIndextargetIndex + 1 に設定する。
    4. sourceIndexsourceIndex + 1𝔽 に設定する。
  5. targetIndex を返す。

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

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

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

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

Note 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. len を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  4. k を 0 とする。
  5. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresenttrue の場合、次を行う:
      1. kValue を ? Get(obj, propertyKey) とする。
      2. Call(callback, thisArg, « kValue, 𝔽(k), obj ») を実行する。
    4. kk + 1 に設定する。
  6. undefined を返す。
Note 2

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

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

Note 1

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

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. len = 0 の場合、false を返す。
  4. startIndex を ? ToIntegerOrInfinity(fromIndex) とする。
  5. Assert: fromIndexundefined の場合、startIndex は 0 である。
  6. startIndex = +∞ の場合、false を返す。
  7. startIndex = -∞ の場合、startIndex を 0 に設定する。
  8. startIndex ≥ 0 の場合、次を行う:
    1. kstartIndex とする。
  9. それ以外の場合、
    1. klen + startIndex とする。
    2. k < 0 の場合、k を 0 に設定する。
  10. k < len の間、繰り返す:
    1. elementK を ? Get(obj, ! ToString(𝔽(k))) とする。
    2. SameValueZero(searchElement, elementK) が true の場合、true を返す。
    3. kk + 1 に設定する。
  11. false を返す。
Note 2

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

Note 3

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

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

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

Note 1

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. len = 0 の場合、-1𝔽 を返す。
  4. startIndex を ? ToIntegerOrInfinity(fromIndex) とする。
  5. Assert: fromIndexundefined の場合、startIndex は 0 である。
  6. startIndex = +∞ の場合、-1𝔽 を返す。
  7. startIndex = -∞ の場合、startIndex を 0 に設定する。
  8. startIndex ≥ 0 の場合、次を行う:
    1. kstartIndex とする。
  9. それ以外の場合、
    1. klen + startIndex とする。
    2. k < 0 の場合、k を 0 に設定する。
  10. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresenttrue の場合、次を行う:
      1. elementK を ? Get(obj, propertyKey) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true の場合、𝔽(k) を返す。
    4. kk + 1 に設定する。
  11. -1𝔽 を返す。
Note 2

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

23.1.3.18 Array.prototype.join ( separator )

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. separatorundefined の場合、sep"," とする。
  4. それ以外の場合、sep を ? ToString(separator) とする。
  5. result を空のStringとする。
  6. k を 0 とする。
  7. k < len の間、繰り返す:
    1. k > 0 の場合、resultresultsep の文字列連結に設定する。
    2. element を ? Get(obj, ! ToString(𝔽(k))) とする。
    3. elementundefined でも null でもない場合、次を行う:
      1. elementStr を ? ToString(element) とする。
      2. resultresultelementStr の文字列連結に設定する。
    4. kk + 1 に設定する。
  8. result を返す。
Note

このメソッドは意図的に汎用です。その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 ] )

Note 1

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

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. len = 0 の場合、-1𝔽 を返す。
  4. fromIndex が存在する場合、startIndex を ? ToIntegerOrInfinity(fromIndex) とする。そうでない場合、startIndexlen - 1 とする。
  5. startIndex = -∞ の場合、-1𝔽 を返す。
  6. startIndex ≥ 0 の場合、次を行う:
    1. kmin(startIndex, len - 1) とする。
  7. それ以外の場合、
    1. klen + startIndex とする。
  8. k ≥ 0 の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresenttrue の場合、次を行う:
      1. elementK を ? Get(obj, propertyKey) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true の場合、𝔽(k) を返す。
    4. kk - 1 に設定する。
  9. -1𝔽 を返す。
Note 2

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

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

Note 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. len を ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  4. array を ? ArraySpeciesCreate(obj, len) とする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresenttrue の場合、次を行う:
      1. kValue を ? Get(obj, propertyKey) とする。
      2. mappedValue を ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») とする。
      3. CreateDataPropertyOrThrow(array, propertyKey, mappedValue) を実行する。
    4. kk + 1 に設定する。
  7. array を返す。
Note 2

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

23.1.3.22 Array.prototype.pop ( )

Note 1

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. len = 0 の場合、次を行う:
    1. Set(obj, "length", +0𝔽, true) を実行する。
    2. undefined を返す。
  4. Assert: len > 0。
  5. newLen𝔽(len - 1) とする。
  6. index を ! ToString(newLen) とする。
  7. element を ? Get(obj, index) とする。
  8. DeletePropertyOrThrow(obj, index) を実行する。
  9. Set(obj, "length", newLen, true) を実行する。
  10. element を返す。
Note 2

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

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

Note 1

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

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

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

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

Note 2

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

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

Note 1

callback は4つの引数を取る関数でなければならない。reduce は、配列内に存在する各要素について昇順で callback を1回ずつ呼び出す。ただし、initialValue が提供されていない場合は最初の要素をスキップする。

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

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

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

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

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

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

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

Note 1

callback は4つの引数を取る関数でなければならない。reduceRight は、配列内に存在する各要素について降順で callback を1回ずつ呼び出す。ただし、initialValue が提供されていない場合は最初の呼び出しをスキップする。

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

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

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

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

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

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

23.1.3.26 Array.prototype.reverse ( )

Note 1

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. middlefloor(len / 2) とする。
  4. lower を 0 とする。
  5. lowermiddle の間、繰り返す:
    1. upperlen - lower - 1 とする。
    2. upperP を ! ToString(𝔽(upper)) とする。
    3. lowerP を ! ToString(𝔽(lower)) とする。
    4. lowerExists を ? HasProperty(obj, lowerP) とする。
    5. lowerExiststrue の場合、次を行う:
      1. lowerValue を ? Get(obj, lowerP) とする。
    6. upperExists を ? HasProperty(obj, upperP) とする。
    7. upperExiststrue の場合、次を行う:
      1. upperValue を ? Get(obj, upperP) とする。
    8. lowerExiststrue かつ upperExiststrue の場合、次を行う:
      1. Set(obj, lowerP, upperValue, true) を実行する。
      2. Set(obj, upperP, lowerValue, true) を実行する。
    9. そうでなく lowerExistsfalse かつ upperExiststrue の場合、次を行う:
      1. Set(obj, lowerP, upperValue, true) を実行する。
      2. DeletePropertyOrThrow(obj, upperP) を実行する。
    10. そうでなく lowerExiststrue かつ upperExistsfalse の場合、次を行う:
      1. DeletePropertyOrThrow(obj, lowerP) を実行する。
      2. Set(obj, upperP, lowerValue, true) を実行する。
    11. それ以外の場合、
      1. Assert: lowerExistsupperExists はどちらも false である。
      2. NOTE: アクションは不要である。
    12. lowerlower + 1 に設定する。
  6. obj を返す。
Note 2

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

23.1.3.27 Array.prototype.shift ( )

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. len = 0 の場合、次を行う:
    1. Set(obj, "length", +0𝔽, true) を実行する。
    2. undefined を返す。
  4. first を ? Get(obj, "0") とする。
  5. k を 1 とする。
  6. k < len の間、繰り返す:
    1. from を ! ToString(𝔽(k)) とする。
    2. to を ! ToString(𝔽(k - 1)) とする。
    3. fromPresent を ? HasProperty(obj, from) とする。
    4. fromPresenttrue の場合、次を行う:
      1. fromValue を ? Get(obj, from) とする。
      2. Set(obj, to, fromValue, true) を実行する。
    5. それ以外の場合、
      1. Assert: fromPresentfalse である。
      2. DeletePropertyOrThrow(obj, to) を実行する。
    6. kk + 1 に設定する。
  7. DeletePropertyOrThrow(obj, ! ToString(𝔽(len - 1))) を実行する。
  8. Set(obj, "length", 𝔽(len - 1), true) を実行する。
  9. first を返す。
Note

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

23.1.3.28 Array.prototype.slice ( start, end )

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. relativeStart を ? ToIntegerOrInfinity(start) とする。
  4. relativeStart = -∞ の場合、k を 0 とする。
  5. そうでなく relativeStart < 0 の場合、kmax(len + relativeStart, 0) とする。
  6. それ以外の場合、kmin(relativeStart, len) とする。
  7. endundefined の場合、relativeEndlen とする。そうでない場合、relativeEnd を ? ToIntegerOrInfinity(end) とする。
  8. relativeEnd = -∞ の場合、final を 0 とする。
  9. そうでなく relativeEnd < 0 の場合、finalmax(len + relativeEnd, 0) とする。
  10. それ以外の場合、finalmin(relativeEnd, len) とする。
  11. countmax(final - k, 0) とする。
  12. array を ? ArraySpeciesCreate(obj, count) とする。
  13. resultIndex を 0 とする。
  14. k < final の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ? HasProperty(obj, propertyKey) とする。
    3. kPresenttrue の場合、次を行う:
      1. kValue を ? Get(obj, propertyKey) とする。
      2. CreateDataPropertyOrThrow(array, ! ToString(𝔽(resultIndex)), kValue) を実行する。
    4. kk + 1 に設定する。
    5. resultIndexresultIndex + 1 に設定する。
  15. Set(array, "length", 𝔽(resultIndex), true) を実行する。
  16. array を返す。
Note 1

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

Note 2

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

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

Note 1

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

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

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

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

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

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

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

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

23.1.3.30 Array.prototype.sort ( comparator )

このメソッドは、この配列の要素をソートします。comparatorundefined でない場合、それは2つの引数 xy を受け取り、x < y の場合に負のNumber、x > y の場合に正のNumber、それ以外の場合にゼロを返す関数であるべきです。

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

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

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

Note 2

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

Note 3

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

23.1.3.30.1 SortIndexedProperties ( obj, len, sortCompare, holes )

The abstract operation SortIndexedProperties takes arguments obj (Object), len (非負整数), sortCompare (2つのパラメーターを持つAbstract Closure), and holes (skip-holes または read-through-holes) and returns ECMAScript言語値のListを含む正常完了、またはスロー完了のいずれか. It performs the following steps when called:

  1. items を新しい空のListとする。
  2. k を 0 とする。
  3. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. holesskip-holes である場合、次を行う:
      1. kRead を ? HasProperty(obj, propertyKey) とする。
    3. それ以外の場合、
      1. Assert: holesread-through-holes である。
      2. kReadtrue とする。
    4. kReadtrue の場合、次を行う:
      1. kValue を ? Get(obj, propertyKey) とする。
      2. kValueitems に追加する。
    5. kk + 1 に設定する。
  4. 実装定義の sortCompare への呼び出し の列を使用して items をソートする。そのような呼び出しのいずれかが急な完了を返す場合、sortCompare へのそれ以降の呼び出しを実行する前に停止し、そのCompletion Recordを返す。
  5. items を返す。

ソート順は、上記アルゴリズムのステップ 4 の完了後の items の順序です。sortCompareitems の要素に対する一貫した比較関数でない場合、ソート順は実装定義です。SortIndexedPropertiesが Array.prototype.sort または Array.prototype.toSorted によって起動された場合、comparatorundefined であり、かつ 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 に対して、集合 values 内のすべての値 ab、および c(同じ値であってもよい)について以下の要件がすべて満たされる場合、その集合に対する一貫した比較関数です。表記 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つの引数として特定の値の組 ab が与えられたとき、常に同じ値 v を返す。さらに、v はNumberであり、vNaN でない。これは、与えられた ab の組について、a <C ba =C b、および a >C b のちょうど1つがtrueになることを意味することに注意。
  • comparator(a, b) の呼び出しは、obj または obj のプロトタイプチェーン上のどのオブジェクトも変更しない。
  • 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 の推移律)
Note

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

23.1.3.30.2 CompareArrayElements ( x, y, comparator )

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

  1. xundefined かつ yundefined の場合、+0𝔽 を返す。
  2. xundefined の場合、1𝔽 を返す。
  3. yundefined の場合、-1𝔽 を返す。
  4. comparatorundefined でない場合、次を行う:
    1. result を ? ToNumber(? Call(comparator, undefined, « x, y »)) とする。
    2. resultNaN の場合、+0𝔽 を返す。
    3. result を返す。
  5. xString を ? ToString(x) とする。
  6. yString を ? ToString(y) とする。
  7. xSmaller を ! IsLessThan(xString, yString, true) とする。
  8. xSmallertrue の場合、-1𝔽 を返す。
  9. ySmaller を ! IsLessThan(yString, xString, true) とする。
  10. ySmallertrue の場合、1𝔽 を返す。
  11. +0𝔽 を返す。

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

Note 1

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. relativeStart を ? ToIntegerOrInfinity(start) とする。
  4. relativeStart = -∞ の場合、actualStart を 0 とする。
  5. そうでなく relativeStart < 0 の場合、actualStartmax(len + relativeStart, 0) とする。
  6. それ以外の場合、actualStartmin(relativeStart, len) とする。
  7. itemCountitems 内の要素数とする。
  8. start が存在しない場合、次を行う:
    1. actualDeleteCount を 0 とする。
  9. そうでなく deleteCount が存在しない場合、次を行う:
    1. actualDeleteCountlen - actualStart とする。
  10. それ以外の場合、
    1. dc を ? ToIntegerOrInfinity(deleteCount) とする。
    2. actualDeleteCount を、dc を0と len - actualStart の間にクランプした結果とする。
  11. len + itemCount - actualDeleteCount > 253 - 1 の場合、TypeError 例外をスローする。
  12. deletedArray を ? ArraySpeciesCreate(obj, actualDeleteCount) とする。
  13. k を 0 とする。
  14. k < actualDeleteCount の間、繰り返す:
    1. from を ! ToString(𝔽(actualStart + k)) とする。
    2. HasProperty(obj, from) が true の場合、次を行う:
      1. fromValue を ? Get(obj, from) とする。
      2. CreateDataPropertyOrThrow(deletedArray, ! ToString(𝔽(k)), fromValue) を実行する。
    3. kk + 1 に設定する。
  15. Set(deletedArray, "length", 𝔽(actualDeleteCount), true) を実行する。
  16. itemCount < actualDeleteCount の場合、次を行う:
    1. kactualStart に設定する。
    2. k < (len - 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. kk + 1 に設定する。
    3. klen に設定する。
    4. k > (len - actualDeleteCount + itemCount) の間、繰り返す:
      1. DeletePropertyOrThrow(obj, ! ToString(𝔽(k - 1))) を実行する。
      2. kk - 1 に設定する。
  17. そうでなく itemCount > actualDeleteCount の場合、次を行う:
    1. k を (len - 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. kk - 1 に設定する。
  18. kactualStart に設定する。
  19. items の各要素 item について、次を行う:
    1. Set(obj, ! ToString(𝔽(k)), item, true) を実行する。
    2. kk + 1 に設定する。
  20. Set(obj, "length", 𝔽(len - actualDeleteCount + itemCount), true) を実行する。
  21. deletedArray を返す。
Note 2

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

Note 3

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

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

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

Note 1

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

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

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

  1. array を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(array) とする。
  3. separator を、ホスト環境の現在のロケールに適した実装定義のリストセパレーターString値(例えば ", ")とする。
  4. result を空のStringとする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. k > 0 の場合、resultresultseparator の文字列連結に設定する。
    2. element を ? Get(array, ! ToString(𝔽(k))) とする。
    3. elementundefined でも null でもない場合、次を行う:
      1. elementStr を ? ToString(? Invoke(element, "toLocaleString")) とする。
      2. resultresultelementStr の文字列連結に設定する。
    4. kk + 1 に設定する。
  7. result を返す。
Note 2

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

Note 3

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

23.1.3.33 Array.prototype.toReversed ( )

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

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

23.1.3.34 Array.prototype.toSorted ( comparator )

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

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

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

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

  1. obj を ? ToObject(this値) とする。
  2. len を ? LengthOfArrayLike(obj) とする。
  3. relativeStart を ? ToIntegerOrInfinity(start) とする。
  4. relativeStart = -∞ の場合、actualStart を 0 とする。
  5. そうでなく relativeStart < 0 の場合、actualStartmax(len + relativeStart, 0) とする。
  6. それ以外の場合、actualStartmin(relativeStart, len) とする。
  7. insertCountitems 内の要素数とする。
  8. start が存在しない場合、次を行う:
    1. actualSkipCount を 0 とする。
  9. そうでなく skipCount が存在しない場合、次を行う:
    1. actualSkipCountlen - actualStart とする。
  10. それ以外の場合、
    1. sc を ? ToIntegerOrInfinity(skipCount) とする。
    2. actualSkipCount を、sc を0と len - actualStart の間にクランプした結果とする。
  11. newLenlen + insertCount - actualSkipCount とする。
  12. newLen > 253 - 1 の場合、TypeError 例外をスローする。
  13. newArray を ? ArrayCreate(newLen) とする。
  14. writeIndex を 0 とする。
  15. readIndexactualStart + actualSkipCount とする。
  16. writeIndex < actualStart の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(writeIndex)) とする。
    2. iValue を ? Get(obj, propertyKey) とする。
    3. CreateDataPropertyOrThrow(newArray, propertyKey, iValue) を実行する。
    4. writeIndexwriteIndex + 1 に設定する。
  17. items の各要素 item について、次を行う:
    1. propertyKey を ! ToString(𝔽(writeIndex)) とする。
    2. CreateDataPropertyOrThrow(newArray, propertyKey, item) を実行する。
    3. writeIndexwriteIndex + 1 に設定する。
  18. writeIndex < newLen の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(writeIndex)) とする。
    2. from を ! ToString(𝔽(readIndex)) とする。
    3. fromValue を ? Get(obj, from) とする。
    4. CreateDataPropertyOrThrow(newArray, propertyKey, fromValue) を実行する。
    5. writeIndexwriteIndex + 1 に設定する。
    6. readIndexreadIndex + 1 に設定する。
  19. 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) を返す。
Note

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

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

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

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

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

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

Note

このメソッドは意図的に汎用です。その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. len を ? LengthOfArrayLike(obj) とする。
  3. relativeIndex を ? ToIntegerOrInfinity(index) とする。
  4. relativeIndex ≥ 0 の場合、actualIndexrelativeIndex とする。
  5. それ以外の場合、actualIndexlen + relativeIndex とする。
  6. actualIndexlen または actualIndex < 0 の場合、RangeError 例外をスローする。
  7. array を ? ArrayCreate(len) とする。
  8. k を 0 とする。
  9. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. k = actualIndex の場合、fromValuevalue とする。
    3. それ以外の場合、fromValue を ? Get(obj, propertyKey) とする。
    4. CreateDataPropertyOrThrow(array, propertyKey, fromValue) を実行する。
    5. kk + 1 に設定する。
  10. 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. unscopableListOrdinaryObjectCreate(null) とする。
  2. CreateDataPropertyOrThrow(unscopableList, "at", true) を実行する。
  3. CreateDataPropertyOrThrow(unscopableList, "copyWithin", true) を実行する。
  4. CreateDataPropertyOrThrow(unscopableList, "entries", true) を実行する。
  5. CreateDataPropertyOrThrow(unscopableList, "fill", true) を実行する。
  6. CreateDataPropertyOrThrow(unscopableList, "find", true) を実行する。
  7. CreateDataPropertyOrThrow(unscopableList, "findIndex", true) を実行する。
  8. CreateDataPropertyOrThrow(unscopableList, "findLast", true) を実行する。
  9. CreateDataPropertyOrThrow(unscopableList, "findLastIndex", true) を実行する。
  10. CreateDataPropertyOrThrow(unscopableList, "flat", true) を実行する。
  11. CreateDataPropertyOrThrow(unscopableList, "flatMap", true) を実行する。
  12. CreateDataPropertyOrThrow(unscopableList, "includes", true) を実行する。
  13. CreateDataPropertyOrThrow(unscopableList, "keys", true) を実行する。
  14. CreateDataPropertyOrThrow(unscopableList, "toReversed", true) を実行する。
  15. CreateDataPropertyOrThrow(unscopableList, "toSorted", true) を実行する。
  16. CreateDataPropertyOrThrow(unscopableList, "toSpliced", true) を実行する。
  17. CreateDataPropertyOrThrow(unscopableList, "values", true) を実行する。
  18. unscopableList を返す。

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

Note

このオブジェクトの独自プロパティ名は、ECMAScript 2015仕様より前にArray.prototypeの標準プロパティとして含まれていなかったプロパティ名です。これらの名前は、Arrayである束縛オブジェクトを持つwith文によって隠蔽される外側のスコープ内の束縛として既存のコードがこれらの名前の1つを使用している可能性があるため、with文の束縛目的では無視されます。

"with"unscopableList に含まれない理由は、それがすでに予約語であるためです。

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

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

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

23.1.4.1 length

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

"length"プロパティの初期属性は { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } です。

Note

"length"プロパティの値を減らすことは、配列インデックスが古い長さ値と新しい長さ値の間にある独自配列要素を削除する副作用を持ちます。ただし、構成不可プロパティは削除できません。Arrayの"length"プロパティを、配列の既存の構成不可な配列インデックス付きプロパティの最大数値独自プロパティ名以下の数値に設定しようとすると、長さはその構成不可な数値独自プロパティ名より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 )

The abstract operation CreateArrayIterator takes arguments array (Object) and kind (key+valuekey、または value) and returns Object. これは、そのようなイテレーターを返すArrayメソッドのためにイテレーターオブジェクトを作成するために使用されます。 It performs the following steps when called:

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

23.1.5.2 %ArrayIteratorPrototype%オブジェクト

%ArrayIteratorPrototype%オブジェクトは以下の通りです:

  • すべてのArray Iteratorオブジェクトによって継承されるプロパティを持つ。
  • 通常のオブジェクトである。
  • [[Prototype]]内部スロットを持ち、その値は %Iterator.prototype% である。
  • 以下のプロパティを持つ:

23.1.5.2.1 %ArrayIteratorPrototype%.next ( )

  1. iteratorObjthis値とする。
  2. iteratorObj がObjectでない場合、TypeError 例外をスローする。
  3. iteratorObjArray Iteratorインスタンスのすべての内部スロット(23.1.5.3)を持たない場合、TypeError 例外をスローする。
  4. arrayiteratorObj.[[IteratedArrayLike]] とする。
  5. arrayundefined の場合、CreateIteratorResultObject(undefined, true) を返す。
  6. indexiteratorObj.[[ArrayLikeNextIndex]] とする。
  7. kinditeratorObj.[[ArrayLikeIterationKind]] とする。
  8. array[[TypedArrayName]] 内部スロットを持つ場合、次を行う:
    1. taRecordMakeTypedArrayWithBufferWitnessRecord(array, seq-cst) とする。
    2. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
    3. lenTypedArrayLength(taRecord) とする。
  9. それ以外の場合、
    1. len を ? LengthOfArrayLike(array) とする。
  10. indexlen の場合、次を行う:
    1. iteratorObj.[[IteratedArrayLike]]undefined に設定する。
    2. CreateIteratorResultObject(undefined, true) を返す。
  11. iteratorObj.[[ArrayLikeNextIndex]]index + 1 に設定する。
  12. indexNumber𝔽(index) とする。
  13. kindkey である場合、次を行う:
    1. resultindexNumber とする。
  14. それ以外の場合、
    1. elementKey を ! ToString(indexNumber) とする。
    2. elementValue を ? Get(array, elementKey) とする。
    3. kindvalue である場合、次を行う:
      1. resultelementValue とする。
    4. それ以外の場合、
      1. Assert: kindkey+value である。
      2. resultCreateArrayFromListindexNumber, 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インスタンスは、最初に Table 69 に列挙されている内部スロットを持つように作成されます。

Table 69: Internal Slots of Array Iterator Instances
内部スロット 説明
[[IteratedArrayLike]] Objectまたはundefined 反復されているarray-like object
[[ArrayLikeNextIndex]] 非負整数 このイテレーターによって次に調べられる要素の整数インデックス。
[[ArrayLikeIterationKind]] key+valuekey、または value 反復の各要素について返されるものを識別する値。

23.2 TypedArrayオブジェクト

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

Table 70: The TypedArray Constructors
コンストラクター名およびIntrinsic 要素型 要素サイズ 変換操作 説明
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% Intrinsicオブジェクト

%TypedArray% intrinsicオブジェクトは以下の通りです:

  • すべての TypedArray コンストラクターオブジェクトが継承するコンストラクター関数オブジェクトである。
  • 対応するプロトタイプオブジェクトとともに、すべての TypedArray コンストラクターおよびそのインスタンスによって継承される共通プロパティを提供する。
  • グローバル名を持たず、グローバルオブジェクトのプロパティとして現れない。
  • 各種 TypedArray コンストラクターの抽象スーパークラスとして機能する。
  • 抽象クラスコンストラクターであるため、呼び出されるとエラーをスローする。TypedArray コンストラクターはこれに対するsuper呼び出しを実行しない。

23.2.1.1 %TypedArray% ( )

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

  1. TypeError 例外をスローする。

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

23.2.2 %TypedArray% Intrinsicオブジェクトのプロパティ

%TypedArray% intrinsicオブジェクトは以下の通りです:

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

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

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

  1. constructorthis値とする。
  2. IsConstructor(constructor) が false の場合、TypeError 例外をスローする。
  3. mapperundefined の場合、次を行う:
    1. mappingfalse とする。
  4. それ以外の場合、
    1. IsCallable(mapper) が false の場合、TypeError 例外をスローする。
    2. mappingtrue とする。
  5. usingIterator を ? GetMethod(source, %Symbol.iterator%) とする。
  6. usingIteratorundefined でない場合、次を行う:
    1. values を ? IteratorToList(? GetIteratorFromMethod(source, usingIterator)) とする。
    2. lenvalues 内の要素数とする。
    3. targetObj を ? TypedArrayCreateFromConstructor(constructor, « 𝔽(len) ») とする。
    4. k を 0 とする。
    5. k < len の間、繰り返す:
      1. propertyKey を ! ToString(𝔽(k)) とする。
      2. kValuevalues の最初の要素とする。
      3. values から最初の要素を除去する。
      4. mappingtrue の場合、次を行う:
        1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
      5. それ以外の場合、
        1. mappedValuekValue とする。
      6. Set(targetObj, propertyKey, mappedValue, true) を実行する。
      7. kk + 1 に設定する。
    6. Assert: values は今や空のListである。
    7. targetObj を返す。
  7. NOTE: sourceiterable objectでないため、すでにarray-like objectであると仮定する。
  8. arrayLike を ! ToObject(source) とする。
  9. len を ? LengthOfArrayLike(arrayLike) とする。
  10. targetObj を ? TypedArrayCreateFromConstructor(constructor, « 𝔽(len) ») とする。
  11. k を 0 とする。
  12. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ? Get(arrayLike, propertyKey) とする。
    3. mappingtrue の場合、次を行う:
      1. mappedValue を ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
    4. それ以外の場合、
      1. mappedValuekValue とする。
    5. Set(targetObj, propertyKey, mappedValue, true) を実行する。
    6. kk + 1 に設定する。
  13. targetObj を返す。

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

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

  1. lenitems 内の要素数とする。
  2. constructorthis値とする。
  3. IsConstructor(constructor) が false の場合、TypeError 例外をスローする。
  4. newObj を ? TypedArrayCreateFromConstructor(constructor, « 𝔽(len) ») とする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. kValueitems[k] とする。
    2. propertyKey を ! ToString(𝔽(k)) とする。
    3. Set(newObj, propertyKey, kValue, true) を実行する。
    4. kk + 1 に設定する。
  7. newObj を返す。

23.2.2.3 %TypedArray%.prototype

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

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

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

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

  1. this値を返す。

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

Note

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

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

%TypedArray%プロトタイプオブジェクトは以下の通りです:

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

23.2.3.1 %TypedArray%.prototype.at ( index )

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. relativeIndex を ? ToIntegerOrInfinity(index) とする。
  5. relativeIndex ≥ 0 の場合、次を行う:
    1. krelativeIndex とする。
  6. それ以外の場合、
    1. klen + relativeIndex とする。
  7. k < 0 または klen の場合、undefined を返す。
  8. Get(obj, ! ToString(𝔽(k))) を返す。

23.2.3.2 get %TypedArray%.prototype.buffer

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

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

23.2.3.3 get %TypedArray%.prototype.byteLength

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

  1. objthis値とする。
  2. RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] 内部スロットを持つ。
  4. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  5. IsTypedArrayOutOfBounds(taRecord) が true の場合、+0𝔽 を返す。
  6. sizeTypedArrayByteLength(taRecord) とする。
  7. 𝔽(size) を返す。

23.2.3.4 get %TypedArray%.prototype.byteOffset

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

  1. objthis値とする。
  2. RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] 内部スロットを持つ。
  4. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  5. IsTypedArrayOutOfBounds(taRecord) が true の場合、+0𝔽 を返す。
  6. offsetobj.[[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. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. relativeTarget を ? ToIntegerOrInfinity(target) とする。
  5. relativeTarget = -∞ の場合、targetIndex を 0 とする。
  6. そうでなく relativeTarget < 0 の場合、targetIndexmax(len + relativeTarget, 0) とする。
  7. それ以外の場合、targetIndexmin(relativeTarget, len) とする。
  8. relativeStart を ? ToIntegerOrInfinity(start) とする。
  9. relativeStart = -∞ の場合、startIndex を 0 とする。
  10. そうでなく relativeStart < 0 の場合、startIndexmax(len + relativeStart, 0) とする。
  11. それ以外の場合、startIndexmin(relativeStart, len) とする。
  12. endundefined の場合、relativeEndlen とする。そうでない場合、relativeEnd を ? ToIntegerOrInfinity(end) とする。
  13. relativeEnd = -∞ の場合、endIndex を 0 とする。
  14. そうでなく relativeEnd < 0 の場合、endIndexmax(len + relativeEnd, 0) とする。
  15. それ以外の場合、endIndexmin(relativeEnd, len) とする。
  16. countmin(endIndex - startIndex, len - targetIndex) とする。
  17. count > 0 の場合、次を行う:
    1. NOTE: コピーは、ソースデータのビットレベル符号化を保持する方法で実行されなければならない。
    2. bufferobj.[[ViewedArrayBuffer]] とする。
    3. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) に設定する。
    4. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
    5. lenTypedArrayLength(taRecord) に設定する。
    6. NOTE: 上記の手順の副作用により obj のサイズが縮小されている可能性がある。その場合、コピーは依然として適用可能な最長の接頭辞で進めるべきである。
    7. countmin(count, len - startIndex, len - targetIndex) に設定する。
    8. elementSizeTypedArrayElementSize(obj) とする。
    9. byteOffsetobj.[[ByteOffset]] とする。
    10. toByteIndex を (targetIndex × elementSize) + byteOffset とする。
    11. fromByteIndex を (startIndex × elementSize) + byteOffset とする。
    12. countBytescount × elementSize とする。
    13. fromByteIndex < toByteIndex かつ toByteIndex < fromByteIndex + countBytes の場合、次を行う:
      1. direction を -1 とする。
      2. fromByteIndexfromByteIndex + countBytes - 1 に設定する。
      3. toByteIndextoByteIndex + countBytes - 1 に設定する。
    14. それ以外の場合、
      1. direction を 1 とする。
    15. countBytes > 0 の間、繰り返す:
      1. valueGetValueFromBuffer(buffer, fromByteIndex, uint8, true, unordered) とする。
      2. SetValueInBuffer(buffer, toByteIndex, uint8, value, true, unordered) を実行する。
      3. fromByteIndexfromByteIndex + direction に設定する。
      4. toByteIndextoByteIndex + direction に設定する。
      5. countBytescountBytes - 1 に設定する。
  18. obj を返す。

23.2.3.7 %TypedArray%.prototype.entries ( )

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

  1. objthis値とする。
  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. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ! Get(obj, propertyKey) とする。
    3. testResultToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
    4. testResultfalse の場合、false を返す。
    5. kk + 1 に設定する。
  7. true を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. obj.[[ContentType]]bigint である場合、value を ? ToBigInt(value) に設定する。
  5. それ以外の場合、value を ? ToNumber(value) に設定する。
  6. relativeStart を ? ToIntegerOrInfinity(start) とする。
  7. relativeStart = -∞ の場合、startIndex を 0 とする。
  8. そうでなく relativeStart < 0 の場合、startIndexmax(len + relativeStart, 0) とする。
  9. それ以外の場合、startIndexmin(relativeStart, len) とする。
  10. endundefined の場合、relativeEndlen とする。そうでない場合、relativeEnd を ? ToIntegerOrInfinity(end) とする。
  11. relativeEnd = -∞ の場合、endIndex を 0 とする。
  12. そうでなく relativeEnd < 0 の場合、endIndexmax(len + relativeEnd, 0) とする。
  13. それ以外の場合、endIndexmin(relativeEnd, len) とする。
  14. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) に設定する。
  15. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
  16. lenTypedArrayLength(taRecord) に設定する。
  17. endIndexmin(endIndex, len) に設定する。
  18. kstartIndex とする。
  19. k < endIndex の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. Set(obj, propertyKey, value, true) を実行する。
    3. kk + 1 に設定する。
  20. obj を返す。

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  5. kept を新しい空のListとする。
  6. captured を 0 とする。
  7. k を 0 とする。
  8. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ! Get(obj, propertyKey) とする。
    3. selectedToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
    4. selectedtrue の場合、次を行う:
      1. kValuekept に追加する。
      2. capturedcaptured + 1 に設定する。
    5. kk + 1 に設定する。
  9. resultTypedArray を ? TypedArraySpeciesCreate(obj, « 𝔽(captured) ») とする。
  10. n を 0 とする。
  11. kept の各要素 e について、次を行う:
    1. Set(resultTypedArray, ! ToString(𝔽(n)), e, true) を実行する。
    2. nn + 1 に設定する。
  12. resultTypedArray を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. findRec を ? FindViaPredicate(obj, len, ascending, predicate, thisArg) とする。
  5. findRec.[[Value]] を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. findRec を ? FindViaPredicate(obj, len, ascending, predicate, thisArg) とする。
  5. findRec.[[Index]] を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. findRec を ? FindViaPredicate(obj, len, descending, predicate, thisArg) とする。
  5. findRec.[[Value]] を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. findRec を ? FindViaPredicate(obj, len, descending, predicate, thisArg) とする。
  5. findRec.[[Index]] を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ! Get(obj, propertyKey) とする。
    3. Call(callback, thisArg, « kValue, 𝔽(k), obj ») を実行する。
    4. kk + 1 に設定する。
  7. undefined を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. len = 0 の場合、false を返す。
  5. n を ? ToIntegerOrInfinity(fromIndex) とする。
  6. Assert: fromIndexundefined の場合、n は 0 である。
  7. n = +∞ の場合、false を返す。
  8. n = -∞ の場合、n を 0 に設定する。
  9. n ≥ 0 の場合、次を行う:
    1. kn とする。
  10. それ以外の場合、
    1. klen + n とする。
    2. k < 0 の場合、k を 0 に設定する。
  11. k < len の間、繰り返す:
    1. elementK を ! Get(obj, ! ToString(𝔽(k))) とする。
    2. SameValueZero(searchElement, elementK) が true の場合、true を返す。
    3. kk + 1 に設定する。
  12. false を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. len = 0 の場合、-1𝔽 を返す。
  5. n を ? ToIntegerOrInfinity(fromIndex) とする。
  6. Assert: fromIndexundefined の場合、n は 0 である。
  7. n = +∞ の場合、-1𝔽 を返す。
  8. n = -∞ の場合、n を 0 に設定する。
  9. n ≥ 0 の場合、次を行う:
    1. kn とする。
  10. それ以外の場合、
    1. klen + n とする。
    2. k < 0 の場合、k を 0 に設定する。
  11. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ! HasProperty(obj, propertyKey) とする。
    3. kPresenttrue の場合、次を行う:
      1. elementK を ! Get(obj, propertyKey) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true の場合、𝔽(k) を返す。
    4. kk + 1 に設定する。
  12. -1𝔽 を返す。

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

23.2.3.18 %TypedArray%.prototype.join ( separator )

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. separatorundefined の場合、sep"," とする。
  5. それ以外の場合、sep を ? ToString(separator) とする。
  6. result を空のStringとする。
  7. k を 0 とする。
  8. k < len の間、繰り返す:
    1. k > 0 の場合、resultresultsep の文字列連結に設定する。
    2. element を ! Get(obj, ! ToString(𝔽(k))) とする。
    3. elementundefined でない場合、次を行う:
      1. elementStr を ! ToString(element) とする。
      2. resultresultelementStr の文字列連結に設定する。
    4. kk + 1 に設定する。
  9. result を返す。

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

23.2.3.19 %TypedArray%.prototype.keys ( )

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

  1. objthis値とする。
  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. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. len = 0 の場合、-1𝔽 を返す。
  5. fromIndex が存在する場合、n を ? ToIntegerOrInfinity(fromIndex) とする。そうでない場合、nlen - 1 とする。
  6. n = -∞ の場合、-1𝔽 を返す。
  7. n ≥ 0 の場合、次を行う:
    1. kmin(n, len - 1) とする。
  8. それ以外の場合、
    1. klen + n とする。
  9. k ≥ 0 の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kPresent を ! HasProperty(obj, propertyKey) とする。
    3. kPresenttrue の場合、次を行う:
      1. elementK を ! Get(obj, propertyKey) とする。
      2. IsStrictlyEqual(searchElement, elementK) が true の場合、𝔽(k) を返す。
    4. kk - 1 に設定する。
  10. -1𝔽 を返す。

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

23.2.3.21 get %TypedArray%.prototype.length

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

  1. objthis値とする。
  2. RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] および [[ArrayLength]] 内部スロットを持つ。
  4. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  5. IsTypedArrayOutOfBounds(taRecord) が true の場合、+0𝔽 を返す。
  6. lengthTypedArrayLength(taRecord) とする。
  7. 𝔽(length) を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  5. resultTypedArray を ? TypedArraySpeciesCreate(obj, « 𝔽(len) ») とする。
  6. k を 0 とする。
  7. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ! Get(obj, propertyKey) とする。
    3. mappedValue を ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») とする。
    4. Set(resultTypedArray, propertyKey, mappedValue, true) を実行する。
    5. kk + 1 に設定する。
  8. resultTypedArray を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  5. len = 0 かつ initialValue が存在しない場合、TypeError 例外をスローする。
  6. k を 0 とする。
  7. accumulatorundefined とする。
  8. initialValue が存在する場合、次を行う:
    1. accumulatorinitialValue に設定する。
  9. それ以外の場合、
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. accumulator を ! Get(obj, propertyKey) に設定する。
    3. kk + 1 に設定する。
  10. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ! Get(obj, propertyKey) とする。
    3. accumulator を ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») に設定する。
    4. kk + 1 に設定する。
  11. accumulator を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  5. len = 0 かつ initialValue が存在しない場合、TypeError 例外をスローする。
  6. klen - 1 とする。
  7. accumulatorundefined とする。
  8. initialValue が存在する場合、次を行う:
    1. accumulatorinitialValue に設定する。
  9. それ以外の場合、
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. accumulator を ! Get(obj, propertyKey) に設定する。
    3. kk - 1 に設定する。
  10. k ≥ 0 の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ! Get(obj, propertyKey) とする。
    3. accumulator を ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») に設定する。
    4. kk - 1 に設定する。
  11. accumulator を返す。

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

23.2.3.25 %TypedArray%.prototype.reverse ( )

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. middlefloor(len / 2) とする。
  5. lower を 0 とする。
  6. lowermiddle の間、繰り返す:
    1. upperlen - lower - 1 とする。
    2. upperP を ! ToString(𝔽(upper)) とする。
    3. lowerP を ! ToString(𝔽(lower)) とする。
    4. lowerValue を ! Get(obj, lowerP) とする。
    5. upperValue を ! Get(obj, upperP) とする。
    6. Set(obj, lowerP, upperValue, true) を実行する。
    7. Set(obj, upperP, lowerValue, true) を実行する。
    8. lowerlower + 1 に設定する。
  7. obj を返す。

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

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

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

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

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

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

23.2.3.26.1 SetTypedArrayFromArrayLike ( target, targetOffset, source )

The abstract operation SetTypedArrayFromArrayLike takes arguments target (TypedArray), targetOffset (非負整数または +∞), and source (ECMAScript言語値、ただしTypedArrayではない) and returns unused を含む正常完了またはスロー完了のいずれか. これは、source から値を読み取り、インデックス targetOffset から始めて target 内に複数の値を設定します。 It performs the following steps when called:

  1. targetRecordMakeTypedArrayWithBufferWitnessRecord(target, seq-cst) とする。
  2. IsTypedArrayOutOfBounds(targetRecord) が true の場合、TypeError 例外をスローする。
  3. targetLengthTypedArrayLength(targetRecord) とする。
  4. src を ? ToObject(source) とする。
  5. srcLength を ? LengthOfArrayLike(src) とする。
  6. targetOffset = +∞ の場合、RangeError 例外をスローする。
  7. srcLength + targetOffset > targetLength の場合、RangeError 例外をスローする。
  8. k を 0 とする。
  9. k < srcLength の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. value を ? Get(src, propertyKey) とする。
    3. targetIndex𝔽(targetOffset + k) とする。
    4. TypedArraySetElement(target, targetIndex, value) を実行する。
    5. kk + 1 に設定する。
  10. unused を返す。

23.2.3.26.2 SetTypedArrayFromTypedArray ( target, targetOffset, source )

The abstract operation SetTypedArrayFromTypedArray takes arguments target (TypedArray), targetOffset (非負整数または +∞), and source (TypedArray) and returns unused を含む正常完了またはスロー完了のいずれか. これは、source から値を読み取り、インデックス targetOffset から始めて target 内に複数の値を設定します。 It performs the following steps when called:

  1. targetBuffertarget.[[ViewedArrayBuffer]] とする。
  2. targetRecordMakeTypedArrayWithBufferWitnessRecord(target, seq-cst) とする。
  3. IsTypedArrayOutOfBounds(targetRecord) が true の場合、TypeError 例外をスローする。
  4. targetLengthTypedArrayLength(targetRecord) とする。
  5. srcBuffersource.[[ViewedArrayBuffer]] とする。
  6. srcRecordMakeTypedArrayWithBufferWitnessRecord(source, seq-cst) とする。
  7. IsTypedArrayOutOfBounds(srcRecord) が true の場合、TypeError 例外をスローする。
  8. srcLengthTypedArrayLength(srcRecord) とする。
  9. targetTypeTypedArrayElementType(target) とする。
  10. targetElementSizeTypedArrayElementSize(target) とする。
  11. targetByteOffsettarget.[[ByteOffset]] とする。
  12. srcTypeTypedArrayElementType(source) とする。
  13. srcElementSizeTypedArrayElementSize(source) とする。
  14. srcByteOffsetsource.[[ByteOffset]] とする。
  15. targetOffset = +∞ の場合、RangeError 例外をスローする。
  16. srcLength + targetOffset > targetLength の場合、RangeError 例外をスローする。
  17. target.[[ContentType]]source.[[ContentType]] でない場合、TypeError 例外をスローする。
  18. IsSharedArrayBuffer(srcBuffer) が trueIsSharedArrayBuffer(targetBuffer) が true、かつ srcBuffer.[[ArrayBufferData]]targetBuffer.[[ArrayBufferData]] である場合、sameSharedArrayBuffertrue とする。そうでない場合、sameSharedArrayBufferfalse とする。
  19. SameValue(srcBuffer, targetBuffer) が true、または sameSharedArrayBuffertrue の場合、次を行う:
    1. srcByteLengthTypedArrayByteLength(srcRecord) とする。
    2. srcBuffer を ? CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength) に設定する。
    3. srcByteIndex を 0 とする。
  20. それ以外の場合、
    1. srcByteIndexsrcByteOffset とする。
  21. targetByteIndex を (targetOffset × targetElementSize) + targetByteOffset とする。
  22. limittargetByteIndex + (targetElementSize × srcLength) とする。
  23. srcTypetargetType である場合、次を行う:
    1. NOTE: 転送は、ソースデータのビットレベル符号化を保持する方法で実行されなければならない。
    2. targetByteIndex < limit の間、繰り返す:
      1. valueGetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered) とする。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) を実行する。
      3. srcByteIndexsrcByteIndex + 1 に設定する。
      4. targetByteIndextargetByteIndex + 1 に設定する。
  24. それ以外の場合、
    1. targetByteIndex < limit の間、繰り返す:
      1. valueGetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, unordered) とする。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, unordered) を実行する。
      3. srcByteIndexsrcByteIndex + srcElementSize に設定する。
      4. targetByteIndextargetByteIndex + targetElementSize に設定する。
  25. unused を返す。

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. srcArrayLengthTypedArrayLength(taRecord) とする。
  4. relativeStart を ? ToIntegerOrInfinity(start) とする。
  5. relativeStart = -∞ の場合、startIndex を 0 とする。
  6. そうでなく relativeStart < 0 の場合、startIndexmax(srcArrayLength + relativeStart, 0) とする。
  7. それ以外の場合、startIndexmin(relativeStart, srcArrayLength) とする。
  8. endundefined の場合、relativeEndsrcArrayLength とする。そうでない場合、relativeEnd を ? ToIntegerOrInfinity(end) とする。
  9. relativeEnd = -∞ の場合、endIndex を 0 とする。
  10. そうでなく relativeEnd < 0 の場合、endIndexmax(srcArrayLength + relativeEnd, 0) とする。
  11. それ以外の場合、endIndexmin(relativeEnd, srcArrayLength) とする。
  12. countBytesmax(endIndex - startIndex, 0) とする。
  13. resultArray を ? TypedArraySpeciesCreate(obj, « 𝔽(countBytes) ») とする。
  14. countBytes > 0 の場合、次を行う:
    1. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) に設定する。
    2. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
    3. endIndexmin(endIndex, TypedArrayLength(taRecord)) に設定する。
    4. countBytesmax(endIndex - startIndex, 0) に設定する。
    5. srcTypeTypedArrayElementType(obj) とする。
    6. targetTypeTypedArrayElementType(resultArray) とする。
    7. srcTypetargetType である場合、次を行う:
      1. NOTE: 転送は、ソースデータのビットレベル符号化を保持する方法で実行されなければならない。
      2. srcBufferobj.[[ViewedArrayBuffer]] とする。
      3. targetBufferresultArray.[[ViewedArrayBuffer]] とする。
      4. elementSizeTypedArrayElementSize(obj) とする。
      5. srcByteOffsetobj.[[ByteOffset]] とする。
      6. srcByteIndex を (startIndex × elementSize) + srcByteOffset とする。
      7. targetByteIndexresultArray.[[ByteOffset]] とする。
      8. endByteIndextargetByteIndex + (countBytes × elementSize) とする。
      9. targetByteIndex < endByteIndex の間、繰り返す:
        1. valueGetValueFromBuffer(srcBuffer, srcByteIndex, uint8, true, unordered) とする。
        2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) を実行する。
        3. srcByteIndexsrcByteIndex + 1 に設定する。
        4. targetByteIndextargetByteIndex + 1 に設定する。
    8. それ以外の場合、
      1. n を 0 とする。
      2. kstartIndex とする。
      3. k < endIndex の間、繰り返す:
        1. propertyKey を ! ToString(𝔽(k)) とする。
        2. kValue を ! Get(obj, propertyKey) とする。
        3. Set(resultArray, ! ToString(𝔽(n)), kValue, true) を実行する。
        4. kk + 1 に設定する。
        5. nn + 1 に設定する。
  15. resultArray を返す。

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

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

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. IsCallable(callback) が false の場合、TypeError 例外をスローする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValue を ! Get(obj, propertyKey) とする。
    3. testResultToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) とする。
    4. testResulttrue の場合、true を返す。
    5. kk + 1 に設定する。
  7. false を返す。

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

23.2.3.29 %TypedArray%.prototype.sort ( comparator )

これは、以下に記述される場合を除き、23.1.3.30 で定義される Array.prototype.sort の要件と同じ要件を実装する個別のメソッドです。このメソッドの実装は、this値が固定長を持ち、その整数インデックス付きプロパティが疎でないオブジェクトであるという知識によって最適化されてもよいです。

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

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

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

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

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

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

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

  1. objthis値とする。
  2. RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] 内部スロットを持つ。
  4. bufferobj.[[ViewedArrayBuffer]] とする。
  5. srcRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) とする。
  6. IsTypedArrayOutOfBounds(srcRecord) が true の場合、次を行う:
    1. srcLength を 0 とする。
  7. それ以外の場合、
    1. srcLengthTypedArrayLength(srcRecord) とする。
  8. relativeStart を ? ToIntegerOrInfinity(start) とする。
  9. relativeStart = -∞ の場合、startIndex を 0 とする。
  10. そうでなく relativeStart < 0 の場合、startIndexmax(srcLength + relativeStart, 0) とする。
  11. それ以外の場合、startIndexmin(relativeStart, srcLength) とする。
  12. elementSizeTypedArrayElementSize(obj) とする。
  13. srcByteOffsetobj.[[ByteOffset]] とする。
  14. beginByteOffsetsrcByteOffset + (startIndex × elementSize) とする。
  15. obj.[[ArrayLength]]auto かつ endundefined の場合、次を行う:
    1. argumentsList を « buffer, 𝔽(beginByteOffset) » とする。
  16. それ以外の場合、
    1. endundefined の場合、relativeEndsrcLength とする。そうでない場合、relativeEnd を ? ToIntegerOrInfinity(end) とする。
    2. relativeEnd = -∞ の場合、endIndex を 0 とする。
    3. そうでなく relativeEnd < 0 の場合、endIndexmax(srcLength + relativeEnd, 0) とする。
    4. それ以外の場合、endIndexmin(relativeEnd, srcLength) とする。
    5. newLengthmax(endIndex - startIndex, 0) とする。
    6. argumentsList を « buffer, 𝔽(beginByteOffset), 𝔽(newLength) » とする。
  17. TypedArraySpeciesCreate(obj, argumentsList) を返す。

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

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

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

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

Note

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

23.2.3.32 %TypedArray%.prototype.toReversed ( )

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. resultArray を ? TypedArrayCreateSameType(obj, len) とする。
  5. k を 0 とする。
  6. k < len の間、繰り返す:
    1. from を ! ToString(𝔽(len - k - 1)) とする。
    2. propertyKey を ! ToString(𝔽(k)) とする。
    3. fromValue を ! Get(obj, from) とする。
    4. Set(resultArray, propertyKey, fromValue, true) を実行する。
    5. kk + 1 に設定する。
  7. resultArray を返す。

23.2.3.33 %TypedArray%.prototype.toSorted ( comparator )

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

  1. comparatorundefined でなく、かつ IsCallable(comparator) が false の場合、TypeError 例外をスローする。
  2. objthis値とする。
  3. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  4. lenTypedArrayLength(taRecord) とする。
  5. resultArray を ? TypedArrayCreateSameType(obj, len) とする。
  6. NOTE: 次のclosureは、23.1.3.34 で使用される文字列比較ではなく数値比較を実行する。
  7. sortCompare を、comparator を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (x, y) を持つ新しいAbstract Closureとする:
    1. CompareTypedArrayElements(x, y, comparator) を返す。
  8. sortedList を ? SortIndexedProperties(obj, len, sortCompare, read-through-holes) とする。
  9. j を 0 とする。
  10. j < len の間、繰り返す:
    1. Set(resultArray, ! ToString(𝔽(j)), sortedList[j], true) を実行する。
    2. jj + 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. objthis値とする。
  2. ValidateTypedArray(obj, seq-cst) を実行する。
  3. CreateArrayIterator(obj, value) を返す。

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

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

  1. objthis値とする。
  2. taRecord を ? ValidateTypedArray(obj, seq-cst) とする。
  3. lenTypedArrayLength(taRecord) とする。
  4. relativeIndex を ? ToIntegerOrInfinity(index) とする。
  5. relativeIndex ≥ 0 の場合、actualIndexrelativeIndex とする。
  6. それ以外の場合、actualIndexlen + relativeIndex とする。
  7. obj.[[ContentType]]bigint である場合、numericValue を ? ToBigInt(value) とする。
  8. それ以外の場合、numericValue を ? ToNumber(value) とする。
  9. IsValidIntegerIndex(obj, 𝔽(actualIndex)) が false の場合、RangeError 例外をスローする。
  10. resultArray を ? TypedArrayCreateSameType(obj, len) とする。
  11. k を 0 とする。
  12. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. k = actualIndex の場合、fromValuenumericValue とする。
    3. それ以外の場合、fromValue を ! Get(obj, propertyKey) とする。
    4. Set(resultArray, propertyKey, fromValue, true) を実行する。
    5. kk + 1 に設定する。
  13. 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. objthis値とする。
  2. obj がObjectでない場合、undefined を返す。
  3. obj[[TypedArrayName]] 内部スロットを持たない場合、undefined を返す。
  4. nameobj.[[TypedArrayName]] とする。
  5. Assert: name はStringである。
  6. name を返す。

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

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

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

23.2.4.1 TypedArrayCreateFromConstructor ( constructor, argumentList )

The abstract operation TypedArrayCreateFromConstructor takes arguments constructor (コンストラクター) and argumentList (ECMAScript言語値のList) and returns TypedArrayを含む正常完了またはスロー完了のいずれか. これは、コンストラクター関数を使用した新しいTypedArrayの作成を指定するために使用されます。 It performs the following steps when called:

  1. newTypedArray を ? Construct(constructor, argumentList) とする。
  2. taRecord を ? ValidateTypedArray(newTypedArray, seq-cst) とする。
  3. Assert: newTypedArrayTypedArray インスタンスのプロパティ で言及されるすべての内部スロットを持つ。
  4. argumentList 内の要素数が1であり、argumentList[0] がNumberである場合、次を行う:
    1. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
    2. lengthTypedArrayLength(taRecord) とする。
    3. length < (argumentList[0]) の場合、TypeError 例外をスローする。
  5. newTypedArray を返す。

23.2.4.2 TypedArrayCreateSameType ( exemplar, length )

The abstract operation TypedArrayCreateSameType takes arguments exemplar (TypedArray) and length (非負整数) and returns TypedArrayを含む正常完了またはスロー完了のいずれか. これは、exemplar から派生したコンストラクター関数を使用した新しいTypedArrayの作成を指定するために使用されます。%Symbol.species% の使用を通じてカスタムTypedArrayサブクラスを構築できるTypedArraySpeciesCreateとは異なり、この操作は常に組み込みTypedArrayコンストラクターの1つを使用します。 It performs the following steps when called:

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

23.2.4.3 TypedArraySpeciesCreate ( exemplar, argumentList )

The abstract operation TypedArraySpeciesCreate takes arguments exemplar (TypedArray) and argumentList (ECMAScript言語値のList) and returns TypedArrayを含む正常完了またはスロー完了のいずれか. これは、exemplar から派生したコンストラクター関数を使用した新しいTypedArrayの作成を指定するために使用されます。%Symbol.species% の使用を通じて非Arrayオブジェクトを作成できるArraySpeciesCreateとは異なり、この操作は、コンストラクター関数が実際のTypedArrayを作成することを強制します。 It performs the following steps when called:

  1. defaultConstructor を、Table 70 内のコンストラクター名 exemplar.[[TypedArrayName]] に関連付けられたintrinsicオブジェクトとする。
  2. constructor を ? SpeciesConstructor(exemplar, defaultConstructor) とする。
  3. result を ? TypedArrayCreateFromConstructor(constructor, argumentList) とする。
  4. result.[[ContentType]]exemplar.[[ContentType]] でない場合、TypeError 例外をスローする。
  5. result を返す。

23.2.4.4 ValidateTypedArray ( obj, order )

The abstract operation ValidateTypedArray takes arguments obj (ECMAScript言語値) and order (seq-cst または unordered) and returns TypedArray With Buffer Witness Recordを含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. RequireInternalSlot(obj, [[TypedArrayName]]) を実行する。
  2. Assert: obj[[ViewedArrayBuffer]] 内部スロットを持つ。
  3. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, order) とする。
  4. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
  5. taRecord を返す。

23.2.4.5 TypedArrayElementSize ( obj )

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

  1. obj.[[TypedArrayName]] について Table 70 に指定されたElement Size値を返す。

23.2.4.6 TypedArrayElementType ( obj )

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

  1. obj.[[TypedArrayName]] について Table 70 に指定されたElement Type値を返す。

23.2.4.7 CompareTypedArrayElements ( x, y, comparator )

The abstract operation CompareTypedArrayElements takes arguments x (NumberまたはBigInt), y (NumberまたはBigInt), and comparator (関数オブジェクトまたはundefined) and returns Numberを含む正常完了または急な完了のいずれか. It performs the following steps when called:

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

23.2.5 TypedArray コンストラクター

TypedArray コンストラクターは以下の通りです:

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

23.2.5.1 TypedArray ( ...args )

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

  1. NewTarget が undefined の場合、TypeError 例外をスローする。
  2. constructorName を、このTypedArrayコンストラクターについて Table 70 に指定されたConstructor Name値のString値とする。
  3. proto"%TypedArray.prototype%" とする。
  4. numberOfArgsargs 内の要素数とする。
  5. numberOfArgs = 0 の場合、? AllocateTypedArray(constructorName, NewTarget, proto, 0) を返す。
  6. firstArgumentargs[0] とする。
  7. firstArgument がObjectである場合、次を行う:
    1. obj を ? AllocateTypedArray(constructorName, NewTarget, proto) とする。
    2. firstArgument[[TypedArrayName]] 内部スロットを持つ場合、次を行う:
      1. InitializeTypedArrayFromTypedArray(obj, firstArgument) を実行する。
    3. そうでなく firstArgument[[ArrayBufferData]] 内部スロットを持つ場合、次を行う:
      1. numberOfArgs > 1 の場合、byteOffsetargs[1] とする。そうでない場合、byteOffsetundefined とする。
      2. numberOfArgs > 2 の場合、lengthargs[2] とする。そうでない場合、lengthundefined とする。
      3. InitializeTypedArrayFromArrayBuffer(obj, firstArgument, byteOffset, length) を実行する。
    4. それ以外の場合、
      1. Assert: firstArgument はObjectであり、firstArgument[[TypedArrayName]] または [[ArrayBufferData]] 内部スロットのいずれも持たない。
      2. usingIterator を ? GetMethod(firstArgument, %Symbol.iterator%) とする。
      3. usingIteratorundefined でない場合、次を行う:
        1. values を ? IteratorToList(? GetIteratorFromMethod(firstArgument, usingIterator)) とする。
        2. InitializeTypedArrayFromList(obj, values) を実行する。
      4. それ以外の場合、
        1. NOTE: firstArgumentiterable objectではないため、すでにarray-like objectであると仮定する。
        2. InitializeTypedArrayFromArrayLike(obj, firstArgument) を実行する。
    5. obj を返す。
  8. Assert: firstArgument はObjectでない。
  9. elementLength を ? ToIndex(firstArgument) とする。
  10. AllocateTypedArray(constructorName, NewTarget, proto, elementLength) を返す。

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

The abstract operation AllocateTypedArray takes arguments constructorName (Table 70 内のTypedArrayコンストラクターの名前であるString), newTarget (コンストラクター), and defaultProto (String) and optional argument length (非負整数) and returns TypedArrayを含む正常完了またはスロー完了のいずれか. これは、TypedArrayコンストラクターのインスタンスを検証し作成するために使用されます。length 引数が渡された場合、その長さのArrayBufferも割り当てられ、新しいTypedArrayインスタンスに関連付けられます。AllocateTypedArrayは、TypedArray によって使用される共通の意味論を提供します。 It performs the following steps when called:

  1. proto を ? GetPrototypeFromConstructor(newTarget, defaultProto) とする。
  2. objTypedArrayCreate(proto) とする。
  3. Assert: obj.[[ViewedArrayBuffer]]undefined である。
  4. obj.[[TypedArrayName]]constructorName に設定する。
  5. constructorName"BigInt64Array" または "BigUint64Array" のいずれかである場合、obj.[[ContentType]]bigint に設定する。
  6. それ以外の場合、obj.[[ContentType]]number に設定する。
  7. length が存在しない場合、次を行う:
    1. obj.[[ByteLength]] を 0 に設定する。
    2. obj.[[ByteOffset]] を 0 に設定する。
    3. obj.[[ArrayLength]] を 0 に設定する。
  8. それ以外の場合、
    1. AllocateTypedArrayBuffer(obj, length) を実行する。
  9. obj を返す。

23.2.5.1.2 InitializeTypedArrayFromTypedArray ( obj, srcArray )

The abstract operation InitializeTypedArrayFromTypedArray takes arguments obj (TypedArray) and srcArray (TypedArray) and returns unused を含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. srcDatasrcArray.[[ViewedArrayBuffer]] とする。
  2. elementTypeTypedArrayElementType(obj) とする。
  3. elementSizeTypedArrayElementSize(obj) とする。
  4. srcTypeTypedArrayElementType(srcArray) とする。
  5. srcElementSizeTypedArrayElementSize(srcArray) とする。
  6. srcByteOffsetsrcArray.[[ByteOffset]] とする。
  7. srcRecordMakeTypedArrayWithBufferWitnessRecord(srcArray, seq-cst) とする。
  8. IsTypedArrayOutOfBounds(srcRecord) が true の場合、TypeError 例外をスローする。
  9. elementLengthTypedArrayLength(srcRecord) とする。
  10. byteLengthelementSize × elementLength とする。
  11. elementTypesrcType である場合、次を行う:
    1. data を ? CloneArrayBuffer(srcData, srcByteOffset, byteLength) とする。
  12. それ以外の場合、
    1. data を ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) とする。
    2. srcArray.[[ContentType]]obj.[[ContentType]] でない場合、TypeError 例外をスローする。
    3. srcByteIndexsrcByteOffset とする。
    4. targetByteIndex を 0 とする。
    5. countelementLength とする。
    6. count > 0 の間、繰り返す:
      1. valueGetValueFromBuffer(srcData, srcByteIndex, srcType, true, unordered) とする。
      2. SetValueInBuffer(data, targetByteIndex, elementType, value, true, unordered) を実行する。
      3. srcByteIndexsrcByteIndex + srcElementSize に設定する。
      4. targetByteIndextargetByteIndex + elementSize に設定する。
      5. countcount - 1 に設定する。
  13. obj.[[ViewedArrayBuffer]]data に設定する。
  14. obj.[[ByteLength]]byteLength に設定する。
  15. obj.[[ByteOffset]] を 0 に設定する。
  16. obj.[[ArrayLength]]elementLength に設定する。
  17. unused を返す。

23.2.5.1.3 InitializeTypedArrayFromArrayBuffer ( obj, buffer, byteOffset, length )

The abstract operation InitializeTypedArrayFromArrayBuffer takes arguments obj (TypedArray), buffer (ArrayBufferまたはSharedArrayBuffer), byteOffset (ECMAScript言語値), and length (ECMAScript言語値) and returns unused を含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. elementSizeTypedArrayElementSize(obj) とする。
  2. offset を ? ToIndex(byteOffset) とする。
  3. offset modulo elementSize ≠ 0 の場合、RangeError 例外をスローする。
  4. bufferIsFixedLengthIsFixedLengthArrayBuffer(buffer) とする。
  5. lengthundefined でない場合、次を行う:
    1. newLength を ? ToIndex(length) とする。
  6. IsDetachedBuffer(buffer) が true の場合、TypeError 例外をスローする。
  7. bufferByteLengthArrayBufferByteLength(buffer, seq-cst) とする。
  8. lengthundefined かつ bufferIsFixedLengthfalse の場合、次を行う:
    1. offset > bufferByteLength の場合、RangeError 例外をスローする。
    2. obj.[[ByteLength]]auto に設定する。
    3. obj.[[ArrayLength]]auto に設定する。
  9. それ以外の場合、
    1. lengthundefined の場合、次を行う:
      1. bufferByteLength modulo elementSize ≠ 0 の場合、RangeError 例外をスローする。
      2. newByteLengthbufferByteLength - offset とする。
      3. newByteLength < 0 の場合、RangeError 例外をスローする。
    2. それ以外の場合、
      1. newByteLengthnewLength × 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 )

The abstract operation InitializeTypedArrayFromList takes arguments obj (TypedArray) and values (ECMAScript言語値のList) and returns unused を含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. lenvalues 内の要素数とする。
  2. AllocateTypedArrayBuffer(obj, len) を実行する。
  3. k を 0 とする。
  4. k < len の間、繰り返す:
    1. propertyKey を ! ToString(𝔽(k)) とする。
    2. kValuevalues の最初の要素とする。
    3. values から最初の要素を除去する。
    4. Set(obj, propertyKey, kValue, true) を実行する。
    5. kk + 1 に設定する。
  5. Assert: values は今や空のListである。
  6. unused を返す。

23.2.5.1.5 InitializeTypedArrayFromArrayLike ( obj, arrayLike )

The abstract operation InitializeTypedArrayFromArrayLike takes arguments obj (TypedArray) and arrayLike (Object、ただしTypedArrayでもArrayBufferでもない) and returns unused を含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

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

23.2.5.1.6 AllocateTypedArrayBuffer ( obj, length )

The abstract operation AllocateTypedArrayBuffer takes arguments obj (TypedArray) and length (非負整数) and returns unused を含む正常完了またはスロー完了のいずれか. これはArrayBufferを割り当て、obj に関連付けます。 It performs the following steps when called:

  1. Assert: obj.[[ViewedArrayBuffer]]undefined である。
  2. elementSizeTypedArrayElementSize(obj) とする。
  3. byteLengthelementSize × 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 コンストラクターは以下の通りです:

  • [[Prototype]]内部スロットを持ち、その値は %TypedArray% である。
  • 値が 3𝔽 である"length"プロパティを持つ。
  • 値が Table 70 でそれについて指定されたコンストラクター名のString値である"name"プロパティを持つ。
  • 以下のプロパティを持つ:

23.2.6.1 TypedArray.BYTES_PER_ELEMENT

TypedArray.BYTES_PER_ELEMENTの値は、Table 70 において TypedArray について指定されたElement Size値です。

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

23.2.6.2 TypedArray.prototype

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

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

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

TypedArray プロトタイプオブジェクトは以下の通りです:

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

23.2.7.1 TypedArray.prototype.BYTES_PER_ELEMENT

TypedArray.prototype.BYTES_PER_ELEMENTの値は、Table 70 において TypedArray について指定されたElement Size値です。

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

23.2.7.2 TypedArray.prototype.constructor

所与の TypedArray コンストラクターのプロトタイプの"constructor"プロパティの初期値は、そのコンストラクター自体です。

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

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

23.3 Uint8Arrayオブジェクト

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

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

23.3.1.1 Uint8Array.fromBase64 ( string [ , options ] )

  1. string がStringでない場合、TypeError 例外をスローする。
  2. opts を ? GetOptionsObject(options) とする。
  3. alphabet を ? Get(opts, "alphabet") とする。
  4. alphabetundefined の場合、alphabet"base64" に設定する。
  5. alphabet"base64""base64url" のいずれでもない場合、TypeError 例外をスローする。
  6. lastChunkHandling を ? Get(opts, "lastChunkHandling") とする。
  7. lastChunkHandlingundefined の場合、lastChunkHandling"loose" に設定する。
  8. lastChunkHandling"loose""strict"、または "stop-before-partial" のいずれでもない場合、TypeError 例外をスローする。
  9. resultFromBase64(string, alphabet, lastChunkHandling) とする。
  10. result.[[Error]]none でない場合、次を行う:
    1. result.[[Error]] をスローする。
  11. resultLengthresult.[[Bytes]] 内の要素数とする。
  12. ta を ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) とする。
  13. Assert: 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. resultFromHex(string) とする。
  3. result.[[Error]]none でない場合、次を行う:
    1. result.[[Error]] をスローする。
  4. resultLengthresult.[[Bytes]] 内の要素数とする。
  5. ta を ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) とする。
  6. Assert: ta.[[ViewedArrayBuffer]].[[ArrayBufferByteLength]]result.[[Bytes]] 内の要素数である。
  7. ta.[[ViewedArrayBuffer]].[[ArrayBufferData]] の各インデックスの値を、result.[[Bytes]] の対応するインデックスの値に設定する。
  8. ta を返す。

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

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

  1. intothis値とする。
  2. ValidateUint8Array(into) を実行する。
  3. string がStringでない場合、TypeError 例外をスローする。
  4. opts を ? GetOptionsObject(options) とする。
  5. alphabet を ? Get(opts, "alphabet") とする。
  6. alphabetundefined の場合、alphabet"base64" に設定する。
  7. alphabet"base64""base64url" のいずれでもない場合、TypeError 例外をスローする。
  8. lastChunkHandling を ? Get(opts, "lastChunkHandling") とする。
  9. lastChunkHandlingundefined の場合、lastChunkHandling"loose" に設定する。
  10. lastChunkHandling"loose""strict"、または "stop-before-partial" のいずれでもない場合、TypeError 例外をスローする。
  11. taRecordMakeTypedArrayWithBufferWitnessRecord(into, seq-cst) とする。
  12. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
  13. byteLengthTypedArrayLength(taRecord) とする。
  14. resultFromBase64(string, alphabet, lastChunkHandling, byteLength) とする。
  15. bytesresult.[[Bytes]] とする。
  16. writtenbytes 内の要素数とする。
  17. NOTE: FromBase64はユーザーコードを起動しないため、into を支えるArrayBufferがデタッチまたは縮小されていることはあり得ない。
  18. Assert: writtenbyteLength
  19. SetUint8ArrayBytes(into, bytes) を実行する。
  20. result.[[Error]]none でない場合、次を行う:
    1. result.[[Error]] をスローする。
  21. resultObjectOrdinaryObjectCreate(%Object.prototype%) とする。
  22. CreateDataPropertyOrThrow(resultObject, "read", 𝔽(result.[[Read]])) を実行する。
  23. CreateDataPropertyOrThrow(resultObject, "written", 𝔽(written)) を実行する。
  24. resultObject を返す。

23.3.2.2 Uint8Array.prototype.setFromHex ( string )

  1. intothis値とする。
  2. ValidateUint8Array(into) を実行する。
  3. string がStringでない場合、TypeError 例外をスローする。
  4. taRecordMakeTypedArrayWithBufferWitnessRecord(into, seq-cst) とする。
  5. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
  6. byteLengthTypedArrayLength(taRecord) とする。
  7. resultFromHex(string, byteLength) とする。
  8. bytesresult.[[Bytes]] とする。
  9. writtenbytes 内の要素数とする。
  10. NOTE: FromHexはユーザーコードを起動しないため、into を支えるArrayBufferがデタッチまたは縮小されていることはあり得ない。
  11. Assert: writtenbyteLength
  12. SetUint8ArrayBytes(into, bytes) を実行する。
  13. result.[[Error]]none でない場合、次を行う:
    1. result.[[Error]] をスローする。
  14. resultObjectOrdinaryObjectCreate(%Object.prototype%) とする。
  15. CreateDataPropertyOrThrow(resultObject, "read", 𝔽(result.[[Read]])) を実行する。
  16. CreateDataPropertyOrThrow(resultObject, "written", 𝔽(written)) を実行する。
  17. resultObject を返す。

23.3.2.3 Uint8Array.prototype.toBase64 ( [ options ] )

  1. objthis値とする。
  2. ValidateUint8Array(obj) を実行する。
  3. opts を ? GetOptionsObject(options) とする。
  4. alphabet を ? Get(opts, "alphabet") とする。
  5. alphabetundefined の場合、alphabet"base64" に設定する。
  6. alphabet"base64""base64url" のいずれでもない場合、TypeError 例外をスローする。
  7. omitPaddingToBoolean(? Get(opts, "omitPadding")) とない場合、TypeError 例外をスローする。
  8. omitPaddingToBoolean(? Get(opts, *する。
  9. toEncode を ? GetUint8ArrayBytes(obj) とする。
  10. alphabet"base64" である場合、次を行う:
    1. outAscii を、RFC 4648 のsection 4に指定されるbase64符号化に従って toEncode を符号化した結果として得られるコードポイント列とする。パディングは omitPaddingfalse である場合に限り含まれる。
  11. それ以外の場合、
    1. Assert: alphabet"base64url" である。
    2. outAscii を、RFC 4648 のsection 5に指定されるbase64url符号化に従って toEncode を符号化した結果として得られるコードポイント列とする。パディングは omitPaddingfalse である場合に限り含まれる。
  12. CodePointsToString(outAscii) を返す。

23.3.2.4 Uint8Array.prototype.toHex ( )

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

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

23.3.3.1 ValidateUint8Array ( ta )

The abstract operation ValidateUint8Array takes argument ta (ECMAScript言語値) and returns unused を含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

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

23.3.3.2 GetUint8ArrayBytes ( ta )

The abstract operation GetUint8ArrayBytes takes argument ta (Uint8Array) and returns byte値のListを含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. bufferta.[[ViewedArrayBuffer]] とする。
  2. taRecordMakeTypedArrayWithBufferWitnessRecord(ta, seq-cst) とする。
  3. IsTypedArrayOutOfBounds(taRecord) が true の場合、TypeError 例外をスローする。
  4. lenTypedArrayLength(taRecord) とする。
  5. byteOffsetta.[[ByteOffset]] とする。
  6. bytes を新しい空のListとする。
  7. index を 0 とする。
  8. index < len の間、繰り返す:
    1. byteIndexbyteOffset + index とする。
    2. byte(GetValueFromBuffer(buffer, byteIndex, uint8, true, unordered)) とする。
    3. bytebytes に追加する。
    4. indexindex + 1 に設定する。
  9. bytes を返す。

23.3.3.3 SetUint8ArrayBytes ( into, bytes )

The abstract operation SetUint8ArrayBytes takes arguments into (Uint8Array) and bytes (byte値のList) and returns unused. It performs the following steps when called:

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

23.3.3.4 SkipAsciiWhitespace ( string, index )

The abstract operation SkipAsciiWhitespace takes arguments string (String) and index (非負整数) and returns 非負整数. It performs the following steps when called:

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

23.3.3.5 DecodeFinalBase64Chunk ( chunk, throwOnExtraBits )

The abstract operation DecodeFinalBase64Chunk takes arguments chunk (長さ2または3のString) and throwOnExtraBits (Boolean) and returns byte値のListを含む正常完了、またはスロー完了のいずれか. It performs the following steps when called:

  1. chunkLengthchunk の長さとする。
  2. chunkLength = 2 の場合、次を行う:
    1. chunkchunk"AA" の文字列連結に設定する。
  3. それ以外の場合、
    1. Assert: chunkLength は 3 である。
    2. chunkchunk"A" の文字列連結に設定する。
  4. bytesDecodeFullLengthBase64Chunk(chunk) とする。
  5. chunkLength = 2 の場合、次を行う:
    1. throwOnExtraBitstrue かつ bytes[1] ≠ 0 の場合、SyntaxError 例外をスローする。
    2. « bytes[0] » を返す。
  6. throwOnExtraBitstrue かつ bytes[2] ≠ 0 の場合、SyntaxError 例外をスローする。
  7. « bytes[0], bytes[1] » を返す。

23.3.3.6 DecodeFullLengthBase64Chunk ( chunk )

The abstract operation DecodeFullLengthBase64Chunk takes argument chunk (長さ4のString) and returns 長さ3のbyte値のList.

標準base64アルファベット"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" です。すなわち、Unicode Basic Latinブロック内のすべての文字と数字に対応するコード単位、および "+""/" を要素とするStringです。

  1. byteSequence を、chunk をbase64として復号した結果として得られる一意な3バイトの列(すなわち、RFC 4648 のsection 4で指定されるbase64符号化を byteSequence に適用すると chunk が生成されるような列)とする。
  2. byteSequence の要素を順番に要素とするListを返す。

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

The abstract operation FromBase64 takes arguments string (String), alphabet ("base64" または "base64url"), and lastChunkHandling ("loose""strict"、または "stop-before-partial") and optional argument maxLength (非負整数) and returns フィールド [[Read]](整数)、[[Bytes]](byte値のList)、および [[Error]]SyntaxError オブジェクトまたは none)を持つRecord. It performs the following steps when called:

  1. maxLength が存在しない場合、次を行う:
    1. maxLength を 253 - 1 に設定する。
    2. NOTE: 入力はStringであるため、Stringの長さは253 - 1文字に制限され、出力は入力が持つ文字数を超えるバイトを必要としないので、この制限に到達することは決してない。しかし、有限値を使用することは編集上便利である。
  2. NOTE: 下のアルゴリズムにおける検証と復号の順序は観察可能ではない。実装は、最も効率的な任意の順序でそれらを実行することが推奨され、検証と復号を交互に行ってもよい。
  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. lengthstring の長さとする。
  10. 繰り返す:
    1. indexSkipAsciiWhitespace(string, index) に設定する。
    2. 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. Assert: lastChunkHandling"loose" である。
        4. chunkLength = 1 の場合、次を行う:
          1. error を新しく作成された SyntaxError オブジェクトとする。
          2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
        5. bytesbytes と ! DecodeFinalBase64Chunk(chunk, false) のリスト連結に設定する。
      2. Record { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none } を返す。
    3. charstringindex から index + 1 までの部分文字列とする。
    4. indexindex + 1 に設定する。
    5. char"=" である場合、次を行う:
      1. chunkLength < 2 の場合、次を行う:
        1. error を新しく作成された SyntaxError オブジェクトとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      2. indexSkipAsciiWhitespace(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. charstringindex から index + 1 までの部分文字列に設定する。
        3. char"=" である場合、次を行う:
          1. indexSkipAsciiWhitespace(string, index + 1) に設定する。
      4. index < length の場合、次を行う:
        1. error を新しく作成された SyntaxError オブジェクトとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      5. lastChunkHandling"strict" である場合、throwOnExtraBitstrue とする。そうでない場合、throwOnExtraBitsfalse とする。
      6. decodeResultCompletion(DecodeFinalBase64Chunk(chunk, throwOnExtraBits)) とする。
      7. decodeResult が急な完了である場合、次を行う:
        1. errordecodeResult.[[Value]] とする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      8. bytesbytes と ! decodeResult のリスト連結に設定する。
      9. Record { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none } を返す。
    6. alphabet"base64url" である場合、次を行う:
      1. char"+" または "/" のいずれかである場合、次を行う:
        1. error を新しく作成された SyntaxError オブジェクトとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
      2. そうでなく char"-" である場合、次を行う:
        1. char"+" に設定する。
      3. そうでなく char"_" である場合、次を行う:
        1. char"/" に設定する。
    7. char の唯一のコード単位が標準base64アルファベットの要素でない場合、次を行う:
      1. error を新しく作成された SyntaxError オブジェクトとする。
      2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
    8. remainingmaxLength - bytes 内の要素数とする。
    9. remaining = 1 かつ chunkLength = 2 の場合、または remaining = 2 かつ chunkLength = 3 の場合、次を行う:
      1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。
    10. chunkchunkchar の文字列連結に設定する。
    11. chunkLengthchunk の長さに設定する。
    12. chunkLength = 4 の場合、次を行う:
      1. bytesbytesDecodeFullLengthBase64Chunk(chunk) のリスト連結に設定する。
      2. chunk を空のStringに設定する。
      3. chunkLength を 0 に設定する。
      4. readindex に設定する。
      5. bytes 内の要素数 = maxLength の場合、次を行う:
        1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。

23.3.3.8 FromHex ( string [ , maxLength ] )

The abstract operation FromHex takes argument string (String) and optional argument maxLength (非負整数) and returns フィールド [[Read]](整数)、[[Bytes]](byte値のList)、および [[Error]]SyntaxError オブジェクトまたは none)を持つRecord. It performs the following steps when called:

  1. maxLength が存在しない場合、maxLength を 253 - 1 に設定する。
  2. lengthstring の長さとする。
  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. hexitsstringread から read + 2 までの部分文字列とする。
    2. hexits"0123456789abcdefABCDEF" 内にないコード単位を含む場合、次を行う:
      1. error を新しく作成された SyntaxError オブジェクトとする。
      2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } を返す。
    3. readread + 2 に設定する。
    4. byte を、値10から15の数字に A から F および a から f の文字を使用する16進表記で hexits によって表される整数値とする。
    5. bytebytes に追加する。
  7. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } を返す。