このページはECMAScript® 2020 Language Specification22 Indexed Collections章をJavaScriptの学習目的で私的に日本語訳したものであり、直訳と意訳および推測が混在しています。そのため内容については正確ではない可能性があります。正確な情報を知りたい場合は、原文をご覧ください。また一部訳者によるコメントが含まれていることがあります。※このサイトの内容で損害や不利益を受けたとしても当方は一切の責任を負いません。

22.1 Arrayオブジェクト(Array Objects)

Arrayオブジェクトは、特定のクラスのプロパティ名に特別な処理を与えるエキゾチックなオブジェクトです。 この特別な扱いの定義については、9.4.2を参照してください。

22.1.1 Arrayコンストラクター(The Array Constructor)

Arrayコンストラクターは、次の特徴があります。

  • 組み込みオブジェクト%Array%です。
  • グローバルオブジェクト"Array"プロパティの初期値です。
  • コンストラクターとして呼び出されると、新しいArrayエキゾチックオブジェクトを作成して初期化します。
  • 関数として呼び出されると、新しいArrayオブジェクトを作成して初期化します。したがって、関数呼び出しArray(…)は、同じ引数を持つオブジェクト作成式new Array(…)と同等です。
  • 引数の数とタイプに基づいて動作がオーバーロードされる単一の関数です。
  • サブクラス化できるように設計されています。クラス定義のextends句の値として使用できます。サブクラスコンストラクターには、superコールを含める必要があります。ただし、ほとんどのArray.prototypeメソッドは、this値がArrayエキゾチックオブジェクトであることに依存しない汎用メソッドです。
  • 値が1の"length"プロパティがあります。

22.1.1.1 Array ( )

この説明は、Arrayコンストラクターが引数なしで呼び出された場合にのみ適用されます。

  1. 引数の数を numberOfArgs とする
  2. Assert: numberOfArgs = 0
  3. NewTargetundefined なら、 アクティブ関数オブジェクト を、異なるなら NewTargetnewTarget とする
  4. ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") を proto とする
  5. ! ArrayCreate(0, proto) を返す

22.1.1.2 Array ( len )

この説明は、Arrayコンストラクターが1つの引数で呼び出された場合にのみ適用されます。

  1. 引数の数を numberOfArgs とする
  2. Assert: numberOfArgs = 1
  3. NewTargetundefined なら、 アクティブ関数オブジェクト を、異なるなら NewTargetnewTarget とする
  4. ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") を proto とする
  5. ! ArrayCreate(0, proto) を array とする
  6. Type(len) が Number型 でないなら、
    1. ! CreateDataPropertyOrThrow(array, "0", len) を実行する
    2. 1 を intLen とする
  7. 6. と異なるなら、
    1. ToUint32(len) を intLen とする
    2. intLenlen なら RangeError例外をスローする
  8. ! Set(array, "length", intLen, true) を実行する
  9. array を返す

22.1.1.3 Array ( ...items )

この説明は、Arrayコンストラクターが2つ以上の引数で呼び出された場合にのみ適用されます。

Array関数が呼び出されると、次の手順が実行されます。

  1. 引数の数を numberOfArgs とする
  2. Assert: numberOfArgs ≧ 2
  3. NewTargetundefined なら、 アクティブ関数オブジェクト を、異なるなら NewTargetnewTarget とする
  4. ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") を proto とする
  5. ? ArrayCreate(numberOfArgs, proto) を array とする
  6. 0 を k とする
  7. 引数の項目を順番に含むゼロから始まるリストを items とする
  8. knumberOfArgs の間繰り返し
    1. ! ToString(k) を Pk とする
    2. items[k] を itemK とする
    3. ! CreateDataPropertyOrThrow(array, Pk, itemK) を実行する
    4. k + 1 を k にセットする
  9. Assert: array"length" プロパティは numberOfArgs
  10. array を返す

22.1.2 Arrayコンストラクターのプロパティ(Properties of the Array Constructor)

Arrayコンストラクターは、次の特徴があります。

  • [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
  • 以下のプロパティがあります。

22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )

from が引数 items と オプション引数 mapfnthisArg で呼び出されると、次の手順が実行されます。

  1. this値 を C とする
  2. mapfnundefined なら、 falsemapping とする
  3. 2. と異なるなら、
    1. IsCallable(mapfn) が false なら、TypeError例外をスローする
    2. truemapping とする
  4. ? GetMethod(items, @@iterator) を usingIterator とする
  5. usingIteratorundefined でないなら、
    1. IsConstructor(C) が true なら、
      1. ? Construct(C) を A とする
    2. a. と異なるなら、
      1. ! ArrayCreate(0) を A とする
    3. ? GetIterator(items, sync, usingIterator) を iteratorRecord とする
    4. 0 を k とする
    5. 繰り返し
      1. k ≧ 253 - 1 なら、
        1. ThrowCompletion(新規作成した TypeError オブジェクト) を error とする
        2. ? IteratorClose(iteratorRecord, error) を返す
      2. ! ToString(k) を Pk とする
      3. ? IteratorStep(iteratorRecord) を next とする
      4. nextfalse なら、
        1. ? Set(A, "length", k, true) を実行する
        2. A を返す
      5. ? IteratorValue(next) を nextValue とする
      6. mappingtrue なら、
        1. Call(mapfn, thisArg, « nextValue, k ») を mappedValue とする
        2. mappedValue突然の完了 なら、 ? IteratorClose(iteratorRecord, mappedValue) を返す
        3. mappedValue.[[Value]] を mappedValue にセットする
      7. vi. と異なるなら、 nextValuemappedValue とする
      8. CreateDataPropertyOrThrow(A, Pk, mappedValue) を defineStatus とする
      9. defineStatus突然の完了 なら、 ? IteratorClose(iteratorRecord, defineStatus) を返す
      10. k + 1 を k にセットする
  6. NOTE: items は Iterable ではないため、arrayライクオブジェクトと想定する
  7. ! ToObject(items) を arrayLike とする
  8. ? LengthOfArrayLike(arrayLike) を len とする
  9. IsConstructor(C) が true なら、
    1. ? Construct(C, « len ») を A とする
  10. 9. と異なるなら、
    1. ? ArrayCreate(len) を A とする
  11. 0 を k とする
  12. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? Get(arrayLike, Pk) を kValue とする
    3. mappingtrue なら、
      1. ? Call(mapfn, thisArg, « kValue, k ») を mappedValue とする
    4. c. と異なるなら、 kValuemappedValue とする
    5. ? CreateDataPropertyOrThrow(A, Pk, mappedValue) を実行する
    6. k + 1 を k にセットする
  13. ? Set(A, "length", len, true) を実行する
  14. A を返す
from関数は、汎用的なファクトリメソッドです。 this値がArrayコンストラクターである必要はありません。 したがって、単一の数値引数で呼び出すことができる他のコンストラクターに転送したり、他のコンストラクターから継承したりできます。

22.1.2.2 Array.isArray ( arg )

isArray関数は1つの引数argを取り、次の手順を実行します。

  1. ? IsArray(arg) を返す

22.1.2.3 Array.of ( ...items )

ofメソッドが任意の数の引数で呼び出されると、次の手順が実行されます。

  1. 関数に渡された引数の実際の数を len とする
  2. 関数に渡された引数の Listitems とする
  3. this値 を C とする
  4. IsConstructor(C) が true なら、
    1. ? Construct(C, « len ») を A とする
  5. 4. と異なるなら、
    1. ? ArrayCreate(len) を A とする
  6. 0 を k とする
  7. klen の間繰り返し
    1. items[k] を kValue とする
    2. ! ToString(k) を Pk とする
    3. ? CreateDataPropertyOrThrow(A, Pk, kValue) を実行する
    4. k + 1 を k にセットする
  8. ? Set(A, "length", len, true) を実行する
  9. A を返す
items引数は、整形式のレスト引数値であると見なされます。
of関数は、汎用的なファクトリメソッドです。 thisの値が配列コンストラクターである必要はありません。 したがって、単一の数値引数で呼び出すことができる他のコンストラクターに転送したり、他のコンストラクターから継承したりできます。

22.1.2.4 Array.prototype

Array.prototypeの値は、組み込みのArrayプロトタイプオブジェクトである%Array.prototype%です。

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

22.1.2.5 get Array [ @@species ]

Array[@@species]はsetアクセス関数がundefinedアクセサプロパティ です。 getアクセス関数は、次の手順を実行します。

  1. this値 を返す

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

Arrayプロトタイプメソッドは通常、thisオブジェクトのコンストラクターを使用して派生オブジェクトを作成します。 ただし、サブクラスコンストラクターは、@@ speciesプロパティを再定義することでそのデフォルトの動作をオーバーライドできます。

22.1.3 Arrayプロトタイプオブジェクトのプロパティ(Properties of the Array Prototype Object)

Arrayプロトタイプオブジェクトは、次の特徴があります。

  • 組み込みオブジェクト%ArrayPrototype%です。
  • Arrayエキゾチックオブジェクト であり、指定された内部メソッドがあります。
  • "length"プロパティがあります。 初期値が0です。属性は{[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false}です。
  • [[Prototype]]内部スロットがあり、値は%Object.prototype%です。

22.1.3.1 Array.prototype.concat ( ...arguments )

concatメソッドが0個以上の引数で呼び出されると、オブジェクトの配列要素と、それに続く各引数の配列要素を順番に含む配列が返されます。

次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? ArraySpeciesCreate(O, 0) を A とする
  3. 0 を n とする
  4. 最初の要素がO、続く要素が左から右の順序で関数呼び出しに渡された引数、であるリストを items とする
  5. itemsempty でない間繰り返し
    1. items から最初の要素を削除し、その要素の値を E とする
    2. ? IsConcatSpreadable(E) を spreadable とする
    3. spreadabletrue なら、
      1. 0 を k とする
      2. ? LengthOfArrayLike(E) を len とする
      3. n + len > 253 - 1 なら TypeError例外をスローする
      4. klen の間繰り返し
        1. ! ToString(k) を P とする
        2. ? HasProperty(E, P) を exists とする
        3. existstrue なら、
          1. ? Get(E, P) を subElement とする
          2. ? CreateDataPropertyOrThrow(A, ! ToString(n), subElement) を実行する
        4. n + 1 を n にセットする
        5. k + 1 を k にセットする
    4. c. と異なるなら、
      1. NOTE: E はスプレッドではなく単一のアイテムとして追加される
      2. n ≧ 253 - 1, TypeError例外をスローする
      3. ? CreateDataPropertyOrThrow(A, ! ToString(n), E) を実行する
      4. n + 1 を n にセットする
  6. ? Set(A, "length", n, true) を実行する
  7. A を返す

concat の "length"プロパティは 1 です。

結果の配列の末尾の要素が存在しない状況でその値が正しいことを確認するには、手順6の"length"プロパティを明示的に設定する必要があります。
concat関数は汎用的です。 this値がArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。
22.1.3.1.1 ランタイムセマンティクス(Runtime Semantics): IsConcatSpreadable ( O )

引数Oを指定した抽象操作IsConcatSpreadableは、次の手順を実行します。

  1. Type(O) が Object型 でないなら、 false を返す
  2. ? Get(O, @@isConcatSpreadable) を spreadable とする
  3. spreadableundefined でないなら、 ! ToBoolean(spreadable) を返す
  4. ? IsArray(O) を返す

22.1.3.2 Array.prototype.constructor

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

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

copyWithinメソッドは、最大3つの引数targetstartおよびendを取ります。

end引数はオプションであり、thisオブジェクトの長さがデフォルト値です。 targetが負の場合、length + targetとして扱われます。lengthは配列の長さです。 startが負の場合、length + startとして扱われます。 endが負の場合、length+ endとして扱われます。

次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. ? ToInteger(target) を relativeTarget とする
  4. relativeTarget < 0 なら max((len + relativeTarget), 0) 異なるなら、 let to be min(relativeTarget, len) を to とする
  5. ? ToInteger(start) を relativeStart とする
  6. relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を from とする
  7. endundefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
  8. relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
  9. min(final - from, len - to) を count とする
  10. fromtotofrom + count なら、
    1. -1 を direction とする
    2. from + count - 1 を from にセットする
    3. to + count - 1 を to にセットする
  11. 10. と異なるなら、
    1. 1 を direction とする
  12. count > 0 の間繰り返し
    1. ! ToString(from) を fromKey とする
    2. ! ToString(to) を toKey とする
    3. ? HasProperty(O, fromKey) を fromPresent とする
    4. fromPresenttrue なら、
      1. ? Get(O, fromKey) を fromVal とする
      2. ? Set(O, toKey, fromVal, true) を実行する
    5. d. と異なるなら、
      1. Assert: fromPresentfalse
      2. ? DeletePropertyOrThrow(O, toKey) を実行する
    6. from + directionfrom にセットする
    7. to + directionto にセットする
    8. count - 1 を count にセットする
  13. O を返す
copyWithin 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.4 Array.prototype.entries ( )

次の手順が実行されます。

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

この関数は、%ArrayProto_entries%組み込みオブジェクトです。

22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg ] )

引数callbackfnは関数で、3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返します。 配列の要素ごとに昇順でcallbackfn1回呼び出します。ただしcallbackfnfalseした時点で呼び出しは終了し、everyの結果はfalseとなります。 callbackfnがすべての要素に対してtrueを返した場合、everyはtrueを返します。 callbackfnは、実際に存在する要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。thisArgパラメーターが指定されている場合、callbackfn呼び出しのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。

callbackfnは、要素の値、要素のインデックス、およびeveryの対象となっているオブジェクトの3つの引数で呼び出されます。

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

everyが処理する要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出し後に配列に追加された要素は、callbackfnによってアクセスされません。 既存の配列要素が変更された場合、callbackfnに渡される値は、アクセス時点での値となります。 呼び出しが開始した後に削除された要素は呼び出されません。 everyは数学の"for all"数量詞のように機能します。 空の配列の場合、trueを返します。

everyが1つまたは2つの引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(callbackfn) が false なら、TypeError例外をスローする
  4. 0 を k とする
  5. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ! ToBoolean(? Call(callbackfn, thisArg, « kValue, k, O »)) を testResult とする
      3. testResultfalse なら、 false を返す
    4. k + 1 を k にセットする
  6. true を返す
every 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

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

fillメソッドは、valuestartendの最大3つの引数値を取ります。

start引数とend引数はオプションであり、デフォルト値は0で、thisオブジェクトの長さです。 startが負の場合、length + startとして扱われます。lengthは配列の長さです。 endが負の場合、length + endとして扱われます。

次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. ? ToInteger(start) を relativeStart とする
  4. relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
  5. endundefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
  6. relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
  7. kfinal の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? Set(O, Pk, value, true) を実行する
    3. k + 1 を k にセットする
  8. O を返す
fill 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )

引数callbackfnは関数で、3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返します。 filterは、配列内の要素ごとに昇順でcallbackfnを1回呼び出します。そして、callbackfntrueを返す要素で新しい配列を作成します。 callbackfnは、実際に存在する配列要素に対して呼び出されます。 欠落している要素は呼び出されません。

thisArgパラメーターは、callbackfnthis値として使用されます。 指定されていない場合は、undefinedが使用されます。

callbackfnは、要素の値、要素のインデックス、対象となっているオブジェクトの3つの引数で呼び出されます。

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

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

filterが1つまたは2つの引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(callbackfn) が false なら、TypeError例外をスローする
  4. ? ArraySpeciesCreate(O, 0) を A とする
  5. 0 を k とする
  6. 0 を to とする
  7. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ! ToBoolean(? Call(callbackfn, thisArg, « kValue, k, O »)) を selected とする
      3. selectedtrue なら、
        1. ? CreateDataPropertyOrThrow(A, ! ToString(to), kValue) を実行する
        2. to + 1 を to にセットする
    4. k + 1 を k にセットする
  8. A を返す
filter 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

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

findメソッドは、1つまたは2つの引数、predicatethisArgを使用して呼び出されます。

引数predicateは関数です。3つの引数を受け入れ、ブール値に強制可能な値を返す必要があります。 findは、配列の各要素に対して昇順で1回predicateを呼び出します。 predicateがtrueを返す、findはその要素の値を返します。 それ以外の場合、findはundefinedを返します。

thisArgパラメーターは、predicateの呼び出しごとにthis値として使用されます。 指定されていない場合は、undefinedが使用されます。

predicateは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。

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

findによって処理される要素の範囲は、predicateへの最初の呼び出しの前に設定されます。 呼び出しが開始された後に配列に追加された要素は、アクセスされません。 既存の要素が変更された場合渡される値は、その時点での値になります。

find メソッドが呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(predicate) が false なら、TypeError例外をスローする
  4. 0 を k とする
  5. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? Get(O, Pk) を kValue とする
    3. ! ToBoolean(? Call(predicate, thisArg, « kValue, k, O »)) を testResult とする
    4. testResulttrue なら、 kValue を返す
    5. k + 1 を k にセットする
  6. undefined を返す
find 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

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

predicateは関数です。3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返します。 findIndexは、配列の各要素に対して昇順でpredicateを1回呼び出します。predicateがtrueを返すものが見つかった場合、findIndexはその要素値のインデックスを返します。 それ以外の場合、findIndexは-1を返します。

thisArgパラメーターは、predicateのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。

predicateは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。

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

findIndexによって処理される要素の範囲は、predicateを最初に呼び出す前に設定されます。 呼び出しが開始された後に配列に追加された要素は、アクセスされません。 既存の要素が変更された場合、predicateに渡されるそれらの値は、その時点での値になります。

findIndexメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(predicate) が false なら、TypeError例外をスローする
  4. 0 を k とする
  5. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? Get(O, Pk) を kValue とする
    3. ! ToBoolean(? Call(predicate, thisArg, « kValue, k, O »)) を testResult とする
    4. testResulttrue なら、 k を返す
    5. k + 1 を k にセットする
  6. -1 を返す
findIndex 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.10 Array.prototype.flat ( [ depth ] )

flatメソッドが0個または1個の引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を sourceLen とする
  3. 1 を depthNum とする
  4. depthundefined でないなら、
    1. ? ToInteger(depth) を depthNum にセットする
  5. ? ArraySpeciesCreate(O, 0) を A とする
  6. ? FlattenIntoArray(A, O, sourceLen, 0, depthNum) を実行する
  7. A を返す
22.1.3.10.1 FlattenIntoArray ( target, source, sourceLen, start, depth [ , mapperFunction, thisArg ] )
  1. Assert: Type(target) は Object型
  2. Assert: Type(source) は Object型
  3. Assert: ! IsNonNegativeInteger(sourceLen) は true
  4. Assert: ! IsNonNegativeInteger(start) は true
  5. Assert: ! IsInteger(depth) は true または depth+∞-∞ のどちらか
  6. Assert: mapperFunction が 存在するなら、 ! IsCallable(mapperFunction) は truethisArg が存在し depth1
  7. starttargetIndex とする
  8. 0 を sourceIndex とする
  9. sourceIndexsourceLen の間繰り返し
    1. ! ToString(sourceIndex) を P とする
    2. ? HasProperty(source, P) を exists とする
    3. existstrue なら、
      1. ? Get(source, P) を element とする
      2. mapperFunction が 存在するなら、
        1. ? Call(mapperFunction, thisArg, « element, sourceIndex, source ») を element にセットする
      3. falseshouldFlatten とする
      4. depth > 0 なら、
        1. ? IsArray(element) を shouldFlatten にセットする
      5. shouldFlattentrue なら、
        1. ? LengthOfArrayLike(element) を elementLen とする
        2. ? FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1) を targetIndex にセットする
      6. v. と異なるなら、
        1. targetIndex ≧ 253 - 1 なら TypeError例外をスローする
        2. ? CreateDataPropertyOrThrow(target, ! ToString(targetIndex), element) を実行する
        3. targetIndex + 1 を targetIndex にセットする
    4. sourceIndex + 1 を sourceIndex にセットする
  10. targetIndex を返す

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

flatMapメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を sourceLen とする
  3. ! IsCallable(mapperFunction) が false なら、TypeError例外をスローする
  4. ? ArraySpeciesCreate(O, 0) を A とする
  5. ? FlattenIntoArray(A, O, sourceLen, 0, 1, mapperFunction, thisArg) を実行する
  6. A を返す

22.1.3.12 Array.prototype.forEach ( callbackfn [ , thisArg ] )

引数callbackfnは、3つの引数を受け入れる関数です。 forEachは、配列要素ごとに昇順で1回callbackfnを呼び出します。 callbackfnは、実際に存在する配列の要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。

thisArgパラメーターは、callbackfnのthis値として使用されます。 指定されていない場合は、undefinedが使用されます。

callbackfnは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。

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

forEachメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(callbackfn) が false なら、TypeError例外をスローする
  4. 0 を k とする
  5. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ? Call(callbackfn, thisArg, « kValue, k, O ») を実行する
    4. k + 1 を k にセットする
  6. undefined を返す

この関数は、%ArrayProto_forEach%組み込みオブジェクトです。

forEach 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

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

includeは、SameValueZeroアルゴリズムを使用して、searchElementと配列の要素と昇順で比較します。同じ要素があった場合はtrueを返します。 それ以外の場合は、falseが返されます。

オプションの2番目の引数fromIndexのデフォルトは0です。つまり、配列全体が検索されます。 配列の長さ以上の場合、falseが返されます。つまり、配列は検索されません。 負の場合、配列の終わりからのオフセットとして使用されます。 その際、インデックスが0未満の場合、配列全体が検索されます。

includes メソッドが呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. len が 0 なら、 false を返す
  4. ? ToInteger(fromIndex) を n とする
  5. Assert: fromIndexundefined なら、 n は 0
  6. n ≧ 0 なら、
    1. nk とする
  7. 6. と異なるなら、
    1. len + nk とする
    2. k < 0 なら 0 を k にセットする
  8. klen の間繰り返し
    1. ? Get(O, ! ToString(k)) の結果を elementK とする
    2. SameValueZero(searchElement, elementK) が true なら、 true を返す
    3. k + 1 を k にセットする
  9. false を返す
includes 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。
includeメソッドは、2つの点でindexOfメソッドと異なります。 まず、厳密等値比較 の代わりにSameValueZeroアルゴリズムを使用して、NaN配列要素を検出できるようにします。 次に、欠落している配列要素をスキップせず、undefinedとして扱います。

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

indexOfは、厳密等値比較アルゴリズムを使用して、searchElementと配列の要素を昇順で比較します。同じ値が見つかった場合、最小のインデックスを返します。 それ以外の場合は、-1が返されます。

オプションの2番目の引数fromIndexのデフォルトは0です。つまり、配列全体が検索されます。 配列の長さ以上の場合、-1が返されます。つまり、配列は検索されません。 負の場合、配列の終わりからのオフセットとして使用されます。 その際、インデックスが0未満の場合、配列全体が検索されます。

indexOfメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. len が 0 なら、 -1 を返す
  4. ? ToInteger(fromIndex) を n とする
  5. Assert: fromIndexundefined なら、 n は 0
  6. nlen なら -1 を返す
  7. n ≧ 0 なら、
    1. nk とする
  8. 7. と異なるなら、
    1. len + nk とする
    2. k < 0 なら 0 を k にセットする
  9. klen の間繰り返し
    1. ? HasProperty(O, ! ToString(k)) を kPresent とする
    2. kPresenttrue なら、
      1. ? Get(O, ! ToString(k)) を elementK とする
      2. 厳密等値比較 searchElement === elementK の結果を same とする
      3. sametrue なら、 k を返す
    3. k + 1 を k にセットする
  10. -1 を返す
indexOf 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.15 Array.prototype.join ( separator )

配列の要素を文字列に変換し、separatorで連結します。separatorが指定されていない場合は、単一のコンマが区切り文字として使用されます。

joinメソッドは、1つの引数、separatorを取り、次の手順を実行します。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. separatorundefined なら、 ","sep とする
  4. 3. と異なるなら、 ? ToString(separator) を sep とする
  5. empty String を R とする
  6. 0 を k とする
  7. klen の間繰り返し
    1. k > 0 なら Rsep の文字列連結を R にセットする
    2. ? Get(O, ! ToString(k)) を element とする
    3. elementundefinednull なら、 empty String を、異なるなら ? ToString(element) を next とする
    4. next の文字列連結を R にセットする
    5. k + 1 を k にセットする
  8. R を返す
join 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.16 Array.prototype.keys ( )

次の手順が実行されます。

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

この関数は、%ArrayProto_keys%組み込みオブジェクトです。

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

lastIndexOfは、厳密等値比較 アルゴリズムを使用して、searchElementと配列の要素を降順で比較します。同じ値が見つかった場合、最大のインデックスを返します。 それ以外の場合は、-1が返されます。

オプションの2番目の引数fromIndexは、デフォルトで配列の長さから1を引いたものになります。つまり、配列全体が検索されます。 配列の長さ以上の場合、配列全体が検索されます。 負の場合、配列の終わりからのオフセットとして使用されます。その際、開始インデックスが0未満の場合、-1が返されます。

lastIndexOfメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. len が 0 なら、 -1 を返す
  4. fromIndex が存在するなら、 ? ToInteger(fromIndex) を、存在しないなら len - 1 を n とする
  5. n ≧ 0 なら、
    1. min(n, len - 1) を k とする
  6. 5. と異なるなら、
    1. len + nk とする
  7. k ≧ 0 の間繰り返し
    1. ? HasProperty(O, ! ToString(k)) を kPresent とする
    2. kPresenttrue なら、
      1. ? Get(O, ! ToString(k)) を elementK とする
      2. 厳密等値比較 searchElement === elementK の結果を same とする
      3. sametrue なら、 k を返す
    3. k - 1 を k にセットする
  8. -1 を返す
lastIndexOf 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.18 Array.prototype.map ( callbackfn [ , thisArg ] )

callbackfnは、3つの引数を受け入れる関数である必要があります。 mapは、配列内の要素ごとに昇順で1回callbackfnを呼び出し、その結果から新しい配列を作成します。 callbackfnは、実際に存在する要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。

thisArgパラメーターは、callbackfnthis値として使用されます。 指定されていない場合は、undefinedが使用されます。

callbackfnは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。

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

mapによって処理される要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出しの開始後に追加された要素は、アクセスされません。 既存の要素が変更された場合、アクセス時点での値になります。 呼び出し開始後に削除された要素はアクセスされません。

mapメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(callbackfn) が false なら、TypeError例外をスローする
  4. ? ArraySpeciesCreate(O, len) を A とする
  5. 0 を k とする
  6. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ? Call(callbackfn, thisArg, « kValue, k, O ») を mappedValue とする
      3. ? CreateDataPropertyOrThrow(A, Pk, mappedValue) を実行する
    4. k + 1 を k にセットする
  7. A を返す
map 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.19 Array.prototype.pop ( )

配列の最後の要素が配列から削除され、削除された要素が返されます。

pop メソッドが呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. len がゼロなら、
    1. ? Set(O, "length", 0, true) を実行する
    2. undefined を返す
  4. 3. と異なるなら、
    1. Assert: len > 0
    2. len - 1 を newLen とする
    3. ! ToString(newLen) を index とする
    4. ? Get(O, index) を element とする
    5. ? DeletePropertyOrThrow(O, index) を実行する
    6. ? Set(O, "length", newLen, true) を実行する
    7. element を返す
pop 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.20 Array.prototype.push ( ...items )

引数は、順番にで配列の最後に追加されます。 配列の追加後の長さが返されます。

ゼロ個以上の引数を指定してpushメソッドを呼び出すと、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. 引数のリストを items とする
  4. items の要素数を argCount とする
  5. len + argCount > 253 - 1 なら TypeError例外をスローする
  6. itemsempty でない間繰り返し
    1. items の最初の要素を削除し、削除した要素を E とする
    2. ? Set(O, ! ToString(len), E, true) を実行する
    3. len + 1 を len にセットする
  7. ? Set(O, "length", len, true) を実行する
  8. len を返す

push の "length"プロパティは 1 です。

push 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.21 Array.prototype.reduce ( callbackfn [ , initialValue ] )

引数callbackfnは、4つの引数を取る関数である必要があります。 reduceは、配列の最初の要素と後の要素ごとに1回、昇順でcallbackfnを呼び出します。

callbackfnは、previousValuecallbackfnへの前回の呼び出しの結果値)、currentValue(現在の要素の値)、currentIndex、および対象となっているオブジェクトの4つの引数で呼び出されます。 callbackfnが最初に呼び出されるとき、initialValueが指定された場合、previousValueinitialValueに等しくなり、currentValueは配列の最初の値に等しくなります。 initialValueが指定されていない場合、previousValueは配列の最初の値に等しくなり、currentValueは2番目の値に等しくなります。 配列に要素が含まれておらず、initialValueが指定されていない場合は、TypeErrorです。

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

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

1つまたは2つの引数を指定してreduceメソッドを呼び出すと、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(callbackfn) が false なら、TypeError例外をスローする
  4. len が 0 で initialValue が存在しないなら、TypeError例外をスローする
  5. 0 を k とする
  6. undefinedaccumulator とする
  7. initialValue が 存在するなら、
    1. initialValueaccumulator にセットする
  8. 7. と異なるなら、
    1. falsekPresent とする
    2. kPresentfalseklen の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ? HasProperty(O, Pk) を kPresent にセットする
      3. kPresenttrue なら、
        1. ? Get(O, Pk) を accumulator にセットする
      4. k + 1 を k にセットする
    3. kPresentfalse なら、TypeError例外をスローする
  9. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ? Call(callbackfn, undefined, « accumulator, kValue, k, O ») を accumulator にセットする
    4. k + 1 を k にセットする
  10. accumulator を返す
reduce 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.22 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )

引数callbackfnは、4つの引数を取る関数である必要があります。 reduceRightは、配列に存在する最初の要素と後の要素ごとに1回、降順でコールバックを呼び出します。

callbackfnは、previousValuecallbackfnの前回の呼び出し結果)、currentValue(現在の要素の値)、currentIndex、および対象となっているオブジェクトの4つの引数で呼び出されます。 callbackfnが初めて呼び出されるとき、initialValueが指定された場合、previousValueinitialValueに等しくなり、currentValueは配列の最後の値に等しくなります。 initialValueが指定されていない場合、previousValueは配列の最後の値に等しくなり、currentValueは最後から2番目の値に等しくなります。 配列に要素が含まれておらず、initialValueが指定されていない場合は、TypeErrorです。

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

reduceRightによって処理される要素の範囲は、callbackfnへの最初の呼び出しの前に設定されます。 呼び出しが開始された後に追加された要素は、アクセスされません。 既存の要素がcallbackfnによって変更された場合、callbackfnに渡される値は、reduceRightがそれらにアクセスしたときの値になります。 呼び出しが開始された後、削除された要素はアクセスされません。

reduceRightメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(callbackfn) が false なら、TypeError例外をスローする
  4. len が 0 で initialValue が存在しないなら、TypeError例外をスローする
  5. len - 1 を k とする
  6. undefinedaccumulator とする
  7. initialValue が 存在するなら、 then
    1. initialValueaccumulator にセットする
  8. 7. と異なるなら、
    1. falsekPresent とする
    2. kPresentfalsek ≧ 0 の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ? HasProperty(O, Pk) を kPresent にセットする
      3. kPresenttrue なら、
        1. ? Get(O, Pk) を accumulator にセットする
      4. k - 1 を k にセットする
    3. kPresentfalse なら、TypeError例外をスローする
  9. k ≧ 0 の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ? Call(callbackfn, undefined, « accumulator, kValue, k, O ») を accumulator にセットする
    4. k - 1 を k にセットする
  10. accumulator を返す
reduceRight 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.23 Array.prototype.reverse ( )

配列要素の順序が逆になるように再配置されます。 呼び出しの結果としてオブジェクトが返されます。

reverse メソッドが呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. floor(len / 2) を middle とする
  4. 0 を lower とする
  5. lowermiddle の間繰り返し
    1. len - lower - 1 を upper とする
    2. ! ToString(upper) を upperP とする
    3. ! ToString(lower) を lowerP とする
    4. ? HasProperty(O, lowerP) を lowerExists とする
    5. lowerExiststrue なら、
      1. ? Get(O, lowerP) を lowerValue とする
    6. ? HasProperty(O, upperP) を upperExists とする
    7. upperExiststrue なら、
      1. ? Get(O, upperP) を upperValue とする
    8. lowerExiststrue で、 upperExiststrue なら、
      1. ? Set(O, lowerP, upperValue, true) を実行する
      2. ? Set(O, upperP, lowerValue, true) を実行する
    9. h. と異なり、 lowerExistsfalseupperExiststrue なら、
      1. ? Set(O, lowerP, upperValue, true) を実行する
      2. ? DeletePropertyOrThrow(O, upperP) を実行する
    10. i. と異なり、 lowerExiststrueupperExistsfalse なら、
      1. ? DeletePropertyOrThrow(O, lowerP) を実行する
      2. ? Set(O, upperP, lowerValue, true) を実行する
    11. j. と異なるなら、
      1. Assert: lowerExistsupperExists は両方 false
      2. No action is required
    12. lower + 1 を lower にセットする
  6. O を返す
reverse 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.24 Array.prototype.shift ( )

最初の配列要素を削除し、削除後の配列を返します

shift メソッドが呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. len が zero なら、
    1. ? Set(O, "length", 0, true) を実行する
    2. undefined を返す
  4. ? Get(O, "0") を first とする
  5. 1 を k とする
  6. klen の間繰り返し
    1. ! ToString(k) を from とする
    2. ! ToString(k - 1) を to とする
    3. ? HasProperty(O, from) を fromPresent とする
    4. fromPresenttrue なら、
      1. ? Get(O, from) を fromVal とする
      2. ? Set(O, to, fromVal, true) を実行する
    5. d. と異なるなら、
      1. Assert: fromPresentfalse
      2. ? DeletePropertyOrThrow(O, to) を実行する
    6. k + 1 を k にセットする
  7. ? DeletePropertyOrThrow(O, ! ToString(len - 1)) を実行する
  8. ? Set(O, "length", len - 1, true) を実行する
  9. first を返す
shift 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.25 Array.prototype.slice ( start, end )

startendの2つの引数を取り、要素のstartからendまで(endが定義されていない場合は配列の最後まで)配列の要素を含む配列を返します。 startが負の場合、length + startとして扱われます。lengthは配列の長さです。 endが負の場合、length + endとして扱われます。lengthは配列の長さです。

次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. ? ToInteger(start) を relativeStart とする
  4. relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
  5. endundefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
  6. relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
  7. max(final - k, 0) を count とする
  8. ? ArraySpeciesCreate(O, count) を A とする
  9. 0 を n とする
  10. kfinal の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ? CreateDataPropertyOrThrow(A, ! ToString(n), kValue) を実行する
    4. k + 1 を k にセットする
    5. n + 1 を n にセットする
  11. ? Set(A, "length", n, true) を実行する
  12. A を返す
ECMAScriptの以前のエディションでは、結果配列の末尾の要素が存在しない状況でその長さが正しいことを確認するために、手順11で結果配列の"length"プロパティを明示的に設定する必要がありました。 結果の配列が空の配列ではなく適切な長さに初期化されたES2015以降、"length"の設定は不要になりましたが、下位互換性を維持するために繰り越されます。
slice 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.26 Array.prototype.some ( callbackfn [ , thisArg ] )

引数callbackfnは、3つの引数を受け入れ、ブール値trueまたはfalseに強制可能な値を返す関数です。 配列に存在する要素ごとに、callbackfnを昇順で1回呼び出します。ただし、callbackfntrueを返した時点で、someはtrueを返します。 それ以外の場合、someはfalseを返します。 callbackfnは、実際に存在する配列の要素に対してのみ呼び出されます。 欠落している要素に対しては呼び出されません。

thisArgパラメーターは、callbackfnthis値として使用されます。 指定されていない場合は、undefinedが使用されます。

callbackfnは、要素の値、要素のインデックス、および対象となっているオブジェクトの3つの引数で呼び出されます。

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

someで処理される要素の範囲は、callbackfnの最初の呼び出しの前に設定されます。 呼び出しが開始された後に追加された要素は、アクセスされません。 既存の要素が変更された場合、アクセス時点の値になります。 呼び出しが開始された後、削除された要素はアクセスされません。 someは数学の「存在記号」のように機能します。 空の配列の場合、falseを返します。

someメソッドが1つまたは2つの引数で呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. IsCallable(callbackfn) が false なら、TypeError例外をスローする
  4. 0 を k とする
  5. klen の間繰り返し
    1. ! ToString(k) を Pk とする
    2. ? HasProperty(O, Pk) を kPresent とする
    3. kPresenttrue なら、
      1. ? Get(O, Pk) を kValue とする
      2. ! ToBoolean(? Call(callbackfn, thisArg, « kValue, k, O »)) を testResult とする
      3. testResulttrue なら、 true を返す
    4. k + 1 を k にセットする
  6. false を返す
some 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.27 Array.prototype.sort ( comparefn )

配列要素をソートします。 並べ替えは安定している必要があります。つまり、等しい要素は元の順序のままである必要があります。 comparefnは、2つの引数xyを受け入れ、xyの場合は負の値、x = yの場合はゼロ、xyの場合は正の値を返す関数である必要があります。

入力時に、ソート関数の評価を初期化するために以下のステップが実行されます。

  1. comparefnundefined でなく IsCallable(comparefn) が false なら、TypeError例外をスローする
  2. ? ToObject(this値) を obj とする
  3. ? LengthOfArrayLike(obj) を len とする

このsortメソッドの仕様では、次のアルゴリズムがtrueを返す場合、オブジェクトobjsparseです。

  1. 0 ≦ ilen の範囲の整数 i ごとに次を実行する
    1. obj.[[GetOwnProperty]](! ToString(i)) を elem とする
    2. elemundefined なら、 true を返す
  2. false を返す

ソート順とは、関数の完了後の、objのプロパティ値の順序(整数インデックス)です。 sort関数の結果は、次のように決定されます。

comparefnundefinedではなく、配列要素の一貫した比較関数ではない場合(以下を参照)、ソート順は実装によって定義されます。 comparefnundefinedで、SortCompareが一貫した比較関数として機能しない場合、ソート順は実装によって定義されます。

obj.[[GetPrototypeOf]]()をprotoとします。 protonullでなく、以下のすべての条件が満たされるような整数jが存在する場合、ソート順は実装によって定義されます。

objsparseであり、次の条件のいずれかが当てはまる場合、ソート順も実装によって定義されます。

次の条件のいずれかが当てはまる場合、ソート順も実装によって定義されます。

次の手順が実行されます。

  1. 最初の引数にobjを使用してGetSetDeletePropertyOrThrowHasOwnProperty抽象操作と、SortCompare(以下で説明)への、実装に依存する一連の呼び出しを実行する。
    • GetSetDeletePropertyOrThrowHasOwnPropertyの各呼び出しのプロパティキー引数は、len未満の非負の整数の文字列表現
    • Setのすべての呼び出しのThrow引数はtrue
    • SortCompare呼び出しの引数は、以前の呼び出しでアクセスしたプロパティがHasOwnPropertyの結果で存在していないと判断された場合を除き、Get抽象操作の以前の呼び出しで返された値。SortCompareの引数が両方存在しない場合は、SortCompareを呼び出す代わりに+0を使用する。最初の引数のみが存在しない場合は+ 1を、2番目の引数のみが存在しない場合は-1を使用する。
    • objsparseでないなら、DeletePropertyOrThrowを呼び出してはいけない
    • これらの操作のいずれかから突然の完了が返されたなら、この関数の結果としてすぐに返す
  2. obj を返す

ソート順が実装定義として上記で指定されていない限り、返されるオブジェクトには次の2つの特性が必要です。

  • len未満の非負の整数の数学的順列をπとします。len未満のすべての非負の整数jについて、プロパティold[j]が存在する場合、new[π(j)]はold [j]とまったく同じ値になります。 ただし、プロパティold[j]が存在しなかった場合、new[π(j)]は存在しません。
  • 次に、len未満のすべての非負の整数jおよびkについて、SortCompare(old[j], old[k]) < 0 の場合、new[π(j)] < new[π(k)] です。

ここで、表記old[j]は、この関数が実行される前にGet(obj,j) を呼び出した結果をあらわします。
表記new[j]は、この関数が実行された後にGet(obj,j)を呼び出した結果をあらわします。

関数comparefnは、セットSのすべての値ab、およびc(おそらく同じ値)について以下のすべての要件が満たされている場合、セット値Sの一貫した比較関数です。 aCF bという表記は、comparefn(a,b) < 0 を意味します。a = CF bは、comparefn(a,b) = 0(いずれかの符号)を意味します。 aCF bという表記は、comparefn(a,b) > 0 を意味します。

  • 特定の引数ペアでcomparefnを呼び出した場合、常に同じ値vが返されます。 さらに、Type(v)はNumberであり、vNaNではありません。 これは、 aCF ba = CF baCF bのいずれか1つがabの特定のペアに対して真になることを意味します。
  • comparefn(a,b)の呼び出しは、objまたはobjのプロトタイプチェーン上のオブジェクトを変更しません。
  • a = CF a(再帰性)
  • a = CF bの場合、b = CF a(対称性)
  • a = CF bおよびb = CF cの場合、a = CF c(= CFの推移性)
  • aCF bおよびbCF cの場合、aCF c(< CFの推移性)
  • aCF bおよびbCF cの場合、aCF c(> CFの推移性)
上記は、comparefnが集合Sを同値類に分割し、これらの同値類が完全に順序付けられることを保証するために必要かつ十分な条件です。
sort関数は汎用的です。 this値がArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用することができます。
22.1.3.27.1 ランタイムセマンティクス(Runtime Semantics): SortCompare ( x, y )

SortCompare抽象演算は、2つの引数xおよびyを使用して呼び出されます。 また、sortメソッドの現在の呼び出しに渡されたcomparefn引数にもアクセスできます。 次の手順が実行されます。次の手順が実行されます。

  1. xy の両方が both undefined なら +0 を返す
  2. xundefined なら、 1 を返す
  3. yundefined なら、 -1 を返す
  4. comparefnundefined でないなら、
    1. ? ToNumber(? Call(comparefn, undefined, « x, y »)) を v とする
    2. vNaN なら、 +0 を返す
    3. v を返す
  5. ? ToString(x) を xString とする
  6. ? ToString(y) を yString とする
  7. 抽象関係比較 xStringyString の結果を xSmaller とする
  8. xSmallertrue なら、 -1 を返す
  9. 抽象関係比較 yStringxString の結果を ySmaller とする
  10. ySmallertrue なら、 1 を返す
  11. +0 を返す
存在しないプロパティ値はundefinedのプロパティ値よりも大きく比較され、undefinedは他の値よりも大きく比較されます。そのため、undefinedのプロパティ値は常に結果の最後にソートされ、その後に存在しないプロパティ値が続きます。
手順5と7のToString抽象操作で、SortCompareが一貫した比較関数として動作しなくなる可能性があります。

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

2つ以上の引数startdeleteCount、および0個以上のitemsを指定してspliceメソッドを呼び出すと、配列の整数インデックスstartから始まるdeleteCount個の要素がitemsに置き換えられます。 削除された要素(存在する場合)を含むArrayオブジェクトが返されます

次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. ? ToInteger(start) を relativeStart とする
  4. relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を actualStart とする
  5. 実際の引数の数が 0 なら、
    1. 0 を insertCount とする
    2. 0 を actualDeleteCount とする
  6. 5. と異なり、実際の引数の数が 1 なら、
    1. 0 を insertCount とする
    2. len - actualStartactualDeleteCount とする
  7. 6. と異なるなら、
    1. 実際の引数の数 - 2 を insertCount とする
    2. ? ToInteger(deleteCount) を dc とする
    3. min( max(dc, 0), len - actualStart) を actualDeleteCount とする
  8. len + insertCount - actualDeleteCount > 253 - 1, TypeError例外をスローする
  9. ? ArraySpeciesCreate(O, actualDeleteCount) を A とする
  10. 0 を k とする
  11. kactualDeleteCount の間繰り返し
    1. ! ToString(actualStart + k) を from とする
    2. ? HasProperty(O, from) を fromPresent とする
    3. fromPresenttrue なら、
      1. ? Get(O, from) を fromValue とする
      2. ? CreateDataPropertyOrThrow(A, ! ToString(k), fromValue) を実行する
    4. k + 1 を k にセットする
  12. ? Set(A, "length", actualDeleteCount, true) を実行する
  13. 実際の引数の3番目から始まる要素リストを items とする。引数が3つ未満の場合、リストはempty
  14. items の要素数を itemCount とする
  15. itemCountactualDeleteCount なら、
    1. actualStartk にセットする
    2. k < (len - actualDeleteCount) の間繰り返し
      1. ! ToString(k + actualDeleteCount) を from とする
      2. ! ToString(k + itemCount) を to とする
      3. ? HasProperty(O, from) を fromPresent とする
      4. fromPresenttrue なら、
        1. ? Get(O, from) を fromValue とする
        2. ? Set(O, to, fromValue, true) を実行する
      5. iv. と異なるなら、
        1. Assert: fromPresentfalse
        2. ? DeletePropertyOrThrow(O, to) を実行する
      6. k + 1 を k にセットする
    3. lenk にセットする
    4. k > (len - actualDeleteCount + itemCount) の間繰り返し
      1. ? DeletePropertyOrThrow(O, ! ToString(k - 1)) を実行する
      2. k - 1 を k にセットする
  16. 15. と異なり、 itemCountactualDeleteCount なら、
    1. (len - actualDeleteCount) を k にセットする
    2. kactualStart の間繰り返し
      1. ! ToString(k + actualDeleteCount - 1) を from とする
      2. ! ToString(k + itemCount - 1) を to とする
      3. ? HasProperty(O, from) を fromPresent とする
      4. fromPresenttrue なら、
        1. ? Get(O, from) を fromValue とする
        2. ? Set(O, to, fromValue, true) を実行する
      5. iv. と異なるなら、
        1. Assert: fromPresentfalse
        2. ? DeletePropertyOrThrow(O, to) を実行する
      6. k - 1 を k にセットする
  17. actualStartk にセットする
  18. itemsempty でない間繰り返し
    1. items の最初の要素を削除し、その要素の値を E とする
    2. ? Set(O, ! ToString(k), E, true) を実行する
    3. k + 1 を k にセットする
  19. ? Set(O, "length", len - actualDeleteCount + itemCount, true) を実行する
  20. A を返す
ECMAScriptの以前のエディションでは、結果配列の末尾の要素が存在しない状況でその長さが正しいことを確認するために、手順19で結果配列の"length"プロパティを明示的に設定する必要がありました。 結果の配列が空の配列ではなく適切な長さに初期化されたES2015以降、"length"の設定は不要になりましたが、下位互換性を維持するために繰り越されます。
splice 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

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

ECMA-402国際化APIを含むECMAScript実装は、ECMA-402仕様で指定されているようにArray.prototype.toLocaleStringメソッドを実装する必要があります。 ECMAScript実装にECMA-402APIが含まれていない場合は、toLocaleStringメソッドの次の仕様が使用されます。

ECMA-402の初版には、Array.prototype.toLocaleStringメソッドの代替仕様が含まれていませんでした。

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

次の手順が実行されます。

  1. ? ToObject(this値) を array とする
  2. ? LengthOfArrayLike(array) を len とする
  3. ホスト環境の現在のロケールに適したリスト区切り文字列の文字列値(実装定義の方法で導出)を separator とする
  4. empty String を R とする
  5. 0 を k とする
  6. klen の間繰り返し
    1. k > 0 なら、
      1. Rseparator の文字列連結を R にセット
    2. ? Get(array, ! ToString(k)) を nextElement とする
    3. nextElementundefined または null でないなら、
      1. ? ToString(? Invoke(nextElement, "toLocaleString")) を S とする
      2. RS の文字列連結を R にセット
    4. k + 1 を k にセットする
  7. R を返す
配列の要素は、toLocaleStringメソッドを使用して文字列に変換された後、実装で定義されたロケール固有の方法で派生した区切り文字列で連結されます。 この関数を呼び出した結果は、この関数の結果がロケール固有であることを意図していることを除いて、toStringの結果に類似しています。
toLocaleString 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.30 Array.prototype.toString ( )

toString メソッドが呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を array とする
  2. ? Get(array, "join") を func とする
  3. IsCallable(func) が false なら 組み込み関数%Object.prototype.toString%を func にセットする
  4. ? Call(func, array) を返す
toString 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.31 Array.prototype.unshift ( ...items )

引数は配列の先頭に付加されるため、配列内での順序は引数リストに表示される順序と同じになります。

unshiftメソッドが0個以上の引数item1item2などで呼び出されると、次の手順が実行されます。

  1. ? ToObject(this値) を O とする
  2. ? LengthOfArrayLike(O) を len とする
  3. 実際の引数の数 を argCount とする
  4. argCount > 0 なら、
    1. len + argCount > 253 - 1 なら TypeError例外をスローする
    2. lenk とする
    3. k > 0 の間繰り返し
      1. ! ToString(k - 1) を from とする
      2. ! ToString(k + argCount - 1) を to とする
      3. ? HasProperty(O, from) を fromPresent とする
      4. fromPresenttrue なら、
        1. ? Get(O, from) を fromValue とする
        2. ? Set(O, to, fromValue, true) を実行する
      5. iv. と異なるなら、
        1. Assert: fromPresentfalse
        2. ? DeletePropertyOrThrow(O, to) を実行する
      6. k - 1 を k にセットする
    4. 0 を j とする
    5. この関数に渡された引数のリストを items とする
    6. itemsempty でない間繰り返し
      1. items の最初の要素を削除し、その要素の値を E とする
      2. ? Set(O, ! ToString(j), E, true) を実行する
      3. j + 1 を j にセットする
  5. ? Set(O, "length", len + argCount, true) を実行する
  6. len + argCount を返す

unshift の "length"プロパティは 1 です。

unshift 関数は汎用的です。 thisがArrayオブジェクトである必要はありません。 したがって、他の種類のオブジェクトでも使用できます。

22.1.3.32 Array.prototype.values ( )

次の手順が実行されます。

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

この関数は、%ArrayProto_values%組み込みオブジェクトです。

22.1.3.33 Array.prototype [ @@iterator ] ( )

@@iteratorプロパティの初期値は、Array.prototype.valuesプロパティの初期値と同じ関数オブジェクトです。

22.1.3.34 Array.prototype [ @@unscopables ]

@@unscopablesデータプロパティの初期値は、次の手順で作成されたオブジェクトです。

  1. OrdinaryObjectCreate(null) を unscopableList とする
  2. ! CreateDataPropertyOrThrow(unscopableList, "copyWithin", true) を実行する
  3. ! CreateDataPropertyOrThrow(unscopableList, "entries", true) を実行する
  4. ! CreateDataPropertyOrThrow(unscopableList, "fill", true) を実行する
  5. ! CreateDataPropertyOrThrow(unscopableList, "find", true) を実行する
  6. ! CreateDataPropertyOrThrow(unscopableList, "findIndex", true) を実行する
  7. ! CreateDataPropertyOrThrow(unscopableList, "flat", true) を実行する
  8. ! CreateDataPropertyOrThrow(unscopableList, "flatMap", true) を実行する
  9. ! CreateDataPropertyOrThrow(unscopableList, "includes", true) を実行する
  10. ! CreateDataPropertyOrThrow(unscopableList, "keys", true) を実行する
  11. ! CreateDataPropertyOrThrow(unscopableList, "values", true) を実行する
  12. unscopableList を返す

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

これらの独自のプロパティ名は、ECMAScript2015仕様より前はArray.prototypeの標準プロパティとして含まれていませんでした。 これらの名前は、Binding オブジェクトが Array オブジェクトである with ステートメントによってシャドウされる外部スコープで、これらの名前の 1 つをバインディングとして使用する既存のコードの動作を保持するために、ステートメント バインディングの目的で無視されます。

22.1.4 Arrayインスタンスのプロパティ(Properties of Array Instances)

ArrayインスタンスはArrayエキゾチックオブジェクトであり、指定された内部メソッドがあります。 Arrayインスタンスは、Arrayプロトタイプオブジェクトからプロパティを継承します。

配列インスタンスには、"length"プロパティと、配列インデックス名を持つ列挙可能なプロパティのセットがあります。

22.1.4.1 length

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

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

"length"プロパティの値を減らすと、配列インデックスが古い"length"値と新しい"length"値の間にある配列要素が削除されるという副作用があります。 ただし、構成不可能なプロパティは削除できません。 Arrayオブジェクトの"length"プロパティを、既存の構成不可能な配列インデックスプロパティ以下の値に設定しようとすると、"length"はそのインデックスより1つ大きい数値に設定されます。 9.4.2.1を参照してください。

22.1.5 Arrayイテレータオブジェクト(Array Iterator Objects)

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

22.1.5.1 CreateArrayIterator ( array, kind )

Arrayオブジェクトのいくつかのメソッドは、Iteratorオブジェクトを返します。 このようなイテレータオブジェクトを作成するには、引数arraykindを指定した抽象演算CreateArrayIteratorを使用します。 次の手順を実行します。

  1. Assert: Type(array) は Object型
  2. Assert: kindkey+value, key, or value
  3. OrdinaryObjectCreate(%ArrayIteratorPrototype%, « [[IteratedArrayLike]], [[ArrayLikeNextIndex]], [[ArrayLikeIterationKind]] ») を iterator とする
  4. arrayiterator.[[IteratedArrayLike]] にセットする
  5. 0 を iterator.[[ArrayLikeNextIndex]] にセットする
  6. kinditerator.[[ArrayLikeIterationKind]] にセットする
  7. iterator を返す

22.1.5.2 The %ArrayIteratorPrototype% Object

%ArrayIteratorPrototype%オブジェクトは、次の特徴があります。

    • すべてのArrayイテレータオブジェクトに継承されるプロパティがあります。
    • 通常のオブジェクトです。
    • [[Prototype]]内部スロットがあり、値は%IteratorPrototype% です。
    • 以下のプロパティがあります。
    22.1.5.2.1 %ArrayIteratorPrototype%.next ( )
    1. this値 を O とする
    2. Type(O) が Object型でないなら、TypeError例外をスローする
    3. O Arrayイテレータインスタンス(22.1.5.3)のすべての内部スロットを持っていないなら TypeError例外をスローする
    4. O.[[IteratedArrayLike]] を a とする
    5. aundefined なら、 CreateIterResultObject(undefined, true) を返す
    6. O.[[ArrayLikeNextIndex]] を index とする
    7. O.[[ArrayLikeIterationKind]] を itemKind とする
    8. a が [[TypedArrayName]] 内部スロットを持っている、
      1. IsDetachedBuffer(a.[[ViewedArrayBuffer]]) が true なら、TypeError例外をスローする
      2. a.[[ArrayLength]] を len とする
    9. 8. と異なるなら、
      1. ? LengthOfArrayLike(a) を len とする
    10. indexlen なら、
      1. undefinedO.[[IteratedArrayLike]] にセットする
      2. CreateIterResultObject(undefined, true) を返す
    11. index + 1 を O.[[ArrayLikeNextIndex]] にセットする
    12. itemKindkey なら、 CreateIterResultObject(index, false) を返す
    13. ! ToString(index) を elementKey とする
    14. ? Get(a, elementKey) を elementValue とする
    15. itemKindvalue なら、 elementValueresult とする
    16. 15. と異なるなら、
      1. Assert: itemKindkey+value
      2. ! CreateArrayFromList(« index, elementValue ») を result とする
    17. CreateIterResultObject(result, false) を返す
    22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]

    @@toStringTagプロパティの初期値は、文字列値"Array Iterator"です。

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

    22.1.5.3 Arrayイテレータインスタンスのプロパティ(Properties of Array Iterator Instances)

    Arrayイテレータインスタンスは、%ArrayIteratorPrototype%組み込みオブジェクトからプロパティを継承する通常のオブジェクトです。 Arrayイテレータインスタンスは、最初に表60にリストされている内部スロットを使用して作成されます。

    表60: Arrayイテレータインスタンスの内部スロット
    内部スロット 内容
    [[IteratedArrayLike]] 対象となっているarrayライクオブジェクト
    [[ArrayLikeNextIndex]] イテレータによって返される次の要素の整数インデックス
    [[ArrayLikeIterationKind]] イテレータによって返される要素を識別する文字列値。 使用できる値は、keyvaluekey+valueです。

    22.2 TypedArrayオブジェクト(TypedArray Objects)

    TypedArrayオブジェクトは基になるバイナリデータバッファ(24.1)に、配列のようなビューでアクセスします。 TypedArrayインスタンスの各要素には、基になるバイナリスカラーデータ型があります。 サポートされている要素タイプごとに、表61にリストされているTypedArrayコンストラクターがあります。 各コンストラクターには、対応する個別のプロトタイプオブジェクトがあります。

    表61: TypedArrayコンストラクター
    コンストラクター名と組み込みオブジェクト名 要素タイプ 要素サイズ 変換操作 内容
    Int8Array
    %Int8Array%
    Int8 1 ToInt8 8ビット2の補数符号付き整数
    Uint8Array
    %Uint8Array%
    Uint8 1 ToUint8 8ビット符号なし整数
    Uint8ClampedArray
    %Uint8ClampedArray%
    Uint8C 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ビット符号なし整数
    Float32Array
    %Float32Array%
    Float32 4 32ビットIEEE浮動小数点
    Float64Array
    %Float64Array%
    Float64 8 64ビットIEEE浮動小数点

    以下の定義のTypedArrayへの参照は、上記の表の適切なコンストラクター名に置き換える必要があります。

    22.2.1 %TypedArray%組み込みオブジェクト(The %TypedArray% Intrinsic Object)

    %TypedArray%組み込みオブジェクトは、次の特徴があります。

    22.2.1.1 %TypedArray% ( )

    %TypedArray%コンストラクターは、次の手順を実行します。

    1. TypeError例外をスローする

    %TypedArray%コンストラクター"length"プロパティは0です。

    22.2.2 %TypedArray%組み込みオブジェクトのプロパティ(Properties of the %TypedArray% Intrinsic Object)

    %TypedArray%組み込みオブジェクトは、次の特徴があります。

    • [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
    • "name"プロパティがあり、値は"TypedArray"です。
    • 以下のプロパティがあります。

    22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )

    from が引数 source とオプション引数 mapfnthisArg で呼び出されると、次の手順が実行されます。

    1. this値 を C とする
    2. IsConstructor(C) が false なら、TypeError例外をスローする
    3. mapfnundefined なら、 falsemapping とする
    4. 3. と異なるなら、
      1. IsCallable(mapfn) が false なら、TypeError例外をスローする
      2. truemapping とする
    5. ? GetMethod(source, @@iterator) を usingIterator とする
    6. usingIteratorundefined でないなら、
      1. ? IterableToList(source, usingIterator) を values とする
      2. values の要素数を len とする
      3. ? TypedArrayCreate(C, « len ») を targetObj とする
      4. 0 を k とする
      5. klen の間繰り返し
        1. ! ToString(k) を Pk とする
        2. values の 最初の要素を kValue とし、その要素を values から削除する
        3. mappingtrue なら、
          1. ? Call(mapfn, thisArg, « kValue, k ») を mappedValue とする
        4. iii. と異なるなら、 kValuemappedValue とする
        5. ? Set(targetObj, Pk, mappedValue, true) を実行する
        6. k + 1 を k にセットする
      6. Assert: valuesempty List
      7. targetObj を返す
    7. NOTE: source はIterableではないため、arrayライクオブジェクトと想定する
    8. ! ToObject(source) を arrayLike とする
    9. ? LengthOfArrayLike(arrayLike) を len とする
    10. ? TypedArrayCreate(C, « len ») を targetObj とする
    11. 0 を k とする
    12. klen の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ? Get(arrayLike, Pk) を kValue とする
      3. mappingtrue なら、
        1. ? Call(mapfn, thisArg, « kValue, k ») を mappedValue とする
      4. c. と異なるなら、 kValuemappedValue とする
      5. ? Set(targetObj, Pk, mappedValue, true) を実行する
      6. k + 1 を k にセットする
    13. targetObj を返す
    22.2.2.1.1 ランタイムセマンティクス(Runtime Semantics): IterableToList ( items, method )

    抽象操作IterableToList は、次の手順を実行します。

    1. ? GetIterator(items, sync, method) を iteratorRecord とする
    2. 空の新規Listvalues とする
    3. truenext とする
    4. next is not false の間繰り返し
      1. ? IteratorStep(iteratorRecord) を next にセットする
      2. nextfalse でないなら、
        1. ? IteratorValue(next) を nextValue とする
        2. nextValueListvalues の最後に追加する
    5. values を返す

    22.2.2.2 %TypedArray%.of ( ...items )

    ofメソッドが任意の数の引数で呼び出されると、次の手順が実行されます。

    1. 関数に渡された引数の実際の数を len とする
    2. 関数に渡された引数の Listitems とする
    3. this値 を C とする
    4. IsConstructor(C) が false なら、TypeError例外をスローする
    5. ? TypedArrayCreate(C, « len ») を newObj とする
    6. 0 を k とする
    7. klen の間繰り返し
      1. items[k] を kValue とする
      2. ! ToString(k) を Pk とする
      3. ? Set(newObj, Pk, kValue, true) を実行する
      4. k + 1 を k にセットする
    8. newObj を返す
    items引数は、整形式のレスト引数値であると見なされます。

    22.2.2.3 %TypedArray%.prototype

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

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

    22.2.2.4 get %TypedArray% [ @@species ]

    %TypedArray%[@@species]はsetアクセス関数がundefinedアクセサプロパティ です。 getアクセス関数は、次の手順を実行します。

    1. this値 を返す

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

    %TypedArray.prototype%メソッドは通常、thisオブジェクトのコンストラクターを使用して派生オブジェクトを作成します。 ただし、サブクラスコンストラクターは、@@speciesプロパティを再定義することでそのデフォルトの動作をオーバーライドできます。

    22.2.3 %TypedArray.prototype%オブジェクトのプロパティ(Properties of the %TypedArray.prototype% Object)

    %TypedArray.prototype%オブジェクトは、次の特徴があります。

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

    22.2.3.1 get %TypedArray%.prototype.buffer

    %TypedArray%.prototype.bufferはsetアクセス関数がundefinedアクセサプロパティ です。 getアクセス関数は、次の手順を実行します。

    1. this値 を O とする
    2. ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
    3. Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
    4. O.[[ViewedArrayBuffer]] を buffer とする
    5. buffer を返す

    22.2.3.2 get %TypedArray%.prototype.byteLength

    %TypedArray%.prototype.byteLengthはsetアクセス関数がundefinedアクセサプロパティ です。 getアクセス関数は、次の手順を実行します。

    1. this値 を O とする
    2. ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
    3. Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
    4. O.[[ViewedArrayBuffer]] を buffer とする
    5. IsDetachedBuffer(buffer) が true なら、 0 を返す
    6. O.[[ByteLength]] を size とする
    7. size を返す

    22.2.3.3 get %TypedArray%.prototype.byteOffset

    %TypedArray%.prototype.byteOffsetはsetアクセス関数がundefinedアクセサプロパティ です。 getアクセス関数は、次の手順を実行します。

    1. this値 を O とする
    2. ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
    3. Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
    4. O.[[ViewedArrayBuffer]] を buffer とする
    5. IsDetachedBuffer(buffer) が true なら、 0 を返す
    6. O.[[ByteOffset]] を offset とする
    7. offset を返す

    22.2.3.4 %TypedArray%.prototype.constructor

    %TypedArray%.prototype.constructorの初期値は、%TypedArray%組み込みオブジェクトです。

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

    %TypedArray%.prototype.copyWithinの引数の解釈と使用方法は、22.1.3.3で定義されているArray.prototype.copyWithinと同じです。

    次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. O.[[ArrayLength]] を len とする
    4. ? ToInteger(target) を relativeTarget とする
    5. relativeTarget < 0 なら max((len + relativeTarget), 0) を、異なるなら min(relativeTarget, len) を to とする
    6. ? ToInteger(start) を relativeStart とする
    7. relativeStart < 0 なら max((len + relativeStart), 0) 異なるなら、 let from be min(relativeStart, len) を from とする
    8. endundefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
    9. relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
    10. min(final - from, len - to) を count とする
    11. count > 0 なら、
      1. NOTE: コピーは、ソースデータのビットレベルのエンコーディングを保持したままおこなう
      2. O.[[ViewedArrayBuffer]] を buffer とする
      3. IsDetachedBuffer(buffer) が true なら、TypeError例外をスローする
      4. O.[[TypedArrayName]] のString値を typedArrayName とする
      5. 表61で、typedArrayName に対応する要素サイズを elementSize とする
      6. O.[[ByteOffset]] を byteOffset とする
      7. to × elementSize + byteOffsettoByteIndex とする
      8. from × elementSize + byteOffsetfromByteIndex とする
      9. count × elementSizecountBytes とする
      10. fromByteIndextoByteIndextoByteIndexfromByteIndex + countBytes なら、
        1. -1 を direction とする
        2. fromByteIndex + countBytes - 1 を fromByteIndex にセットする
        3. toByteIndex + countBytes - 1 を toByteIndex にセットする
      11. j. と異なるなら、
        1. 1 を direction とする
      12. countBytes > 0 の間繰り返し
        1. GetValueFromBuffer(buffer, fromByteIndex, Uint8, true, Unordered) を value とする
        2. SetValueInBuffer(buffer, toByteIndex, Uint8, value, true, Unordered) を実行する
        3. fromByteIndex + directionfromByteIndex にセットする
        4. toByteIndex + directiontoByteIndex にセットする
        5. countBytes - 1 を countBytes にセットする
    12. O を返す
    22.2.3.5.1 ランタイムセマンティクス(Runtime Semantics): ValidateTypedArray ( O )

    引数Oを指定して呼び出されると、次の手順が実行されます。

    1. ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
    2. Assert: O は [[ViewedArrayBuffer]] 内部スロットを持っている
    3. O.[[ViewedArrayBuffer]] を buffer とする
    4. IsDetachedBuffer(buffer) が true なら、TypeError例外をスローする
    5. buffer を返す

    22.2.3.6 %TypedArray%.prototype.entries ( )

    次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. CreateArrayIterator(O, key+value) を返す

    22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )

    %TypedArray%.prototype.everyは、22.1.3.5で定義されているArray.prototype.everyと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。 アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。また、callbackfnの呼び出しによってthis値が切り離される可能性を考慮に入れる必要があります。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

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

    %TypedArray%.prototype.fillの引数の解釈と使用方法は、22.1.3.6で定義されているArray.prototype.fillと同じです。

    次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. O.[[ArrayLength]] を len とする
    4. O.[[ContentType]] が BigInt なら ? ToBigInt(value) を value にセットする
    5. 4.でないなら ? ToNumber(value) を value にセットする
    6. ? ToInteger(start) を relativeStart とする
    7. relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
    8. endundefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
    9. relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
    10. IsDetachedBuffer(O.[[ViewedArrayBuffer]]) が true なら、TypeError例外をスローする
    11. kfinal の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ! Set(O, Pk, value, true) を実行する
      3. k + 1 を k にセットする
    12. O を返す

    22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )

    %TypedArray%.prototype.filterの引数の解釈と使用方法は、22.1.3.7で定義されているArray.prototype.filterと同じです。

    filterメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. O.[[ArrayLength]] を len とする
    4. IsCallable(callbackfn) が false なら、TypeError例外をスローする
    5. 空の新規Listkept とする
    6. 0 を k とする
    7. 0 を captured とする
    8. klen の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ? Get(O, Pk) を kValue とする
      3. ! ToBoolean(? Call(callbackfn, thisArg, « kValue, k, O »)) を selected とする
      4. selectedtrue なら、
        1. kValuekept の最後に追加する
        2. captured + 1 を captured にセットする
      5. k + 1 を k にセットする
    9. ? TypedArraySpeciesCreate(O, « captured ») を A とする
    10. 0 を n とする
    11. kept の各要素を e とし、e ごとに次を実行する
      1. ! Set(A, ! ToString(n), e, true) を実行する
      2. n + 1 を n にセットする
    12. A を返す

    この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。

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

    %TypedArray%.prototype.findは、22.1.3.8で定義されているArray.prototype.findと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、predicateの呼び出しによってthis値が切り離される可能性があります。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

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

    %TypedArray%.prototype.findIndexは、22.1.3.9で定義されているArray.prototype.findIndexと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、predicateの呼び出しによってthis値が切り離される可能性があります。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )

    %TypedArray%.prototype.forEachは、22.1.3.12で定義されているArray.prototype.forEachと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

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

    %TypedArray%.prototype.includesは、22.1.3.13で定義されているArray.prototype.includesと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

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

    %TypedArray%.prototype.indexOfは、22.1.3.14で定義されているArray.prototype.indexOfと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.15 %TypedArray%.prototype.join ( separator )

    %TypedArray%.prototype.joinは、22.1.3.15で定義されているArray.prototype.joinと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.16 %TypedArray%.prototype.keys ( )

    次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. CreateArrayIterator(O, key) を返す

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

    %TypedArray%.prototype.lastIndexOfは、22.1.3.17で定義されているArray.prototype.lastIndexOfと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.18 get %TypedArray%.prototype.length

    %TypedArray%.prototype.lengthはsetアクセス関数がundefinedアクセサプロパティ です。 getアクセス関数は、次の手順を実行します。

    1. this値 を O とする
    2. ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
    3. Assert: O は [[ViewedArrayBuffer]] と [[ArrayLength]] 内部スロットを持っている
    4. O.[[ViewedArrayBuffer]] を buffer とする
    5. IsDetachedBuffer(buffer) が true なら、 0 を返す
    6. O.[[ArrayLength]] を length とする
    7. length を返す

    この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。

    22.2.3.19 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )

    %TypedArray%.prototype.mapの引数の解釈と使用方法は、22.1.3.18で定義されているArray.prototype.mapと同じです。

    mapメソッドが1つまたは2つの引数を指定して呼び出されると、次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. O.[[ArrayLength]] を len とする
    4. IsCallable(callbackfn) が false なら、TypeError例外をスローする
    5. ? TypedArraySpeciesCreate(O, « len ») を A とする
    6. 0 を k とする
    7. klen の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ? Get(O, Pk) を kValue とする
      3. ? Call(callbackfn, thisArg, « kValue, k, O ») を mappedValue とする
      4. ? Set(A, Pk, mappedValue, true) を実行する
      5. k + 1 を k にセットする
    8. A を返す

    この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。

    22.2.3.20 %TypedArray%.prototype.reduce ( callbackfn [ , initialValue ] )

    %TypedArray%.prototype.reduceは、22.1.3.21で定義されているArray.prototype.reduceと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.21 %TypedArray%.prototype.reduceRight ( callbackfn [ , initialValue ] )

    %TypedArray%.prototype.reduceRightは、22.1.3.22で定義されているArray.prototype.reduceRightと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.22 %TypedArray%.prototype.reverse ( )

    %TypedArray%.prototype.reverseは、22.1.3.23で定義されているArray.prototype.reverseと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.23 %TypedArray%.prototype.set ( overloaded [ , offset ] )

    %TypedArray%.prototype.setは、最初の引数の型に基づいて動作がオーバーロードされる単一の関数です。

    この関数は汎用ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。

    22.2.3.23.1 %TypedArray%.prototype.set ( array [ , offset ] )

    TypedArrayに複数の値を設定し、オブジェクトarrayから値を読み取ります。 オプション値offsetは、値が書き込まれるTypedArrayの最初の要素インデックスです。 省略した場合は0とみなされます。

    1. Assert: arrayは、[[TypedArrayName]]内部スロットを持たないECMAScript言語値。 [[TypedArrayName]]内部スロットを持つオブジェクトは、22.2.3.23.2が適用される
    2. this値 を target とする
    3. ? RequireInternalSlot(target, [[TypedArrayName]]) を実行する
    4. Assert: target has a [[ViewedArrayBuffer]] 内部スロット
    5. ? ToInteger(offset) を targetOffset とする
    6. targetOffset < 0 なら RangeError例外をスローする
    7. target.[[ViewedArrayBuffer]] を targetBuffer とする
    8. IsDetachedBuffer(targetBuffer) が true なら、TypeError例外をスローする
    9. target.[[ArrayLength]] を targetLength とする
    10. target.[[TypedArrayName]] のString値を targetName とする
    11. 表61で、targetName に対応する要素サイズを targetElementSize とする
    12. 表61で、targetName に対応する要素タイプを targetType とする
    13. target.[[ByteOffset]] を targetByteOffset とする
    14. ? ToObject(array) を src とする
    15. ? LengthOfArrayLike(src) を srcLength とする
    16. srcLength + targetOffsettargetLength なら RangeError例外をスローする
    17. targetOffset × targetElementSize + targetByteOffsettargetByteIndex とする
    18. 0 を k とする
    19. targetByteIndex + targetElementSize × srcLengthlimit とする
    20. targetByteIndexlimit の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ? Get(src, Pk) を value とする
      3. target.[[ContentType]] が BigInt なら ? ToBigInt(value) を value にセットする
      4. c.でないなら ? ToNumber(value) を value にセットする
      5. IsDetachedBuffer(targetBuffer) が true なら、TypeError例外をスローする
      6. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, Unordered) を実行する
      7. k + 1 を k にセットする
      8. targetByteIndex + targetElementSizetargetByteIndex にセットする
    21. undefined を返す
    22.2.3.23.2 %TypedArray%.prototype.set ( typedArray [ , offset ] )

    引数オブジェクトtypedArrayから値を読み取り、TypedArrayに複数の値を設定します。 オプションの値offsetは、値が書き込まれるこのTypedArrayの最初の要素インデックスです。 省略した場合は0と見なされます。

    1. Assert: typedArray は [[TypedArrayName]] 内部スロットがある。ない場合、22.2.3.23.1を適用する
    2. this値 を target とする
    3. ? RequireInternalSlot(target, [[TypedArrayName]]) を実行する
    4. Assert: target は [[ViewedArrayBuffer]] 内部スロットを持っている
    5. ? ToInteger(offset) を targetOffset とする
    6. targetOffset < 0 なら RangeError例外をスローする
    7. target.[[ViewedArrayBuffer]] を targetBuffer とする
    8. IsDetachedBuffer(targetBuffer) が true なら、TypeError例外をスローする
    9. target.[[ArrayLength]] を targetLength とする
    10. typedArray.[[ViewedArrayBuffer]] を srcBuffer とする
    11. IsDetachedBuffer(srcBuffer) が true なら、TypeError例外をスローする
    12. target.[[TypedArrayName]] のString値を targetName とする
    13. 表61targetNameに対応する要素タイプを targetType とする
    14. 表61targetNameに対応する要素サイズを targetElementSize とする
    15. target.[[ByteOffset]] を targetByteOffset とする
    16. typedArray.[[TypedArrayName]] のString値を srcName とする
    17. 表61srcName に対応する要素タイプを srcType とする
    18. 表61srcName に対応する要素サイズを srcElementSize とする
    19. typedArray.[[ArrayLength]] を srcLength とする
    20. typedArray.[[ByteOffset]] を srcByteOffset とする
    21. srcLength + targetOffsettargetLength なら RangeError例外をスローする
    22. target.[[ContentType]] と typedArray.[[ContentType]] が等しくないなら、TypeError例外をスローする
    23. IsSharedArrayBuffer(srcBuffer) と IsSharedArrayBuffer(targetBuffer) の両方が true なら、
      1. srcBuffer.[[ArrayBufferData]] と targetBuffer.[[ArrayBufferData]] が同じ 共有データブロック 値なら true を、異なるなら falsesame とする
    24. 23. と異なるなら、 SameValue(srcBuffer, targetBuffer) を same とする
    25. sametrue なら、
      1. typedArray.[[ByteLength]] を srcByteLength とする
      2. ? CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, %ArrayBuffer%) を srcBuffer にセットする
      3. NOTE: %ArrayBuffer%は、観察可能な副作用がないことがわかっているため、srcBufferのクローンを作成するために使用される
      4. 0 を srcByteIndex とする
    26. 25. と異なるなら、 srcByteOffsetsrcByteIndex とする
    27. targetOffset × targetElementSize + targetByteOffsettargetByteIndex とする
    28. targetByteIndex + targetElementSize × srcLengthlimit とする
    29. srcTypetargetType が同じなら、
      1. NOTE: srcTypetargetTypeが同じなら、転送はソースデータのビットレベルのエンコーディングを保持して実行する
      2. targetByteIndexlimit の間繰り返し
        1. GetValueFromBuffer(srcBuffer, srcByteIndex, Uint8, true, Unordered) を value とする
        2. SetValueInBuffer(targetBuffer, targetByteIndex, Uint8, value, true, Unordered) を実行する
        3. srcByteIndex + 1 を srcByteIndex にセットする
        4. targetByteIndex + 1 を targetByteIndex にセットする
    30. 29. と異なるなら、
      1. targetByteIndexlimit の間繰り返し
        1. GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, Unordered) を value とする
        2. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, Unordered) を実行する
        3. srcByteIndex + srcElementSizesrcByteIndex にセットする
        4. targetByteIndex + targetElementSizetargetByteIndex にセットする
    31. undefined を返す

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

    %TypedArray%.prototype.sliceの引数の解釈と使用方法は、22.1.3.25で定義されているArray.prototype.sliceと同じです。 次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. O.[[ArrayLength]] を len とする
    4. ? ToInteger(start) を relativeStart とする
    5. relativeStart < 0 なら max((len + relativeStart), 0) を、異なるなら min(relativeStart, len) を k とする
    6. endundefined なら、 len を、異なるなら ? ToInteger(end) を relativeEnd とする
    7. relativeEnd < 0 なら max((len + relativeEnd), 0) を、異なるなら min(relativeEnd, len) を final とする
    8. max(final - k, 0) を count とする
    9. ? TypedArraySpeciesCreate(O, « count ») を A とする
    10. O.[[TypedArrayName]] のString値を srcName とする
    11. 表61で、 srcName に対応する要素タイプを srcType とする
    12. A.[[TypedArrayName]] のString値を targetName とする
    13. 表61で、targetName に対応する要素タイプを targetType とする
    14. srcTypetargetType が異なるなら、
      1. 0 を n とする
      2. kfinal の間繰り返し
        1. ! ToString(k) を Pk とする
        2. ? Get(O, Pk) を kValue とする
        3. ! Set(A, ! ToString(n), kValue, true) を実行する
        4. k + 1 を k にセットする
        5. n + 1 を n にセットする
    15. 14. と異なり、 count > 0 なら、
      1. O.[[ViewedArrayBuffer]] を srcBuffer とする
      2. IsDetachedBuffer(srcBuffer) が true なら、TypeError例外をスローする
      3. A.[[ViewedArrayBuffer]] を targetBuffer とする
      4. 表61で、要素タイプ srcType に対応する要素サイズを elementSize とする
      5. NOTE: srcTypetargetTypeが同じなら、転送はソースデータのビットレベルのエンコーディングを保持して実行する
      6. O.[[ByteOffset]] を srcByteOffet とする
      7. A.[[ByteOffset]] を targetByteIndex とする
      8. (k × elementSize) + srcByteOffetsrcByteIndex とする
      9. targetByteIndex + count × elementSizelimit とする
      10. targetByteIndexlimit の間繰り返し
        1. GetValueFromBuffer(srcBuffer, srcByteIndex, Uint8, true, Unordered) を value とする
        2. SetValueInBuffer(targetBuffer, targetByteIndex, Uint8, value, true, Unordered) を実行する
        3. srcByteIndex + 1 を srcByteIndex にセットする
        4. targetByteIndex + 1 を targetByteIndex にセットする
    16. A を返す

    この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。

    22.2.3.25 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )

    %TypedArray%.prototype.someは、22.1.3.26で定義されているArray.prototype.someと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。 また、callbackfnの呼び出しによってthis値が切り離される可能性があります。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    22.2.3.26 %TypedArray%.prototype.sort ( comparefn )

    %TypedArray%.prototype.sortは、以下で説明する場合を除き、 id="22" r="h-array.prototype.sort"]22.1.3.27[/a]で定義されているArray.prototype.sortと同じ要件を実装する関数です。 %TypedArray%.prototype.sortの実装は、thisの値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではない条件で最適化できます。 アルゴリズムが呼び出すことができるthisオブジェクトの内部メソッドは、[[Get]]と[[Set]]だけです。

    この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。

    開始時に、ソート機能の評価を初期化するために以下のステップが実行されます。 次の手順は、22.1.3.27の手順の代わりに使用されます。

    1. comparefnundefined ではなく、 IsCallable(comparefn) が false なら、TypeError例外をスローする
    2. this値を obj とする
    3. ? ValidateTypedArray(obj) を buffer とする
    4. obj.[[ArrayLength]] を len とする

    エキゾチックオブジェクトの実装定義のソート順条件は、%TypedArray%.prototype.sortによって適用されません。

    次のバージョンのSortCompareは、%TypedArray%.prototype.sortによって使用されます。 22.1.3.27の文字列比較ではなく、数値比較を実行します。 SortCompareは、sortメソッドの現在の呼び出しのcomparefn値とbuffer値にアクセスできます。

    TypedArray SortCompare抽象演算が2つの引数xおよびyを使用して呼び出されると、次の手順が実行されます。

    1. Assert: Type(x) と Type(y) は、両方とも Number型 か、両方とも BigInt型
    2. comparefnundefined でないなら、
      1. ? ToNumber(? Call(comparefn, undefined, « x, y »)) を v とする
      2. IsDetachedBuffer(buffer) が true なら、TypeError例外をスローする
      3. vNaN なら、 +0 を返す
      4. v を返す
    3. xy が両方とも NaN なら +0 を返す
    4. xNaN なら、 1 を返す
    5. yNaN なら、 -1 を返す
    6. xy なら -1 を返す
    7. xy なら 1 を返す
    8. x-0y+0 なら、 -1 を返す
    9. x+0y-0 なら、 1 を返す
    10. +0 を返す
    NaNは常に他のどの値よりも大きいため、comparefnが指定されていない場合、NaNプロパティ値は常に結果の最後にソートされます。

    22.2.3.27 %TypedArray%.prototype.subarray ( begin, end )

    要素タイプがTypedArrayと同じで、ArrayBufferがTypedArrayのArrayBuffer( 範囲がbeginからendの手前まで)と同じ、新しいTypedArrayオブジェクトを返します。 beginまたはendのいずれかが負の場合、配列の最後からのインデックスを参照します。

    1. this値 を O とする
    2. ? RequireInternalSlot(O, [[TypedArrayName]]) を実行する
    3. Assert: O は [[ViewedArrayBuffer]] 内部スロットがある
    4. O.[[ViewedArrayBuffer]] を buffer とする
    5. O.[[ArrayLength]] を srcLength とする
    6. ? ToInteger(begin) を relativeBegin とする
    7. relativeBegin < 0 なら max((srcLength + relativeBegin), 0) を、異なるなら min(relativeBegin, srcLength) を beginIndex とする
    8. endundefined なら、 srcLength を、異なるなら ? ToInteger(end) を relativeEnd とする
    9. relativeEnd < 0 なら max((srcLength + relativeEnd), 0) を、異なるなら min(relativeEnd, srcLength) を endIndex とする
    10. max(endIndex - beginIndex, 0) を newLength とする
    11. O.[[TypedArrayName]] のString値を constructorName とする
    12. 表61で、constructorName に対応する要素サイズを elementSize とする
    13. O.[[ByteOffset]] を srcByteOffset とする
    14. srcByteOffset + beginIndex × elementSizebeginByteOffset とする
    15. « buffer, beginByteOffset, newLength »argumentsList とする
    16. ? TypedArraySpeciesCreate(O, argumentsList) を返す

    この関数は汎用的ではありません。 this値は、[[TypedArrayName]]内部スロットを持つオブジェクトである必要があります。

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

    %TypedArray%.prototype.toLocaleStringは、22.1.3.29で定義されているArray.prototype.toLocaleStringと同じアルゴリズムを実装する関数です。ただし、"length"の取得は[[Get]]の実行ではなく、thisオブジェクトの [[ArrayLength]]にアクセスします。 アルゴリズム実装は、this値が固定長のオブジェクトで、整数インデックスのプロパティがsparseではないという条件で最適化できます。ただし、このような最適化は、アルゴリズムの指定動作に観察可能な変更を導入してはいけません。

    この関数は汎用的ではありません。アルゴリズムを評価する前に ValidateTypedArrayがthis値に適用されます。 その結果が突然の完了である場合、アルゴリズムを評価する代わりにその例外がスローされます。

    ECMAScript実装にECMA-402 Internationalization APIが含まれている場合、この関数はECMA-402仕様にあるArray.prototype.toLocaleStringのアルゴリズムに基づいています。

    22.2.3.29 %TypedArray%.prototype.toString ( )

    %TypedArray%.prototype.toStringデータプロパティの初期値は、22.1.3.30で定義されているArray.prototype.toStringメソッドと同じ組み込み関数オブジェクトです。

    22.2.3.30 %TypedArray%.prototype.values ( )

    次の手順が実行されます。

    1. this値 を O とする
    2. ? ValidateTypedArray(O) を実行する
    3. CreateArrayIterator(O, value) を返す

    22.2.3.31 %TypedArray%.prototype [ @@iterator ] ( )

    @@iteratorプロパティの初期値は、%TypedArray%.prototype.valuesプロパティの初期値と同じ関数オブジェクトです。

    22.2.3.32 get %TypedArray%.prototype [ @@toStringTag ]

    %TypedArray%.prototype[@@toStringTag]はsetアクセス関数がundefinedアクセサプロパティ です。 getアクセス関数は、次の手順を実行します。

    1. this値 を O とする
    2. Type(O) が Object型 でないなら、 undefined を返す
    3. O に [[TypedArrayName]] 内部スロットがないなら undefined を返す
    4. O.[[TypedArrayName]] を name とする
    5. Assert: Type(name) は String
    6. name を返す

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

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

    22.2.4 TypedArrayコンストラクター(The TypedArray Constructors)

    TypedArrayコンストラクターは、次の特徴があります。

    • 以下で説明する構造を持つ組み込みオブジェクトです。ただし、TypedArrayという表記は表61コンストラクター名と置き換える必要があります。
    • 引数の数とタイプに基づいて動作がオーバーロードされる単一の関数です。 TypedArrayの実際の動作は、渡される引数の数と種類によって異なります。
    • 関数として呼び出されることを意図していません。呼び出されると例外がスローされます。
    • サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。 サブクラスコンストラクターは、super呼び出して%TypedArray%.prototype組み込みメソッドをサポートした状態で、サブクラスインスタンスを作成および初期化する必要があります。
    • 値が3の"length"プロパティがあります。

    22.2.4.1 TypedArray ( )

    この説明は、TypedArray関数が引数なしで呼び出された場合にのみ適用されます。

    1. NewTargetundefined なら、TypeError例外をスローする
    2. 表61TypedArrayに対応するコンストラクター名の値のString値を constructorName とする
    3. ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%", 0) を返す

    22.2.4.2 TypedArray ( length )

    この説明は、TypedArray関数が1つ以上の引数を指定して呼び出され、最初の引数の型がオブジェクトではない場合にのみ適用されます。

    1. Assert: Type(length) は Object型ではない
    2. NewTargetundefined なら、TypeError例外をスローする
    3. ? ToIndex(length) を elementLength とする
    4. 表61TypedArrayに対応するコンストラクター名の値のString値を constructorName とする
    5. ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%", elementLength) を返す
    22.2.4.2.1 ランタイムセマンティクス(Runtime Semantics): AllocateTypedArray ( constructorName, newTarget, defaultProto [ , length ] )

    AllocateTypedArrayは、TypedArrayコンストラクターのインスタンスを検証および作成する、引数constructorNamenewTargetdefaultProto、およびオプションの引数lengthを持つ抽象操作です。 コンストラクター名は、表61のTypedArrayコンストラクターの名前である必要があります。length引数が渡されると、その長さのArrayBufferが割り当てられ、新しいTypedArrayインスタンスに関連付けられます。 AllocateTypedArrayは、すべてのTypedArrayオーバーロードで使用される共通のセマンティクスを提供します。 次の手順を実行します。

    1. ? GetPrototypeFromConstructor(newTarget, defaultProto) を proto とする
    2. ! IntegerIndexedObjectCreate(proto) を obj とする
    3. Assert: obj.[[ViewedArrayBuffer]] は undefined
    4. constructorNameobj.[[TypedArrayName]] にセットする
    5. constructorName"BigInt64Array" または "BigUint64Array" なら BigIntobj.[[ContentType]] にセットする
    6. 異なるなら Numberobj.[[ContentType]] にセットする
    7. length が 存在しないなら、
      1. 0 を obj.[[ByteLength]] にセットする
      2. 0 を obj.[[ByteOffset]] にセットする
      3. 0 を obj.[[ArrayLength]] にセットする
    8. 7. と異なるなら、
      1. ? AllocateTypedArrayBuffer(obj, length) を実行する
    9. obj を返す
    22.2.4.2.2 ランタイムセマンティクス(Runtime Semantics): AllocateTypedArrayBuffer ( O, length )

    引数Olengthを持つ抽象操作AllocateTypedArrayBufferは、ArrayBufferを割り当ててTypedArrayインスタンスOに関連付けます。次の手順を実行します。

    1. Assert: O は [[ViewedArrayBuffer]] 内部スロットがあるオブジェクト
    2. Assert: O.[[ViewedArrayBuffer]] は undefined
    3. Assert: ! IsNonNegativeInteger(length) は true
    4. O.[[TypedArrayName]] のString値を constructorName とする
    5. 表61で、 constructorName に対応する要素サイズを elementSize とする
    6. elementSize × lengthbyteLength とする
    7. ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) を data とする
    8. dataO.[[ViewedArrayBuffer]] にセットする
    9. byteLengthO.[[ByteLength]] にセットする
    10. 0 を O.[[ByteOffset]] にセットする
    11. lengthO.[[ArrayLength]] にセットする
    12. O を返す

    22.2.4.3 TypedArray ( typedArray )

    この説明は、TypedArray関数が1つ以上の引数で呼び出され、最初の引数の型がObjectで[[TypedArrayName]]内部スロットがある場合にのみ適用されます。

    引数typedArrayを指定して呼び出されたTypedArrayは、次の手順を実行します。

    1. Assert: Type(typedArray) は Object型 で typedArray は [[TypedArrayName]] 内部スロットがある
    2. NewTargetundefined なら、TypeError例外をスローする
    3. 表61TypedArrayに対応するコンストラクター名の値のString値を constructorName とする
    4. ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%") を O とする
    5. typedArraysrcArray とする
    6. srcArray.[[ViewedArrayBuffer]] を srcData とする
    7. IsDetachedBuffer(srcData) が true なら、TypeError例外をスローする
    8. 表61constructorName に対応する要素タイプを elementType とする
    9. srcArray.[[ArrayLength]] を elementLength とする
    10. srcArray.[[TypedArrayName]] のString値を srcName とする
    11. 表61srcName に対応する要素タイプを srcType とする
    12. 表61srcName に対応する要素サイズを srcElementSize とする
    13. srcArray.[[ByteOffset]] を srcByteOffset とする
    14. 表61constructorName に対応する要素サイズを elementSize とする
    15. elementSize × elementLengthbyteLength とする
    16. IsSharedArrayBuffer(srcData) が false なら、
      1. ? SpeciesConstructor(srcData, %ArrayBuffer%) を bufferConstructor とする
    17. 16. と異なるなら、
      1. %ArrayBuffer%bufferConstructor とする
    18. elementTypesrcType が同じなら、
      1. ? CloneArrayBuffer(srcData, srcByteOffset, byteLength, bufferConstructor) を data とする
    19. 18. と異なるなら、
      1. ? AllocateArrayBuffer(bufferConstructor, byteLength) を data とする
      2. IsDetachedBuffer(srcData) が true なら、TypeError例外をスローする
      3. srcArray.[[ContentType]] と O.[[ContentType]] が等しくないなら、TypeError例外をスローする
      4. srcByteOffsetsrcByteIndex とする
      5. 0 を targetByteIndex とする
      6. elementLengthcount とする
      7. count > 0 の間繰り返し
        1. GetValueFromBuffer(srcData, srcByteIndex, srcType, true, Unordered) を value とする
        2. SetValueInBuffer(data, targetByteIndex, elementType, value, true, Unordered) を実行する
        3. srcByteIndex + srcElementSizesrcByteIndex にセットする
        4. targetByteIndex + elementSizetargetByteIndex にセットする
        5. count - 1 を count にセットする
    20. dataO.[[ViewedArrayBuffer]] にセットする
    21. byteLengthO.[[ByteLength]] にセットする
    22. 0 を O.[[ByteOffset]] にセットする
    23. elementLengthO.[[ArrayLength]] にセットする
    24. O を返す

    22.2.4.4 TypedArray ( object )

    この説明は、TypedArray関数が1つ以上の引数で呼び出され、最初の引数の型がObjectで[[TypedArrayName]]または[[ArrayBufferData]]内部スロットがない場合にのみ適用されます。

    引数objectで呼び出されたTypedArrayは、次の手順を実行します。

    1. Assert: Type(object) は Object型 で object は 内部スロット[[TypedArrayName]] と [[ArrayBufferData]] のどちらかがない
    2. NewTargetundefined なら、TypeError例外をスローする
    3. 表61TypedArrayに対応するコンストラクター名の値のString値を constructorName とする
    4. ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%") を O とする
    5. ? GetMethod(object, @@iterator) を usingIterator とする
    6. usingIteratorundefined でないなら、
      1. ? IterableToList(object, usingIterator) を values とする
      2. values の要素数を len とする
      3. ? AllocateTypedArrayBuffer(O, len) を実行する
      4. 0 を k とする
      5. klen の間繰り返し
        1. ! ToString(k) を Pk とする
        2. values の最初の要素を kValue とし、その要素を values から削除する
        3. ? Set(O, Pk, kValue, true) を実行する
        4. k + 1 を k にセットする
      6. Assert: valuesempty ではない
      7. O を返す
    7. NOTE: objectはIterableではないので、arrayライクオブジェクトと想定する
    8. objectarrayLike とする
    9. ? LengthOfArrayLike(arrayLike) を len とする
    10. ? AllocateTypedArrayBuffer(O, len) を実行する
    11. 0 を k とする
    12. klen の間繰り返し
      1. ! ToString(k) を Pk とする
      2. ? Get(arrayLike, Pk) を kValue とする
      3. ? Set(O, Pk, kValue, true) を実行する
      4. k + 1 を k にセットする
    13. O を返す

    22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] )

    この説明は、TypedArray関数が1つ以上の引数で呼び出され、最初の引数の型がObjectで[[ArrayBufferData]]内部スロットがある場合にのみ適用されます。

    少なくとも1つの引数bufferを指定して呼び出されたTypedArrayは、次の手順を実行します。

    1. Assert: Type(buffer) は Object型で buffer は[[ArrayBufferData]] 内部スロットがある
    2. NewTargetundefined なら、TypeError例外をスローする
    3. 表61TypedArrayに対応するコンストラクター名の値のString値を constructorName とする
    4. ? AllocateTypedArray(constructorName, NewTarget, "%TypedArray.prototype%") を O とする
    5. 表61constructorName に対応する要素サイズを elementSize とする
    6. ? ToIndex(byteOffset) を offset とする
    7. offset modulo elementSize ≠ 0 なら RangeError例外をスローする
    8. lengthundefined でないなら、
      1. ? ToIndex(length) を newLength とする
    9. IsDetachedBuffer(buffer) が true なら、TypeError例外をスローする
    10. buffer.[[ArrayBufferByteLength]] を bufferByteLength とする
    11. lengthundefined なら、
      1. bufferByteLength modulo elementSize ≠ 0 なら RangeError例外をスローする
      2. bufferByteLength - offsetnewByteLength とする
      3. newByteLength < 0 なら RangeError例外をスローする
    12. 11. と異なるなら、
      1. newLength × elementSizenewByteLength とする
      2. offset + newByteLengthbufferByteLength なら RangeError例外をスローする
    13. bufferO.[[ViewedArrayBuffer]] にセットする
    14. newByteLengthO.[[ByteLength]] にセットする
    15. offsetO.[[ByteOffset]] にセットする
    16. newByteLength / elementSizeO.[[ArrayLength]] にセットする
    17. O を返す

    22.2.4.6 TypedArrayCreate ( constructor, argumentList )

    引数constructorargumentListを使用した抽象操作TypedArrayCreateは、コンストラクター関数を使用して新しいTypedArrayオブジェクトの作成を指定するために使用されます。 次の手順を実行します。

    1. ? Construct(constructor, argumentList) を newTypedArray とする
    2. ? ValidateTypedArray(newTypedArray) を実行する
    3. argumentList が単一の番号のリストなら、
      1. newTypedArray.[[ArrayLength]] < argumentList[0] なら TypeError例外をスローする
    4. newTypedArray を返す

    22.2.4.7 TypedArraySpeciesCreate ( exemplar, argumentList )

    抽象演算TypedArraySpeciesCreateと引数exemplarおよびargumentListは、exemplarから派生したコンストラクター関数を使用して新しいTypedArrayオブジェクトの作成するために使用されます。 次の手順を実行します。

    1. Assert: exemplar は内部スロット [[TypedArrayName]] と [[ContentType]] を持つObject
    2. 表61で exemplar.[[TypedArrayName]] に対応する組み込みオブジェクトを defaultConstructor とする
    3. ? SpeciesConstructor(exemplar, defaultConstructor) を constructor とする
    4. ? TypedArrayCreate(constructor, argumentList) を result とする
    5. Assert: result は内部スロット [[TypedArrayName]] と [[ContentType]] がある
    6. result.[[ContentType]] と exemplar.[[ContentType]] が等しくないなら、TypeError例外をスローする
    7. result を返す

    22.2.5 TypedArrayコンストラクターのプロパティ(Properties of the TypedArray Constructors)

    TypedArrayコンストラクターは、次の特徴があります。

    • [[Prototype]]内部スロットがあり、値は%TypedArray%です。
    • "name"プロパティがあります。値は、表61で指定されているコンストラクター名の文字列値です。
    • 以下のプロパティがあります。

    22.2.5.1 TypedArray.BYTES_PER_ELEMENT

    TypedArray.BYTES_PER_ELEMENTの値は、表61TypedArrayに対応する要素サイズの値です。

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

    22.2.5.2 TypedArray.prototype

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

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

    22.2.6 TypedArrayプロトタイプオブジェクトのプロパティ(Properties of the TypedArray Prototype Objects)

    TypedArrayプロトタイプオブジェクトは、次の特徴があります。

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

    22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT

    TypedArray.prototype.BYTES_PER_ELEMENTの値は、表61TypedArrayに対応する要素サイズの値です。

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

    22.2.6.2 TypedArray.prototype.constructor

    TypedArray.prototype.constructorの初期値は、対応する%TypedArray%組み込みオブジェクトです。

    22.2.7 TypedArrayインスタンスのプロパティ(Properties of TypedArray Instances)

    TypedArrayインスタンスは、Integer-Indexedエキゾチックオブジェクトです。 各TypedArrayインスタンスは、対応するTypedArrayプロトタイプオブジェクトからプロパティを継承します。 各TypedArrayインスタンスには、[[TypedArrayName]]、[[ViewedArrayBuffer]]、[[ByteLength]]、[[ByteOffset]]、[[ArrayLength]]の内部スロットがあります。