23 Indexed Collections

23.1 Array Objects

Arraysは、あるclassのproperty namesにspecial treatmentを与えるexotic objectsです。このspecial treatmentのdefinitionについては、10.4.2を参照してください。

23.1.1 The Array Constructor

Array constructorは:

  • %Array%です。
  • global object"Array" propertyのinitial valueです。
  • constructorとして呼び出されたとき、新しいArrayを作成およびinitializeします。
  • constructorとしてではなくfunctionとして呼び出されたときも、新しいArrayを作成およびinitializeします。したがって、function call Array(…)は、same argumentsを伴うobject creation expression new Array(…)とequivalentです。
  • argumentsの数およびtypesに基づいてbehaviourが異なるfunctionです。
  • class definitionのextends clauseのvalueとして使用できます。exotic Array behaviourをinheritしようとするsubclass constructorsは、Array exotic objectsであるsubclass instancesをinitializeするために、Array constructorへのsuper callを含まなければなりません。しかし、Array.prototype methodsのほとんどは、そのthis valueがArray exotic objectであることに依存しないgeneric methodsです。

23.1.1.1 Array ( ...values )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. NewTargetがundefinedなら、newTargetactive function objectとする;そうでなければ、newTargetをNewTargetとする。
  2. protoを ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") とする。
  3. numberOfArgsvalues内のelementsの数とする。
  4. numberOfArgs = 0なら、! ArrayCreate(0, proto)を返す。
  5. numberOfArgs = 1なら、
    1. lengthvalues[0]とする。
    2. arrayを ! ArrayCreate(0, proto) とする。
    3. lengthがNumberでないなら、
      1. CreateDataPropertyOrThrow(array, "0", length)を実行する。
      2. intLength1𝔽とする。
    4. そうでなければ、
      1. intLengthを ! ToUint32(length) とする。
      2. SameValueZero(intLength, length)がfalseなら、RangeError例外をthrowする。
    5. Set(array, "length", intLength, 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" propertyのmathematical valuenumberOfArgsである。
  11. arrayを返す。

23.1.2 Properties of the Array Constructor

Array constructorは:

  • valueが%Function.prototype%である[[Prototype]] internal slotを持ちます。
  • valueが1𝔽である"length" propertyを持ちます。
  • 次のpropertiesを持ちます:

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

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. ctorthis valueとする。
  2. mapperundefinedなら、
    1. mappingfalseとする。
  3. そうでなければ、
    1. IsCallable(mapper)がfalseなら、TypeError例外をthrowする。
    2. mappingtrueとする。
  4. usingIteratorを ? GetMethod(items, %Symbol.iterator%) とする。
  5. usingIteratorundefinedでないなら、
    1. IsConstructor(ctor)がtrueなら、
      1. arrayを ? Construct(ctor) とする。
    2. そうでなければ、
      1. arrayを ! ArrayCreate(0) とする。
    3. iteratorRecordを ? GetIteratorFromMethod(items, usingIterator) とする。
    4. kを0とする。
    5. 繰り返す:
      1. k ≥ 253 - 1なら、
        1. errorThrowCompletion(a newly created TypeError object)とする。
        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であるとassumeする。
  7. arrayLikeを ! ToObject(items) とする。
  8. lengthを ? LengthOfArrayLike(arrayLike) とする。
  9. IsConstructor(ctor)がtrueなら、
    1. arrayを ? Construct(ctor, « 𝔽(length) ») とする。
  10. そうでなければ、
    1. arrayを ? ArrayCreate(length) とする。
  11. kを0とする。
  12. k < lengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. kValueを ? Get(arrayLike, propertyKey) とする。
    3. mappingtrueなら、
      1. mappedValueを ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
    4. そうでなければ、
      1. mappedValuekValueとする。
    5. CreateDataPropertyOrThrow(array, propertyKey, mappedValue)を実行する。
    6. kk + 1に設定する。
  13. Set(array, "length", 𝔽(length), true)を実行する。
  14. arrayを返す。
Note

このmethodは意図的にgenericなfactory methodです;そのthis valueがArray constructorであることをrequireしません。したがって、single numeric argumentで呼び出され得るany other constructorsへtransferまたはinheritできます。

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

このasync functionは呼び出されたとき、次のstepsを実行します:

  1. ctorthis valueとする。
  2. mappingfalseとする。
  3. mapperundefinedでないなら、
    1. IsCallable(mapper)がfalseなら、TypeError例外をthrowする。
    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(ctor)がtrueなら、
      1. arrayを ? Construct(ctor) とする。
    2. そうでなければ、
      1. arrayを ! ArrayCreate(0) とする。
    3. kを0とする。
    4. 繰り返す:
      1. k ≥ 253 - 1なら、
        1. errorThrowCompletion(a newly created TypeError object)とする。
        2. AsyncIteratorClose(iteratorRecord, error)を返す。
      2. propertyKeyを ! ToString(𝔽(k)) とする。
      3. nextResultを ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]]) とする。
      4. nextResultを ? Await(nextResult) に設定する。
      5. nextResultがObjectでないなら、TypeError例外をthrowする。
      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であるとassumeする。
    2. arrayLikeを ! ToObject(items) とする。
    3. lengthを ? LengthOfArrayLike(arrayLike) とする。
    4. IsConstructor(ctor)がtrueなら、
      1. arrayを ? Construct(ctor, « 𝔽(length) ») とする。
    5. そうでなければ、
      1. arrayを ? ArrayCreate(length) とする。
    6. kを0とする。
    7. k < lengthの間、繰り返す
      1. propertyKeyを ! ToString(𝔽(k)) とする。
      2. kValueを ? Get(arrayLike, propertyKey) とする。
      3. kValueを ? Await(kValue) に設定する。
      4. 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", 𝔽(length), true)を実行する。
    9. arrayを返す。
Note

このmethodは意図的にgenericなfactory methodです;そのthis valueがArray constructorであることをrequireしません。したがって、single numeric argumentで呼び出され得るany other constructorsへtransferまたはinheritできます。

23.1.2.3 Array.isArray ( arg )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. IsArray(arg)を返す。

23.1.2.4 Array.of ( ...items )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. lengthitems内のelementsの数とする。
  2. lengthNumber𝔽(length)とする。
  3. ctorthis valueとする。
  4. IsConstructor(ctor)がtrueなら、
    1. arrayを ? Construct(ctor, « lengthNumber ») とする。
  5. そうでなければ、
    1. arrayを ? ArrayCreate(length) とする。
  6. kを0とする。
  7. k < lengthの間、繰り返す
    1. kValueitems[k]とする。
    2. propertyKeyを ! ToString(𝔽(k)) とする。
    3. CreateDataPropertyOrThrow(array, propertyKey, kValue)を実行する。
    4. kk + 1に設定する。
  8. Set(array, "length", lengthNumber, true)を実行する。
  9. arrayを返す。
Note

このmethodは意図的にgenericなfactory methodです;そのthis valueがArray constructorであることをrequireしません。したがって、single numeric argumentで呼び出され得るother constructorsへtransferまたはinheritできます。

23.1.2.5 Array.prototype

Array.prototypeのvalueはArray prototype objectです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

23.1.2.6 get Array [ %Symbol.species% ]

Array[%Symbol.species%]は、set accessor functionがundefinedであるaccessor propertyです。そのget accessor functionは呼び出されたとき、次のstepsを実行します:

  1. this valueを返す。

このfunctionの"name" propertyのvalueは"get [Symbol.species]"です。

Note

Array prototype methodsは通常、そのthis valueのconstructorを使用してderived objectを作成します。しかし、subclass constructorは、その%Symbol.species% propertyをredefiningすることにより、そのdefault behaviourをover-rideしてもよいです。

23.1.3 Properties of the Array Prototype Object

Array prototype objectは:

  • %Array.prototype%です。
  • Array exotic objectであり、そのようなobjectsに対して指定されたinternal methodsを持ちます。
  • initial valueが+0𝔽であり、attributesが { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } である"length" propertyを持ちます。
  • valueが%Object.prototype%である[[Prototype]] internal slotを持ちます。
Note

Array prototype objectは、ECMAScript 2015 specificationより前に作成されたECMAScript codeとのcompatibilityをensureするために、Array exotic objectであるとspecifiedされています。

23.1.3.1 Array.prototype.at ( index )

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

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

このmethodは、objectのarray elementsに各argumentのarray elementsがfollowしたものを含むarrayを返します。

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

  1. objを ? ToObject(this value) とする。
  2. arrayを ? ArraySpeciesCreate(obj, 0) とする。
  3. nextIndexを0とする。
  4. objitemsの先頭にprependする。
  5. itemsの各要素itemについて、以下を行う
    1. spreadableを ? IsConcatSpreadable(item) とする。
    2. spreadabletrueなら、
      1. lengthを ? LengthOfArrayLike(item) とする。
      2. nextIndex + length > 253 - 1なら、TypeError例外をthrowする。
      3. sourceIndexを0とする。
      4. sourceIndex < lengthの間、繰り返す
        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はspreadされるのではなくsingle itemとしてaddedされる。
      2. nextIndex ≥ 253 - 1なら、TypeError例外をthrowする。
      3. CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), item)を実行する。
      4. nextIndexnextIndex + 1に設定する。
  6. Set(array, "length", 𝔽(nextIndex), true)を実行する。
  7. arrayを返す。

このmethodの"length" propertyは1𝔽です。

Note 1

step 6における"length" propertyのexplicit settingは、itemsのfinal non-empty elementがtrailing holesを持つ場合、またはarrayがbuilt-in Arrayでない場合に、lengthがcorrectであることをensureすることを意図しています。

Note 2

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.2.1 IsConcatSpreadable ( obj )

The abstract operation IsConcatSpreadable takes argument obj (an ECMAScript language value) and returns either a normal completion containing a Boolean or a throw completion. 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のinitial valueは%Array%です。

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

Note 1

end argumentはoptionalです。providedされない場合、this valueのlengthが使用されます。

Note 2

targetがnegativeなら、lengthをarrayのlengthとして、length + targetとして扱われます。startがnegativeなら、length + startとして扱われます。endがnegativeなら、length + endとして扱われます。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. relativeTargetを ? ToIntegerOrInfinity(target) とする。
  4. relativeTarget = -∞なら、toを0とする。
  5. そうでなく、relativeTarget < 0なら、tomax(length + relativeTarget, 0)とする。
  6. そうでなければ、tomin(relativeTarget, length)とする。
  7. relativeStartを ? ToIntegerOrInfinity(start) とする。
  8. relativeStart = -∞なら、fromを0とする。
  9. そうでなく、relativeStart < 0なら、frommax(length + relativeStart, 0)とする。
  10. そうでなければ、frommin(relativeStart, length)とする。
  11. endundefinedなら、relativeEndlengthとする;そうでなければ、relativeEndを ? ToIntegerOrInfinity(end) とする。
  12. relativeEnd = -∞なら、finalを0とする。
  13. そうでなく、relativeEnd < 0なら、finalmax(length + relativeEnd, 0)とする。
  14. そうでなければ、finalmin(relativeEnd, length)とする。
  15. countmin(final - from, length - 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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.5 Array.prototype.entries ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

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

Note 1

callbackはthree argumentsをacceptし、Boolean valueへcoercibleなvalueを返すfunctionであるべきです。everyは、callbackfalseを返すoneをfindするまで、array内にpresentな各elementについてascending orderでcallbackをonce呼び出します。そのようなelementが見つかると、everyはimmediately falseを返します。そうでなければ、everytrueを返します。callbackは、arrayの実際にexistするelementsに対してのみ呼び出されます;arrayのmissing elementsに対しては呼び出されません。

thisArg parameterがprovidedされる場合、callbackの各invocationに対するthis valueとして使用されます。providedされない場合、代わりにundefinedが使用されます。

callbackはthree argumentsで呼び出されます:elementのvalue、elementのindex、およびtraversedされているobjectです。

everyは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはcallbackへのcallsによってmutateされる可能性があります。

everyによってprocessedされるelementsのrangeは、callbackへのfirst callの前にsetされます。everyへのcallがbeginした後にarrayへappendedされたelementsは、callbackによってvisitedされません。arrayのexisting elementsがchangedされた場合、callbackへpassedされるそのvalueは、everyがそれらをvisitする時点のvalueになります;everyへのcallがbeginした後、visitedされる前にdeletedされたelementsはvisitedされません。everyは数学における“for all” quantifierのようにactします。特に、empty arrayについてはtrueを返します。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  4. kを0とする。
  5. k < lengthの間、繰り返す
    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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

start argumentはoptionalです。providedされない場合、+0𝔽が使用されます。

end argumentはoptionalです。providedされない場合、this valueのlengthが使用されます。

Note 2

startがnegativeなら、lengthをarrayのlengthとして、length + startとして扱われます。endがnegativeなら、length + endとして扱われます。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

callbackはthree argumentsをacceptし、Boolean valueへcoercibleなvalueを返すfunctionであるべきです。filterは、array内の各elementについてascending orderでcallbackをonce呼び出し、callbacktrueを返すすべてのvaluesからなるnew arrayをconstructします。callbackは、arrayの実際にexistするelementsに対してのみ呼び出されます;arrayのmissing elementsに対しては呼び出されません。

thisArg parameterがprovidedされる場合、callbackの各invocationに対するthis valueとして使用されます。providedされない場合、代わりにundefinedが使用されます。

callbackはthree argumentsで呼び出されます:elementのvalue、elementのindex、およびtraversedされているobjectです。

filterは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはcallbackへのcallsによってmutateされる可能性があります。

filterによってprocessedされるelementsのrangeは、callbackへのfirst callの前にsetされます。filterへのcallがbeginした後にarrayへappendedされたelementsは、callbackによってvisitedされません。arrayのexisting elementsがchangedされた場合、callbackへpassedされるそのvalueは、filterがそれらをvisitする時点のvalueになります;filterへのcallがbeginした後、visitedされる前にdeletedされたelementsはvisitedされません。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  4. arrayを ? ArraySpeciesCreate(obj, 0) とする。
  5. kを0とする。
  6. toを0とする。
  7. k < lengthの間、繰り返す
    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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

このmethodは、predicatetrueへcoercesされるvalueを返すoneをfindするまで、arrayの各elementについてascending index orderでpredicateをonce呼び出します。そのようなelementが見つかると、findはimmediatelyそのelement valueを返します。そうでなければ、findundefinedを返します。

additional informationについてはFindViaPredicateを参照してください。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

このmethodは、predicatetrueへcoercesされるvalueを返すoneをfindするまで、arrayの各elementについてascending index orderでpredicateをonce呼び出します。そのようなelementが見つかると、findIndexはimmediatelyそのelement valueのindexを返します。そうでなければ、findIndexは-1を返します。

additional informationについてはFindViaPredicateを参照してください。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

このmethodは、predicatetrueへcoercesされるvalueを返すoneをfindするまで、arrayの各elementについてdescending index orderでpredicateをonce呼び出します。そのようなelementが見つかると、findLastはimmediatelyそのelement valueを返します。そうでなければ、findLastundefinedを返します。

additional informationについてはFindViaPredicateを参照してください。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodは意図的にgenericです;そのthis valueがArray objectであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

このmethodは、predicatetrueへcoercesされるvalueを返すoneをfindするまで、arrayの各elementについてdescending index orderでpredicateをonce呼び出します。そのようなelementが見つかると、findLastIndexはimmediatelyそのelement valueのindexを返します。そうでなければ、findLastIndexは-1を返します。

additional informationについてはFindViaPredicateを参照してください。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodは意図的にgenericです;そのthis valueがArray objectであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

The abstract operation FindViaPredicate takes arguments obj (an Object), length (a non-negative integer), direction (ascending or descending), predicate (an ECMAScript language value), and thisArg (an ECMAScript language value) and returns either a normal completion containing a Record with fields [[Index]] (an integral Number) and [[Value]] (an ECMAScript language value) or a throw completion.

objarray-like objectまたはTypedArrayであるべきです。このoperationは、directionによって示される通り、ascending index orderまたはdescending index orderのいずれかで、predicatetrueへcoercesされるvalueを返すoneをfindするまで、objの各elementについてpredicateをonce呼び出します。その時点で、このoperationは見つかったelementのindexおよびvalueを与えるRecordを返します。そのようなelementが見つからない場合、このoperationはindexに-1𝔽、valueにundefinedをspecifyするRecordを返します。

predicateはfunctionであるべきです。arrayのelementについて呼び出されるとき、three argumentsが渡されます:elementのvalue、elementのindex、およびtraversedされているobjectです。そのreturn valueはBoolean valueへcoercedされます。

thisArgは、predicateの各invocationに対するthis valueとして使用されます。

このoperationは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはpredicateへのcallsによってmutateされる可能性があります。

processedされるelementsのrangeは、predicateへのfirst callの前、traversalがbeginする直前にsetされます。この後にarrayへappendedされたelementsは、predicateによってvisitedされません。arrayのexisting elementsがchangedされた場合、predicateへpassedされるそのvalueは、このoperationがそれらをvisitする時点のvalueになります。traversalがbeginした後、visitedされる前にdeletedされたelementsはstill visitedされ、prototypeからlooked upされるか、undefinedになります。

It performs the following steps when called:

  1. IsCallable(predicate)がfalseなら、TypeError例外をthrowする。
  2. directionascendingなら、
    1. indicesを、0(inclusive)からlength(exclusive)までのinterval内のintegersListで、ascending orderとする。
  3. そうでなければ、
    1. indicesを、0(inclusive)からlength(exclusive)までのinterval内のintegersListで、descending orderとする。
  4. indicesの各integer kについて、以下を行う
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. NOTE: objTypedArrayである場合、以下のGetのinvocationはnormal completionを返す。
    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 ] )

このmethodは呼び出されたとき、次のstepsを実行します:

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

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

The abstract operation FlattenIntoArray takes arguments target (an Object), source (an Object), sourceLength (a non-negative integer), start (a non-negative integer), and depth (a non-negative integer or +∞) and optional arguments mapperFunc (a function object) and thisArg (an ECMAScript language value) and returns either a normal completion containing a non-negative integer or a throw completion. It performs the following steps when called:

  1. Assert: mapperFuncがpresentなら、IsCallable(mapperFunc)はtrueであり、thisArgはpresentであり、depthは1である。
  2. targetIndexstartとする。
  3. sourceIndex+0𝔽とする。
  4. (sourceIndex) < sourceLengthの間、繰り返す
    1. propertyKeyを ! ToString(sourceIndex) とする。
    2. existsを ? HasProperty(source, propertyKey) とする。
    3. existstrueなら、
      1. elementを ? Get(source, propertyKey) とする。
      2. mapperFuncがpresentなら、
        1. elementを ? Call(mapperFunc, thisArg, « element, sourceIndex, source ») に設定する。
      3. shouldFlattenfalseとする。
      4. depth > 0なら、
        1. shouldFlattenを ? IsArray(element) に設定する。
      5. shouldFlattentrueなら、
        1. depth = +∞なら、newDepthを+∞とする。
        2. そうでなければ、newDepthdepth - 1とする。
        3. elementLengthを ? LengthOfArrayLike(element) とする。
        4. targetIndexを ? FlattenIntoArray(target, element, elementLength, targetIndex, newDepth) に設定する。
      6. そうでなければ、
        1. targetIndex ≥ 253 - 1なら、TypeError例外をthrowする。
        2. CreateDataPropertyOrThrow(target, ! ToString(𝔽(targetIndex)), element)を実行する。
        3. targetIndextargetIndex + 1に設定する。
    4. sourceIndexsourceIndex + 1𝔽に設定する。
  5. targetIndexを返す。

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

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. sourceLengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(mapperFunc)がfalseなら、TypeError例外をthrowする。
  4. arrayを ? ArraySpeciesCreate(obj, 0) とする。
  5. FlattenIntoArray(array, obj, sourceLength, 0, 1, mapperFunc, thisArg)を実行する。
  6. arrayを返す。

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

Note 1

callbackはthree argumentsをacceptするfunctionであるべきです。forEachは、array内にpresentな各elementについてascending orderでcallbackをonce呼び出します。callbackは、arrayの実際にexistするelementsに対してのみ呼び出されます;arrayのmissing elementsに対しては呼び出されません。

thisArg parameterがprovidedされる場合、callbackの各invocationに対するthis valueとして使用されます。providedされない場合、代わりにundefinedが使用されます。

callbackはthree argumentsで呼び出されます:elementのvalue、elementのindex、およびtraversedされているobjectです。

forEachは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはcallbackへのcallsによってmutateされる可能性があります。

forEachによってprocessedされるelementsのrangeは、callbackへのfirst callの前にsetされます。forEachへのcallがbeginした後にarrayへappendedされたelementsは、callbackによってvisitedされません。arrayのexisting elementsがchangedされた場合、callbackへpassedされるそのvalueは、forEachがそれらをvisitする時点のvalueになります;forEachへのcallがbeginした後、visitedされる前にdeletedされたelementsはvisitedされません。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  4. kを0とする。
  5. k < lengthの間、繰り返す
    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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

このmethodは、SameValueZero algorithmを使用してsearchElementをarrayのelementsとascending orderでcompareし、いずれかのpositionでfoundされる場合はtrueを返します;そうでなければ、falseを返します。

optional second argument fromIndex+0𝔽をdefaultとします(つまり、whole arrayがsearchedされます)。それがarrayのlength以上である場合、falseが返されます、つまりarrayはsearchedされません。それが-0𝔽より小さい場合、arrayのendからのoffsetとして使用され、fromIndexをcomputeします。computed indexが+0𝔽以下である場合、whole arrayがsearchedされます。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. length = 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. klength + startIndexとする。
    2. k < 0なら、kを0に設定する。
  10. k < lengthの間、繰り返す
    1. elementKを ? Get(obj, ! ToString(𝔽(k))) とする。
    2. SameValueZero(searchElement, elementK)がtrueなら、trueを返す。
    3. kk + 1に設定する。
  11. falseを返す。
Note 2

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

Note 3

このmethodは、similarなindexOf methodと意図的にtwo waysで異なります。First、それはIsStrictlyEqualではなくSameValueZero algorithmを使用するため、NaN array elementsをdetectできます。Second、それはmissing array elementsをskipせず、代わりにundefinedとして扱います。

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

このmethodは、IsStrictlyEqual algorithmを使用してsearchElementをarrayのelementsとascending orderでcompareし、one or more indicesでfoundされる場合はそのsmallest such indexを返します;そうでなければ、-1𝔽を返します。

Note 1

optional second argument fromIndex+0𝔽をdefaultとします(つまり、whole arrayがsearchedされます)。それがarrayのlength以上である場合、-1𝔽が返されます、つまりarrayはsearchedされません。それが-0𝔽より小さい場合、arrayのendからのoffsetをcomputeするために使用されます。computed indexが+0𝔽以下である場合、whole arrayがsearchedされます。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. length = 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. klength + startIndexとする。
    2. k < 0なら、kを0に設定する。
  10. k < lengthの間、繰り返す
    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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.18 Array.prototype.join ( separator )

このmethodはarrayのelementsをStringsへconvertし、その後、separatorのoccurrencesでseparatedしてそれらのStringsをconcatenateします。separatorがprovidedされない場合、single commaがseparatorとして使用されます。

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

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. separatorundefinedなら、sep","とする。
  4. そうでなければ、sepを ? ToString(separator) とする。
  5. resultをempty Stringとする。
  6. kを0とする。
  7. k < lengthの間、繰り返す
    1. k > 0なら、resultresultsepstring-concatenationに設定する。
    2. elementを ? Get(obj, ! ToString(𝔽(k))) とする。
    3. elementundefinedでもnullでもないなら、
      1. elementStringを ? ToString(element) とする。
      2. resultresultelementStringstring-concatenationに設定する。
    4. kk + 1に設定する。
  8. resultを返す。
Note

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.19 Array.prototype.keys ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

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

Note 1

このmethodは、IsStrictlyEqual algorithmを使用してsearchElementをarrayのelementsとdescending orderでcompareし、one or more indicesでfoundされる場合はそのlargest such indexを返します;そうでなければ、-1𝔽を返します。

optional second argument fromIndexはarrayのlength minus oneをdefaultとします(つまり、whole arrayがsearchedされます)。それがarrayのlength以上である場合、whole arrayがsearchedされます。それが-0𝔽より小さい場合、arrayのendからのoffsetをcomputeするために使用されます。computed indexが-0𝔽より小さい場合、-1𝔽が返されます。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. length = 0なら、-1𝔽を返す。
  4. fromIndexがpresentなら、startIndexを ? ToIntegerOrInfinity(fromIndex) とする;そうでなければ、startIndexlength - 1とする。
  5. startIndex = -∞なら、-1𝔽を返す。
  6. startIndex ≥ 0なら、
    1. kmin(startIndex, length - 1)とする。
  7. そうでなければ、
    1. klength + 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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

callbackはthree argumentsをacceptするfunctionであるべきです。mapは、array内の各elementについてascending orderでcallbackをonce呼び出し、そのresultsからnew Arrayをconstructします。callbackは、arrayの実際にexistするelementsに対してのみ呼び出されます;arrayのmissing elementsに対しては呼び出されません。

thisArg parameterがprovidedされる場合、callbackの各invocationに対するthis valueとして使用されます。providedされない場合、代わりにundefinedが使用されます。

callbackはthree argumentsで呼び出されます:elementのvalue、elementのindex、およびtraversedされているobjectです。

mapは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはcallbackへのcallsによってmutateされる可能性があります。

mapによってprocessedされるelementsのrangeは、callbackへのfirst callの前にsetされます。mapへのcallがbeginした後にarrayへappendedされたelementsは、callbackによってvisitedされません。arrayのexisting elementsがchangedされた場合、callbackへpassedされるそのvalueは、mapがそれらをvisitする時点のvalueになります;mapへのcallがbeginした後、visitedされる前にdeletedされたelementsはvisitedされません。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  4. arrayを ? ArraySpeciesCreate(obj, length) とする。
  5. kを0とする。
  6. k < lengthの間、繰り返す
    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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.22 Array.prototype.pop ( )

Note 1

このmethodはarrayのlast elementをremoveし、それを返します。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

このmethodは、argumentsを、それらがappearするorderでarrayのendへappendします。これはarrayのnew lengthを返します。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. argCountitems内のelementsの数とする。
  4. length + argCount > 253 - 1なら、TypeError例外をthrowする。
  5. itemsの各要素itemについて、以下を行う
    1. Set(obj, ! ToString(𝔽(length)), item, true)を実行する。
    2. lengthlength + 1に設定する。
  6. Set(obj, "length", 𝔽(length), true)を実行する。
  7. 𝔽(length)を返す。

このmethodの"length" propertyは1𝔽です。

Note 2

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

callbackはfour argumentsを取るfunctionであるべきです。reduceは、initialValueがprovidedされない限りfirst elementをskippingしながら、array内にpresentな各elementについてascending orderでcallbackをonce呼び出します。

callbackはfour argumentsで呼び出されます:previousValuecallbackへのprevious callからのvalue)、currentValue(current elementのvalue)、currentIndex、およびtraversedされているobjectです。callbackがfirst time呼び出されるとき、previousValuecurrentValueはtwo valuesのいずれかになり得ます。reduceへのcallでinitialValueがsuppliedされた場合、previousValueinitialValueになり、currentValueはarray内のfirst valueになります。initialValueがsuppliedされなかった場合、previousValueはarray内のfirst valueになり、currentValueはsecondになります。arrayがelementsを含まず、かつinitialValueがprovidedされない場合、TypeErrorです。

reduceは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはcallbackへのcallsによってmutateされる可能性があります。

reduceによってprocessedされるelementsのrangeは、callbackへのfirst callの前にsetされます。reduceへのcallがbeginした後にarrayへappendedされたelementsは、callbackによってvisitedされません。arrayのexisting elementsがchangedされた場合、callbackへpassedされるそのvalueは、reduceがそれらをvisitする時点のvalueになります;reduceへのcallがbeginした後、visitedされる前にdeletedされたelementsはvisitedされません。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  4. length = 0であり、かつinitialValueがpresentでないなら、TypeError例外をthrowする。
  5. kを0とする。
  6. accumulatorundefinedとする。
  7. initialValueがpresentなら、
    1. accumulatorinitialValueに設定する。
  8. そうでなければ、
    1. kPresentfalseとする。
    2. kPresentfalseであり、かつk < lengthである間、繰り返す
      1. propertyKeyを ! ToString(𝔽(k)) とする。
      2. kPresentを ? HasProperty(obj, propertyKey) に設定する。
      3. kPresenttrueなら、
        1. accumulatorを ? Get(obj, propertyKey) に設定する。
      4. kk + 1に設定する。
    3. kPresentfalseなら、TypeError例外をthrowする。
  9. k < lengthの間、繰り返す
    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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

callbackはfour argumentsを取るfunctionであるべきです。reduceRightは、initialValueがprovidedされない限りfirst callをskippingしながら、array内にpresentな各elementについてdescending orderでcallbackをonce呼び出します。

callbackはfour argumentsで呼び出されます:previousValuecallbackへのprevious callからのvalue)、currentValue(current elementのvalue)、currentIndex、およびtraversedされているobjectです。functionがfirst time呼び出されるとき、previousValuecurrentValueはtwo valuesのいずれかになり得ます。reduceRightへのcallでinitialValueがsuppliedされた場合、previousValueinitialValueになり、currentValueはarray内のlast valueになります。initialValueがsuppliedされなかった場合、previousValueはarray内のlast valueになり、currentValueはsecond-to-last valueになります。arrayがelementsを含まず、かつinitialValueがprovidedされない場合、TypeErrorです。

reduceRightは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはcallbackへのcallsによってmutateされる可能性があります。

reduceRightによってprocessedされるelementsのrangeは、callbackへのfirst callの前にsetされます。reduceRightへのcallがbeginした後にarrayへappendedされたelementsは、callbackによってvisitedされません。arrayのexisting elementsがcallbackによってchangedされた場合、callbackへpassedされるそのvalueは、reduceRightがそれらをvisitする時点のvalueになります;reduceRightへのcallがbeginした後、visitedされる前にdeletedされたelementsはvisitedされません。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  4. length = 0であり、かつinitialValueがpresentでないなら、TypeError例外をthrowする。
  5. klength - 1とする。
  6. accumulatorundefinedとする。
  7. initialValueがpresentなら、
    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例外をthrowする。
  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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.26 Array.prototype.reverse ( )

Note 1

このmethodはarrayのelementsをrearrangeし、そのorderをreverseします。これはreversed arrayを返します。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. middlefloor(length / 2)とする。
  4. lowerを0とする。
  5. lowermiddleの間、繰り返す
    1. upperlength - 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: lowerExistsおよびupperExistsはともにfalseである。
      2. NOTE: actionはrequiredされない。
    12. lowerlower + 1に設定する。
  6. objを返す。
Note 2

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.27 Array.prototype.shift ( )

このmethodはarrayのfirst elementをremoveし、それを返します。

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

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. length = 0なら、
    1. Set(obj, "length", +0𝔽, true)を実行する。
    2. undefinedを返す。
  4. firstを ? Get(obj, "0") とする。
  5. kを1とする。
  6. k < lengthの間、繰り返す
    1. fromを ! ToString(𝔽(k)) とする。
    2. toを ! ToString(𝔽(k - 1)) とする。
    3. fromPresentを ? HasProperty(obj, from) とする。
    4. 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(𝔽(length - 1)))を実行する。
  8. Set(obj, "length", 𝔽(length - 1), true)を実行する。
  9. firstを返す。
Note

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.28 Array.prototype.slice ( start, end )

このmethodは、element startからelement endまで(ただしendを含まない)のarrayのelementsを含むarrayを返します(またはendundefinedならarrayのendまで)。startがnegativeなら、lengthをarrayのlengthとしてlength + startとして扱われます。endがnegativeなら、lengthをarrayのlengthとしてlength + endとして扱われます。

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

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. relativeStartを ? ToIntegerOrInfinity(start) とする。
  4. relativeStart = -∞なら、kを0とする。
  5. そうでなく、relativeStart < 0なら、kmax(length + relativeStart, 0)とする。
  6. そうでなければ、kmin(relativeStart, length)とする。
  7. endundefinedなら、relativeEndlengthとする;そうでなければ、relativeEndを ? ToIntegerOrInfinity(end) とする。
  8. relativeEnd = -∞なら、finalを0とする。
  9. そうでなく、relativeEnd < 0なら、finalmax(length + relativeEnd, 0)とする。
  10. そうでなければ、finalmin(relativeEnd, length)とする。
  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

step 15における"length" propertyのexplicit settingは、arrayがbuilt-in Arrayでない場合であってもlengthがcorrectであることをensureすることを意図しています。

Note 2

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

Note 1

callbackはthree argumentsをacceptし、Boolean valueへcoercibleなvalueを返すfunctionであるべきです。someは、callbacktrueを返すoneをfindするまで、array内にpresentな各elementについてascending orderでcallbackをonce呼び出します。そのようなelementが見つかると、someはimmediately trueを返します。そうでなければ、somefalseを返します。callbackは、arrayの実際にexistするelementsに対してのみ呼び出されます;arrayのmissing elementsに対しては呼び出されません。

thisArg parameterがprovidedされる場合、callbackの各invocationに対するthis valueとして使用されます。providedされない場合、代わりにundefinedが使用されます。

callbackはthree argumentsで呼び出されます:elementのvalue、elementのindex、およびtraversedされているobjectです。

someは、それが呼び出されたobjectをdirectlyにはmutateしませんが、objectはcallbackへのcallsによってmutateされる可能性があります。

someによってprocessedされるelementsのrangeは、callbackへのfirst callの前にsetされます。someへのcallがbeginした後にarrayへappendedされたelementsは、callbackによってvisitedされません。arrayのexisting elementsがchangedされた場合、callbackへpassedされるそのvalueは、someがそれらをvisitする時点のvalueになります;someへのcallがbeginした後、visitedされる前にdeletedされたelementsはvisitedされません。someは数学における“exists” quantifierのようにactします。特に、empty arrayについてはfalseを返します。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  4. kを0とする。
  5. k < lengthの間、繰り返す
    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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.30 Array.prototype.sort ( comparator )

このmethodはthis arrayのelementsをsortします。comparatorundefinedでないなら、それはtwo arguments xおよびyをacceptし、x < yならnegative Number、x > yならpositive Number、そうでなければzeroを返すfunctionであるべきです。

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

  1. comparatorundefinedでなく、かつIsCallable(comparator)がfalseなら、TypeError例外をthrowする。
  2. objを ? ToObject(this value) とする。
  3. lengthを ? LengthOfArrayLike(obj) とする。
  4. sortCompareを、comparatorをcaptureし、calledされたときに次のstepsを実行する、parameters (x, y)を持つnew Abstract Closureとする:
    1. CompareArrayElements(x, y, comparator)を返す。
  5. sortedListを ? SortIndexedProperties(obj, length, sortCompare, skip-holes) とする。
  6. itemCountsortedList内のelementsの数とする。
  7. jを0とする。
  8. j < itemCountの間、繰り返す
    1. Set(obj, ! ToString(𝔽(j)), sortedList[j], true)を実行する。
    2. jj + 1に設定する。
  9. NOTE: step 5SortIndexedPropertiesへのcallはskip-holesを使用する。remaining indicesは、sortからdetectedおよびexcludedされたholesの数をpreserveするためにdeletedされる。
  10. j < lengthの間、繰り返す
    1. DeletePropertyOrThrow(obj, ! ToString(𝔽(j)))を実行する。
    2. jj + 1に設定する。
  11. objを返す。
Note 1

non-existent property valuesは常にundefined property valuesよりgreaterとしてcompareされ、undefinedは常にany other valueよりgreaterとしてcompareされるため(CompareArrayElementsを参照)、undefined property valuesは常にresultのendへsortされ、その後にnon-existent property valuesがfollowします。

Note 2

steps 5および6内のToString abstract operationsによってperformedされるmethod callsは、sortCompareconsistent comparatorとしてbehaveしなくなる可能性があります。

Note 3

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.30.1 SortIndexedProperties ( obj, length, sortCompare, holes )

The abstract operation SortIndexedProperties takes arguments obj (an Object), length (a non-negative integer), sortCompare (an Abstract Closure with two parameters), and holes (skip-holes or read-through-holes) and returns either a normal completion containing a List of ECMAScript language values or a throw completion. It performs the following steps when called:

  1. itemsを新しい空のListとする。
  2. kを0とする。
  3. k < lengthの間、繰り返す
    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へappendする。
    5. kk + 1に設定する。
  4. implementation-defined sequence of calls to sortCompareを使用してitemsをSortする。そのようなcallのいずれかがabrupt completionを返す場合、sortCompareへのそれ以上のcallsをperformする前にstopし、そのCompletion Recordを返す。
  5. itemsを返す。

sort orderは、上記algorithmのstep 4のcompletion後のitemsのorderingです。sortCompareitemsのelementsに対するconsistent comparatorでない場合、sort orderimplementation-definedです。SortIndexedPropertiesがArray.prototype.sortまたはArray.prototype.toSortedによってinvokedされる場合、comparatorundefinedであり、かつsortCompareへのargumentとしてpassedされたany specific valueへのToStringのすべてのapplicationsがsame resultをproduceしない場合にも、sort orderimplementation-definedです。

sort orderimplementation-definedであるとspecifiedされていない限り、次のconditionsのすべてをsatisfyしなければなりません:

  • itemCountより小さいnon-negative integersのmathematical permutation πが存在し、itemCountより小さいevery non-negative integer jについて、element old[j]new[π(j)]とexactly the sameでなければなりません。
  • そして、itemCountより小さいすべてのnon-negative integers jおよびkについて、(sortCompare(old[j], old[k])) < 0なら、π(j) < π(k)です。
  • さらに、j < k < itemCountであるすべてのnon-negative integers jおよびkについて、(sortCompare(old[j], old[k])) = 0なら、π(j) < π(k)です;つまり、sortはstableです。

ここでnotation old[j]は、step 4がexecutedされる前のitems[j]をreferするために使用され、notation new[j]は、step 4がexecutedされた後のitems[j]をreferするために使用されます。

Abstract Closureまたはfunction comparatorは、set values内のall values ab、およびc(possibly the same value)について以下のrequirementsのすべてが満たされる場合、valuesのset valuesに対するconsistent comparatorです:notation a <C b(comparator(a, b)) < 0を意味します;a =C b(comparator(a, b)) = 0を意味します;そしてa >C b(comparator(a, b)) > 0を意味します。

  • comparator(a, b)をcallingすると、two argumentsとしてspecific pair of values aおよびbがgivenされたとき、常にsame value vを返します。さらに、vはNumberであり、vNaNではありません。これは、given pair of aおよびbについて、a <C ba =C b、およびa >C bのexactly oneがtrueになることをimplyすることに注意してください。
  • comparator(a, b)をcallingしても、objまたはobjのprototype chain上のany objectをmodifyしません。
  • a =C a(reflexivity)
  • a =C bなら、b =C a(symmetry)
  • a =C bであり、かつb =C cなら、a =C c(transitivity of =C
  • a <C bであり、かつb <C cなら、a <C c(transitivity of <C
  • a >C bであり、かつb >C cなら、a >C c(transitivity of >C
Note

上記のconditionsは、comparatorがset valuesをequivalence classesへdivideし、これらのequivalence classesがtotally orderedであることをensureするためにnecessary and sufficientです。

23.1.3.30.2 CompareArrayElements ( x, y, comparator )

The abstract operation CompareArrayElements takes arguments x (an ECMAScript language value), y (an ECMAScript language value), and comparator (a function object or undefined) and returns either a normal completion containing a Number or an abrupt completion. 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

このmethodはinteger index startからstartingするarrayのdeleteCount elementsをdeleteし、それらをitemsのelementsでreplaceします。これはdeleted elements(もしあれば)を含むArrayを返します。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. relativeStartを ? ToIntegerOrInfinity(start) とする。
  4. relativeStart = -∞なら、actualStartを0とする。
  5. そうでなく、relativeStart < 0なら、actualStartmax(length + relativeStart, 0)とする。
  6. そうでなければ、actualStartmin(relativeStart, length)とする。
  7. itemCountitems内のelementsの数とする。
  8. startがpresentでないなら、
    1. actualDeleteCountを0とする。
  9. そうでなく、deleteCountがpresentでないなら、
    1. actualDeleteCountlength - actualStartとする。
  10. そうでなければ、
    1. dcを ? ToIntegerOrInfinity(deleteCount) とする。
    2. actualDeleteCountdcを0とlength - actualStartの間にclampingしたresultとする。
  11. length + itemCount - actualDeleteCount > 253 - 1なら、TypeError例外をthrowする。
  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 < (length - actualDeleteCount)の間、繰り返す
      1. fromを ! ToString(𝔽(k + actualDeleteCount)) とする。
      2. toを ! ToString(𝔽(k + itemCount)) とする。
      3. HasProperty(obj, from)がtrueなら、
        1. fromValueを ? Get(obj, from) とする。
        2. Set(obj, to, fromValue, true)を実行する。
      4. そうでなければ、
        1. DeletePropertyOrThrow(obj, to)を実行する。
      5. kk + 1に設定する。
    3. klengthに設定する。
    4. k > (length - actualDeleteCount + itemCount)の間、繰り返す
      1. DeletePropertyOrThrow(obj, ! ToString(𝔽(k - 1)))を実行する。
      2. kk - 1に設定する。
  17. そうでなく、itemCount > actualDeleteCountなら、
    1. kを(length - actualDeleteCount)に設定する。
    2. k > actualStartの間、繰り返す
      1. fromを ! ToString(𝔽(k + actualDeleteCount - 1)) とする。
      2. toを ! ToString(𝔽(k + itemCount - 1)) とする。
      3. HasProperty(obj, from)がtrueなら、
        1. fromValueを ? Get(obj, from) とする。
        2. Set(obj, to, fromValue, true)を実行する。
      4. そうでなければ、
        1. DeletePropertyOrThrow(obj, to)を実行する。
      5. kk - 1に設定する。
  18. kactualStartに設定する。
  19. itemsの各要素itemについて、以下を行う
    1. Set(obj, ! ToString(𝔽(k)), item, true)を実行する。
    2. kk + 1に設定する。
  20. Set(obj, "length", 𝔽(length - actualDeleteCount + itemCount), true)を実行する。
  21. deletedArrayを返す。
Note 2

steps 15および20における"length" propertyのexplicit settingは、objectsがbuilt-in Arraysでない場合であってもlengthsがcorrectであることをensureすることを意図しています。

Note 3

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

ECMA-402 Internationalization APIを含むECMAScript implementationは、このmethodをECMA-402 specificationで指定される通りにimplementしなければなりません。ECMAScript implementationがECMA-402 APIを含まない場合、このmethodの次のspecificationが使用されます。

Note 1

ECMA-402のfirst editionは、このmethodのreplacement specificationを含みませんでした。

このmethodのoptional parametersのmeaningsはECMA-402 specificationで定義されます;ECMA-402 supportを含まないimplementationsは、それらのparameter positionsを他の何かに使用してはなりません。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. arrayを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(array) とする。
  3. separatorを、host environmentのcurrent localeにappropriateなimplementation-defined list-separator String value(", "など)とする。
  4. resultをempty Stringとする。
  5. kを0とする。
  6. k < lengthの間、繰り返す
    1. k > 0なら、resultresultseparatorstring-concatenationに設定する。
    2. elementを ? Get(array, ! ToString(𝔽(k))) とする。
    3. elementundefinedでもnullでもないなら、
      1. elementStringを ? ToString(? Invoke(element, "toLocaleString")) とする。
      2. resultresultelementStringstring-concatenationに設定する。
    4. kk + 1に設定する。
  7. resultを返す。
Note 2

このmethodはarrayのelementsをそれらのtoLocaleString methodsを使用してStringsへconvertし、その後、implementation-defined locale-sensitive separator StringのoccurrencesでseparatedしてそれらのStringsをconcatenateします。このmethodはtoStringにanalogousですが、host environmentのcurrent localeのconventionsに対応するlocale-sensitive resultをyieldすることを意図している点が異なります。

Note 3

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.33 Array.prototype.toReversed ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

23.1.3.34 Array.prototype.toSorted ( comparator )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. comparatorundefinedでなく、かつIsCallable(comparator)がfalseなら、TypeError例外をthrowする。
  2. objを ? ToObject(this value) とする。
  3. lengthを ? LengthOfArrayLike(obj) とする。
  4. arrayを ? ArrayCreate(length) とする。
  5. sortCompareを、comparatorをcaptureし、calledされたときに次のstepsを実行する、parameters (x, y)を持つnew Abstract Closureとする:
    1. CompareArrayElements(x, y, comparator)を返す。
  6. sortedListを ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) とする。
  7. jを0とする。
  8. j < lengthの間、繰り返す
    1. CreateDataPropertyOrThrow(array, ! ToString(𝔽(j)), sortedList[j])を実行する。
    2. jj + 1に設定する。
  9. arrayを返す。

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

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. relativeStartを ? ToIntegerOrInfinity(start) とする。
  4. relativeStart = -∞なら、actualStartを0とする。
  5. そうでなく、relativeStart < 0なら、actualStartmax(length + relativeStart, 0)とする。
  6. そうでなければ、actualStartmin(relativeStart, length)とする。
  7. insertCountitems内のelementsの数とする。
  8. startがpresentでないなら、
    1. actualSkipCountを0とする。
  9. そうでなく、skipCountがpresentでないなら、
    1. actualSkipCountlength - actualStartとする。
  10. そうでなければ、
    1. scを ? ToIntegerOrInfinity(skipCount) とする。
    2. actualSkipCountscを0とlength - actualStartの間にclampingしたresultとする。
  11. newLengthlength + insertCount - actualSkipCountとする。
  12. newLength > 253 - 1なら、TypeError例外をthrowする。
  13. newArrayを ? ArrayCreate(newLength) とする。
  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 < newLengthの間、繰り返す
    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 ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

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

このmethodは、argumentsをarrayのstartへprependし、array内でのそれらのorderがargument list内でappearするorderとsameになるようにします。

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

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. argCountitems内のelementsの数とする。
  4. argCount > 0なら、
    1. length + argCount > 253 - 1なら、TypeError例外をthrowする。
    2. klengthとする。
    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", 𝔽(length + argCount), true)を実行する。
  6. 𝔽(length + argCount)を返す。

このmethodの"length" propertyは1𝔽です。

Note

このmethodは意図的にgenericです;そのthis valueがArrayであることをrequireしません。したがって、methodとして使用するために他の種類のobjectsへtransferできます。

23.1.3.38 Array.prototype.values ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

23.1.3.39 Array.prototype.with ( index, value )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objを ? ToObject(this value) とする。
  2. lengthを ? LengthOfArrayLike(obj) とする。
  3. relativeIndexを ? ToIntegerOrInfinity(index) とする。
  4. relativeIndex ≥ 0なら、actualIndexrelativeIndexとする。
  5. そうでなければ、actualIndexlength + relativeIndexとする。
  6. actualIndexlengthまたはactualIndex < 0なら、RangeError例外をthrowする。
  7. arrayを ? ArrayCreate(length) とする。
  8. kを0とする。
  9. k < lengthの間、繰り返す
    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% propertyのinitial valueは、23.1.3.38で定義される%Array.prototype.values%です。

23.1.3.41 Array.prototype [ %Symbol.unscopables% ]

%Symbol.unscopables% data propertyのinitial valueは、次のstepsによって作成されるobjectです:

  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を返す。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。

Note

このobjectのown property namesは、ECMAScript 2015 specificationより前にArray.prototypeのstandard propertiesとして含まれていなかったproperty namesです。これらのnamesは、binding purposesにおけるwith statementについてignoredされます。これは、outer scope内のbindingとしてこれらのnamesのいずれかを使用し、そのbindingがbinding objectがArrayであるwith statementによってshadowedされる可能性のあるexisting codeのbehaviourをpreserveするためです。

"with"unscopableListに含まれないreasonは、それがすでにreserved wordだからです。

23.1.4 Properties of Array Instances

Array instancesはArray exotic objectsであり、そのようなobjectsに対して指定されたinternal methodsを持ちます。Array instancesはArray prototype objectからpropertiesをinheritします。

Array instancesは"length" property、およびarray index namesを持つenumerable propertiesのsetを持ちます。

23.1.4.1 length

Array instanceの"length" propertyは、そのvalueが、nameがarray indexであるすべてのconfigurable own propertyのnameより常にnumerically greaterであるdata propertyです。

"length" propertyはinitially attributes { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

Note

"length" propertyのvalueをreducingすることには、array indexがold length valueとnew length valueの間にあるown array elementsをdeletingするside-effectがあります。しかし、non-configurable propertiesはdeleteできません。Arrayの"length" propertyを、arrayのexisting non-configurable array-indexed propertyのlargest numeric own property name以下のnumeric valueへsetしようとすると、そのlengthは、そのnon-configurable numeric own property nameよりone greaterであるnumeric valueにsetされるresultになります。10.4.2.1を参照してください。

23.1.5 Array Iterator Objects

Array Iteratorは、some specific Array instance object上のspecific iterationを表すobjectです。Array Iterator objectsにはnamed constructorは存在しません。代わりに、Array Iterator objectsはArray instance objectsのcertain methodsを呼び出すことで作成されます。

23.1.5.1 CreateArrayIterator ( array, kind )

The abstract operation CreateArrayIterator takes arguments array (an Object) and kind (key+value, key, or value) and returns an Object. これは、そのようなiteratorsを返すArray methodsのためにiterator objectsを作成するために使用されます。 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 The %ArrayIteratorPrototype% Object

%ArrayIteratorPrototype% objectは:

23.1.5.2.1 %ArrayIteratorPrototype%.next ( )

  1. iteratorObjthis valueとする。
  2. iteratorObjがObjectでないなら、TypeError例外をthrowする。
  3. iteratorObjArray Iterator Instanceのすべてのinternal slots(23.1.5.3)を持たないなら、TypeError例外をthrowする。
  4. arrayiteratorObj.[[IteratedArrayLike]]とする。
  5. arrayundefinedなら、CreateIteratorResultObject(undefined, true)を返す。
  6. indexiteratorObj.[[ArrayLikeNextIndex]]とする。
  7. kinditeratorObj.[[ArrayLikeIterationKind]]とする。
  8. array[[TypedArrayName]] internal slotを持つなら、
    1. taRecordMakeTypedArrayWithBufferWitnessRecord(array, seq-cst)とする。
    2. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
    3. lengthTypedArrayLength(taRecord)とする。
  9. そうでなければ、
    1. lengthを ? LengthOfArrayLike(array) とする。
  10. indexlengthなら、
    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% propertyのinitial valueはString value "Array Iterator"です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }を持ちます。

23.1.5.3 Properties of Array Iterator Instances

Array Iterator instancesは、%ArrayIteratorPrototype% intrinsic objectからpropertiesをinheritするordinary objectsです。Array Iterator instancesは、Table 70にlistedされたinternal slotsを持ってinitiallyに作成されます。

Table 70: Internal Slots of Array Iterator Instances
Internal Slot Type Description
[[IteratedArrayLike]] an Object or undefined iterateされているarray-like object
[[ArrayLikeNextIndex]] a non-negative integer このiteratorによって次にexaminedされるelementのinteger index
[[ArrayLikeIterationKind]] key+value, key, or value iterationの各elementについて何がreturnedされるかをidentifyするvalue。

23.2 TypedArray Objects

TypedArrayは、underlying binary data buffer(25.1)のarray-like viewを提供します。TypedArray element typeは、TypedArray instanceのすべてのelementsが持つunderlying binary scalar data typeです。supported element typesのそれぞれについて、Table 71にlistedされているdistinctなTypedArray constructorがあります。Table 71内の各constructorは、corresponding distinct prototype objectを持ちます。

Table 71: The TypedArray Constructors
Constructor Name and Intrinsic Element Type Element Size Conversion Operation Description
Int8Array
%Int8Array%
int8 1 ToInt8 8-bit two's complement signed integer
Uint8Array
%Uint8Array%
uint8 1 ToUint8 8-bit unsigned integer
Uint8ClampedArray
%Uint8ClampedArray%
uint8clamped 1 ToUint8Clamp 8-bit unsigned integer (clamped conversion)
Int16Array
%Int16Array%
int16 2 ToInt16 16-bit two's complement signed integer
Uint16Array
%Uint16Array%
uint16 2 ToUint16 16-bit unsigned integer
Int32Array
%Int32Array%
int32 4 ToInt32 32-bit two's complement signed integer
Uint32Array
%Uint32Array%
uint32 4 ToUint32 32-bit unsigned integer
BigInt64Array
%BigInt64Array%
bigint64 8 ToBigInt64 64-bit two's complement signed integer
BigUint64Array
%BigUint64Array%
biguint64 8 ToBigUint64 64-bit unsigned integer
Float16Array
%Float16Array%
float16 2 16-bit IEEE floating point
Float32Array
%Float32Array%
float32 4 32-bit IEEE floating point
Float64Array
%Float64Array%
float64 8 64-bit IEEE floating point

以下のdefinitionsでは、TypedArrayへのreferencesは、上のtableからappropriate constructor nameで置き換えられるべきです。

23.2.1 The %TypedArray% Intrinsic Object

%TypedArray% intrinsic objectは:

  • すべてのTypedArray constructor objectsがinheritするconstructor function objectです。
  • そのcorresponding prototype objectとともに、すべてのTypedArray constructorsおよびそのinstancesによってinheritedされるcommon propertiesを提供します。
  • global nameを持たず、global objectのpropertyとして現れません。
  • various TypedArray constructorsのabstract superclassとしてactします。
  • abstract class constructorであるため、invokedされるとerrorをthrowします。TypedArray constructorsはこれに対するsuper callをperformしません。

23.2.1.1 %TypedArray% ( )

このfunctionは呼び出されたとき、次のstepsを実行します:

  1. TypeError例外をthrowする。

このfunctionの"length" propertyは+0𝔽です。

23.2.2 Properties of the %TypedArray% Intrinsic Object

%TypedArray% intrinsic objectは:

  • valueが%Function.prototype%である[[Prototype]] internal slotを持ちます。
  • valueが"TypedArray"である"name" propertyを持ちます。
  • 次のpropertiesを持ちます:

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

このmethodは呼び出されたとき、次のstepsを実行します:

  1. ctorthis valueとする。
  2. IsConstructor(ctor)がfalseなら、TypeError例外をthrowする。
  3. mapperundefinedなら、
    1. mappingfalseとする。
  4. そうでなければ、
    1. IsCallable(mapper)がfalseなら、TypeError例外をthrowする。
    2. mappingtrueとする。
  5. usingIteratorを ? GetMethod(source, %Symbol.iterator%) とする。
  6. usingIteratorundefinedでないなら、
    1. valuesを ? IteratorToList(? GetIteratorFromMethod(source, usingIterator)) とする。
    2. lengthvalues内のelementsの数とする。
    3. targetObjを ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
    4. kを0とする。
    5. k < lengthの間、繰り返す
      1. propertyKeyを ! ToString(𝔽(k)) とする。
      2. kValuevaluesのfirst elementとする。
      3. valuesからfirst elementをremoveする。
      4. mappingtrueなら、
        1. mappedValueを ? Call(mapper, thisArg, « kValue, 𝔽(k) ») とする。
      5. そうでなければ、
        1. mappedValuekValueとする。
      6. Set(targetObj, propertyKey, mappedValue, true)を実行する。
      7. kk + 1に設定する。
    6. Assert: valuesは現在empty Listである。
    7. targetObjを返す。
  7. NOTE: sourceiterable objectではないため、すでにarray-like objectであるとassumeする。
  8. arrayLikeを ! ToObject(source) とする。
  9. lengthを ? LengthOfArrayLike(arrayLike) とする。
  10. targetObjを ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
  11. kを0とする。
  12. k < lengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. kValueを ? Get(arrayLike, propertyKey) とする。
    3. 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 )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. lengthitems内のelementsの数とする。
  2. ctorthis valueとする。
  3. IsConstructor(ctor)がfalseなら、TypeError例外をthrowする。
  4. newObjを ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
  5. kを0とする。
  6. k < lengthの間、繰り返す
    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のinitial valueは%TypedArray% prototype objectです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

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

%TypedArray%[%Symbol.species%]は、set accessor functionがundefinedであるaccessor propertyです。そのget accessor functionは呼び出されたとき、次のstepsを実行します:

  1. this valueを返す。

このfunctionの"name" propertyのvalueは"get [Symbol.species]"です。

Note

%TypedArray.prototype% methodsは通常、そのthis valueのconstructorを使用してderived objectを作成します。しかし、subclass constructorは、その%Symbol.species% propertyをredefiningすることにより、そのdefault behaviourをover-rideしてもよいです。

23.2.3 Properties of the %TypedArray% Prototype Object

%TypedArray% prototype objectは:

  • valueが%Object.prototype%である[[Prototype]] internal slotを持ちます。
  • %TypedArray.prototype%です。
  • ordinary objectです。
  • [[ViewedArrayBuffer]]や、TypedArray instance objectsにspecificなその他のinternal slotsを持ちません。

23.2.3.1 %TypedArray%.prototype.at ( index )

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. relativeIndexを ? ToIntegerOrInfinity(index) とする。
  5. relativeIndex ≥ 0なら、
    1. krelativeIndexとする。
  6. そうでなければ、
    1. klength + relativeIndexとする。
  7. k < 0またはklengthなら、undefinedを返す。
  8. Get(obj, ! ToString(𝔽(k)))を返す。

23.2.3.2 get %TypedArray%.prototype.buffer

%TypedArray%.prototype.bufferは、set accessor functionがundefinedであるaccessor propertyです。そのget accessor functionは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. RequireInternalSlot(obj, [[TypedArrayName]])を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] internal slotを持つ。
  4. bufferobj.[[ViewedArrayBuffer]]とする。
  5. bufferを返す。

23.2.3.3 get %TypedArray%.prototype.byteLength

%TypedArray%.prototype.byteLengthは、set accessor functionがundefinedであるaccessor propertyです。そのget accessor functionは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. RequireInternalSlot(obj, [[TypedArrayName]])を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] internal slotを持つ。
  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 accessor functionがundefinedであるaccessor propertyです。そのget accessor functionは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. RequireInternalSlot(obj, [[TypedArrayName]])を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] internal slotを持つ。
  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のinitial valueは%TypedArray%です。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.4で定義されるArray.prototype.copyWithinと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. relativeTargetを ? ToIntegerOrInfinity(target) とする。
  5. relativeTarget = -∞なら、targetIndexを0とする。
  6. そうでなく、relativeTarget < 0なら、targetIndexmax(length + relativeTarget, 0)とする。
  7. そうでなければ、targetIndexmin(relativeTarget, length)とする。
  8. relativeStartを ? ToIntegerOrInfinity(start) とする。
  9. relativeStart = -∞なら、startIndexを0とする。
  10. そうでなく、relativeStart < 0なら、startIndexmax(length + relativeStart, 0)とする。
  11. そうでなければ、startIndexmin(relativeStart, length)とする。
  12. endundefinedなら、relativeEndlengthとする;そうでなければ、relativeEndを ? ToIntegerOrInfinity(end) とする。
  13. relativeEnd = -∞なら、endIndexを0とする。
  14. そうでなく、relativeEnd < 0なら、endIndexmax(length + relativeEnd, 0)とする。
  15. そうでなければ、endIndexmin(relativeEnd, length)とする。
  16. countmin(endIndex - startIndex, length - targetIndex)とする。
  17. count > 0なら、
    1. NOTE: copyingはsource dataのbit-level encodingをpreserveするmannerでperformedされなければならない。
    2. bufferobj.[[ViewedArrayBuffer]]とする。
    3. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst)に設定する。
    4. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
    5. lengthTypedArrayLength(taRecord)に設定する。
    6. NOTE: 上記stepsのside-effectsによりobjのsizeがreducedされた可能性があり、そのcaseではcopyingはlongest still-applicable prefixでproceedすべきである。
    7. countmin(count, length - startIndex, length - 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 ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.6で定義されるArray.prototype.everyと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  5. kを0とする。
  6. k < lengthの間、繰り返す
    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を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.7で定義されるArray.prototype.fillと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. obj.[[ContentType]]bigintなら、valueを ? ToBigInt(value) に設定する。
  5. そうでなければ、valueを ? ToNumber(value) に設定する。
  6. relativeStartを ? ToIntegerOrInfinity(start) とする。
  7. relativeStart = -∞なら、startIndexを0とする。
  8. そうでなく、relativeStart < 0なら、startIndexmax(length + relativeStart, 0)とする。
  9. そうでなければ、startIndexmin(relativeStart, length)とする。
  10. endundefinedなら、relativeEndlengthとする;そうでなければ、relativeEndを ? ToIntegerOrInfinity(end) とする。
  11. relativeEnd = -∞なら、endIndexを0とする。
  12. そうでなく、relativeEnd < 0なら、endIndexmax(length + relativeEnd, 0)とする。
  13. そうでなければ、endIndexmin(relativeEnd, length)とする。
  14. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst)に設定する。
  15. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
  16. lengthTypedArrayLength(taRecord)に設定する。
  17. endIndexmin(endIndex, length)に設定する。
  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 ] )

このmethodのargumentsのinterpretationおよびuseは、23.1.3.8で定義されるArray.prototype.filterと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  5. keptを新しい空のListとする。
  6. capturedを0とする。
  7. kを0とする。
  8. k < lengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. kValueを ! Get(obj, propertyKey) とする。
    3. selectedToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »))とする。
    4. selectedtrueなら、
      1. kValuekeptへappendする。
      2. capturedcaptured + 1に設定する。
    5. kk + 1に設定する。
  9. resultを ? TypedArraySpeciesCreate(obj, « 𝔽(captured) ») とする。
  10. nを0とする。
  11. keptの各要素elementについて、以下を行う
    1. Set(result, ! ToString(𝔽(n)), element, true)を実行する。
    2. nn + 1に設定する。
  12. resultを返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.9で定義されるArray.prototype.findと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.10で定義されるArray.prototype.findIndexと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.11で定義されるArray.prototype.findLastと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.12で定義されるArray.prototype.findLastIndexと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

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

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.15で定義されるArray.prototype.forEachと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  5. kを0とする。
  6. k < lengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. kValueを ! Get(obj, propertyKey) とする。
    3. Call(callback, thisArg, « kValue, 𝔽(k), obj »)を実行する。
    4. kk + 1に設定する。
  7. undefinedを返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.16で定義されるArray.prototype.includesと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. length = 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. klength + nとする。
    2. k < 0なら、kを0に設定する。
  11. k < lengthの間、繰り返す
    1. elementKを ! Get(obj, ! ToString(𝔽(k))) とする。
    2. SameValueZero(searchElement, elementK)がtrueなら、trueを返す。
    3. kk + 1に設定する。
  12. falseを返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.17で定義されるArray.prototype.indexOfと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. length = 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. klength + nとする。
    2. k < 0なら、kを0に設定する。
  11. k < lengthの間、繰り返す
    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𝔽を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

23.2.3.18 %TypedArray%.prototype.join ( separator )

このmethodのargumentsのinterpretationおよびuseは、23.1.3.18で定義されるArray.prototype.joinと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. separatorundefinedなら、sep","とする。
  5. そうでなければ、sepを ? ToString(separator) とする。
  6. resultをempty Stringとする。
  7. kを0とする。
  8. k < lengthの間、繰り返す
    1. k > 0なら、resultresultsepstring-concatenationに設定する。
    2. elementを ! Get(obj, ! ToString(𝔽(k))) とする。
    3. elementundefinedでないなら、
      1. elementStringを ! ToString(element) とする。
      2. resultresultelementStringstring-concatenationに設定する。
    4. kk + 1に設定する。
  9. resultを返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

23.2.3.19 %TypedArray%.prototype.keys ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.20で定義されるArray.prototype.lastIndexOfと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. length = 0なら、-1𝔽を返す。
  5. fromIndexがpresentなら、nを ? ToIntegerOrInfinity(fromIndex) とする;そうでなければ、nlength - 1とする。
  6. n = -∞なら、-1𝔽を返す。
  7. n ≥ 0なら、
    1. kmin(n, length - 1)とする。
  8. そうでなければ、
    1. klength + 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𝔽を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

23.2.3.21 get %TypedArray%.prototype.length

%TypedArray%.prototype.lengthは、set accessor functionがundefinedであるaccessor propertyです。そのget accessor functionは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. RequireInternalSlot(obj, [[TypedArrayName]])を実行する。
  3. Assert: obj[[ViewedArrayBuffer]]および[[ArrayLength]] internal slotsを持つ。
  4. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst)とする。
  5. IsTypedArrayOutOfBounds(taRecord)がtrueなら、+0𝔽を返す。
  6. lengthTypedArrayLength(taRecord)とする。
  7. 𝔽(length)を返す。

このfunctionはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.21で定義されるArray.prototype.mapと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  5. resultを ? TypedArraySpeciesCreate(obj, « 𝔽(length) ») とする。
  6. kを0とする。
  7. k < lengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. kValueを ! Get(obj, propertyKey) とする。
    3. mappedValueを ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») とする。
    4. Set(result, propertyKey, mappedValue, true)を実行する。
    5. kk + 1に設定する。
  8. resultを返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.24で定義されるArray.prototype.reduceと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  5. length = 0であり、かつinitialValueがpresentでないなら、TypeError例外をthrowする。
  6. kを0とする。
  7. accumulatorundefinedとする。
  8. initialValueがpresentなら、
    1. accumulatorinitialValueに設定する。
  9. そうでなければ、
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. accumulatorを ! Get(obj, propertyKey) に設定する。
    3. kk + 1に設定する。
  10. k < lengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. kValueを ! Get(obj, propertyKey) とする。
    3. accumulatorを ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») に設定する。
    4. kk + 1に設定する。
  11. accumulatorを返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.25で定義されるArray.prototype.reduceRightと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  5. length = 0であり、かつinitialValueがpresentでないなら、TypeError例外をthrowする。
  6. klength - 1とする。
  7. accumulatorundefinedとする。
  8. initialValueがpresentなら、
    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を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

23.2.3.25 %TypedArray%.prototype.reverse ( )

このmethodのargumentsのinterpretationおよびuseは、23.1.3.26で定義されるArray.prototype.reverseと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. middlefloor(length / 2)とする。
  5. lowerを0とする。
  6. lowermiddleの間、繰り返す
    1. upperlength - 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を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodは、このTypedArray内のmultiple valuesをsetし、sourceからvaluesを読み取ります。detailsはsourceのtypeに基づいて異なります。optional offset valueは、valuesがwrittenされるこのTypedArray内のfirst element indexを示します。omittedされる場合、0であるとassumedされます。

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

  1. targetthis valueとする。
  2. RequireInternalSlot(target, [[TypedArrayName]])を実行する。
  3. Assert: target[[ViewedArrayBuffer]] internal slotを持つ。
  4. targetOffsetを ? ToIntegerOrInfinity(offset) とする。
  5. targetOffset < 0なら、RangeError例外をthrowする。
  6. source[[TypedArrayName]] internal slotを持つObjectなら、
    1. SetTypedArrayFromTypedArray(target, targetOffset, source)を実行する。
  7. そうでなければ、
    1. SetTypedArrayFromArrayLike(target, targetOffset, source)を実行する。
  8. undefinedを返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

23.2.3.26.1 SetTypedArrayFromArrayLike ( target, targetOffset, source )

The abstract operation SetTypedArrayFromArrayLike takes arguments target (a TypedArray), targetOffset (a non-negative integer or +∞), and source (an ECMAScript language value, but not a TypedArray) and returns either a normal completion containing unused or a throw completion. これは、target内でindex targetOffsetからstartingして、sourceからvaluesを読み取ってmultiple valuesをsetします。 It performs the following steps when called:

  1. targetRecordMakeTypedArrayWithBufferWitnessRecord(target, seq-cst)とする。
  2. IsTypedArrayOutOfBounds(targetRecord)がtrueなら、TypeError例外をthrowする。
  3. targetLengthTypedArrayLength(targetRecord)とする。
  4. sourceを ? ToObject(source) に設定する。
  5. sourceLengthを ? LengthOfArrayLike(source) とする。
  6. targetOffset = +∞なら、RangeError例外をthrowする。
  7. sourceLength + targetOffset > targetLengthなら、RangeError例外をthrowする。
  8. kを0とする。
  9. k < sourceLengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. valueを ? Get(source, 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 (a TypedArray), targetOffset (a non-negative integer or +∞), and source (a TypedArray) and returns either a normal completion containing unused or a throw completion. これは、target内でindex targetOffsetからstartingして、sourceからvaluesを読み取ってmultiple valuesをsetします。 It performs the following steps when called:

  1. targetBuffertarget.[[ViewedArrayBuffer]]とする。
  2. targetRecordMakeTypedArrayWithBufferWitnessRecord(target, seq-cst)とする。
  3. IsTypedArrayOutOfBounds(targetRecord)がtrueなら、TypeError例外をthrowする。
  4. targetLengthTypedArrayLength(targetRecord)とする。
  5. sourceBuffersource.[[ViewedArrayBuffer]]とする。
  6. sourceRecordMakeTypedArrayWithBufferWitnessRecord(source, seq-cst)とする。
  7. IsTypedArrayOutOfBounds(sourceRecord)がtrueなら、TypeError例外をthrowする。
  8. sourceLengthTypedArrayLength(sourceRecord)とする。
  9. targetTypeTypedArrayElementType(target)とする。
  10. targetElementSizeTypedArrayElementSize(target)とする。
  11. targetByteOffsettarget.[[ByteOffset]]とする。
  12. sourceTypeTypedArrayElementType(source)とする。
  13. sourceElementSizeTypedArrayElementSize(source)とする。
  14. sourceByteOffsetsource.[[ByteOffset]]とする。
  15. targetOffset = +∞なら、RangeError例外をthrowする。
  16. sourceLength + targetOffset > targetLengthなら、RangeError例外をthrowする。
  17. target.[[ContentType]]source.[[ContentType]]でないなら、TypeError例外をthrowする。
  18. IsSharedArrayBuffer(sourceBuffer)がtrueであり、IsSharedArrayBuffer(targetBuffer)がtrueであり、かつsourceBuffer.[[ArrayBufferData]]targetBuffer.[[ArrayBufferData]]であるなら、sameSharedArrayBuffertrueとする;そうでなければ、sameSharedArrayBufferfalseとする。
  19. SameValue(sourceBuffer, targetBuffer)がtrueまたはsameSharedArrayBuffertrueなら、
    1. sourceByteLengthTypedArrayByteLength(sourceRecord)とする。
    2. sourceBufferを ? CloneArrayBuffer(sourceBuffer, sourceByteOffset, sourceByteLength) に設定する。
    3. sourceByteIndexを0とする。
  20. そうでなければ、
    1. sourceByteIndexsourceByteOffsetとする。
  21. targetByteIndexを(targetOffset × targetElementSize) + targetByteOffsetとする。
  22. limittargetByteIndex + (targetElementSize × sourceLength)とする。
  23. sourceTypetargetTypeなら、
    1. NOTE: transferはsource dataのbit-level encodingをpreserveするmannerでperformedされなければならない。
    2. targetByteIndex < limitの間、繰り返す
      1. valueGetValueFromBuffer(sourceBuffer, sourceByteIndex, uint8, true, unordered)とする。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered)を実行する。
      3. sourceByteIndexsourceByteIndex + 1に設定する。
      4. targetByteIndextargetByteIndex + 1に設定する。
  24. そうでなければ、
    1. targetByteIndex < limitの間、繰り返す
      1. valueGetValueFromBuffer(sourceBuffer, sourceByteIndex, sourceType, true, unordered)とする。
      2. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, unordered)を実行する。
      3. sourceByteIndexsourceByteIndex + sourceElementSizeに設定する。
      4. targetByteIndextargetByteIndex + targetElementSizeに設定する。
  25. unusedを返す。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.28で定義されるArray.prototype.sliceと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. sourceArrayLengthTypedArrayLength(taRecord)とする。
  4. relativeStartを ? ToIntegerOrInfinity(start) とする。
  5. relativeStart = -∞なら、startIndexを0とする。
  6. そうでなく、relativeStart < 0なら、startIndexmax(sourceArrayLength + relativeStart, 0)とする。
  7. そうでなければ、startIndexmin(relativeStart, sourceArrayLength)とする。
  8. endundefinedなら、relativeEndsourceArrayLengthとする;そうでなければ、relativeEndを ? ToIntegerOrInfinity(end) とする。
  9. relativeEnd = -∞なら、endIndexを0とする。
  10. そうでなく、relativeEnd < 0なら、endIndexmax(sourceArrayLength + relativeEnd, 0)とする。
  11. そうでなければ、endIndexmin(relativeEnd, sourceArrayLength)とする。
  12. countBytesmax(endIndex - startIndex, 0)とする。
  13. resultArrayを ? TypedArraySpeciesCreate(obj, « 𝔽(countBytes) ») とする。
  14. countBytes > 0なら、
    1. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst)に設定する。
    2. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
    3. endIndexmin(endIndex, TypedArrayLength(taRecord))に設定する。
    4. countBytesmax(endIndex - startIndex, 0)に設定する。
    5. sourceTypeTypedArrayElementType(obj)とする。
    6. targetTypeTypedArrayElementType(resultArray)とする。
    7. sourceTypetargetTypeなら、
      1. NOTE: transferはsource dataのbit-level encodingをpreserveするmannerでperformedされなければならない。
      2. sourceBufferobj.[[ViewedArrayBuffer]]とする。
      3. targetBufferresultArray.[[ViewedArrayBuffer]]とする。
      4. elementSizeTypedArrayElementSize(obj)とする。
      5. sourceByteOffsetobj.[[ByteOffset]]とする。
      6. sourceByteIndexを(startIndex × elementSize) + sourceByteOffsetとする。
      7. targetByteIndexresultArray.[[ByteOffset]]とする。
      8. endByteIndextargetByteIndex + (countBytes × elementSize)とする。
      9. targetByteIndex < endByteIndexの間、繰り返す
        1. valueGetValueFromBuffer(sourceBuffer, sourceByteIndex, uint8, true, unordered)とする。
        2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered)を実行する。
        3. sourceByteIndexsourceByteIndex + 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を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

このmethodのargumentsのinterpretationおよびuseは、23.1.3.29で定義されるArray.prototype.someと同じです。

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. IsCallable(callback)がfalseなら、TypeError例外をthrowする。
  5. kを0とする。
  6. k < lengthの間、繰り返す
    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を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

23.2.3.29 %TypedArray%.prototype.sort ( comparator )

これはdistinct methodであり、以下でdescribedされる点を除き、23.1.3.30で定義されるArray.prototype.sortのrequirementsとsame requirementsをimplementします。このmethodのimplementationは、this valueがfixed lengthを持ち、そのinteger-indexed propertiesがsparseでないobjectであるというknowledgeを用いてoptimizedされてもよいです。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

  1. comparatorundefinedでなく、かつIsCallable(comparator)がfalseなら、TypeError例外をthrowする。
  2. objthis valueとする。
  3. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  4. lengthTypedArrayLength(taRecord)とする。
  5. NOTE: 以下のclosureは、23.1.3.30で使用されるstring comparisonではなくnumeric comparisonをperformする。
  6. sortCompareを、comparatorをcaptureし、calledされたときに次のstepsを実行する、parameters (x, y)を持つnew Abstract Closureとする:
    1. CompareTypedArrayElements(x, y, comparator)を返す。
  7. sortedListを ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) とする。
  8. jを0とする。
  9. j < lengthの間、繰り返す
    1. Set(obj, ! ToString(𝔽(j)), sortedList[j], true)を実行する。
    2. jj + 1に設定する。
  10. objを返す。
Note

NaNは常にany other valueよりgreaterとしてcompareされるため(CompareTypedArrayElementsを参照)、comparatorがprovidedされない場合、NaN property valuesは常にresultのendへsortされます。

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

このmethodは、element typeがこのTypedArrayのelement typeであり、ArrayBufferがこのTypedArrayのArrayBufferであるnew TypedArrayを返し、start(inclusive)からend(exclusive)までのinterval内のelementsをreferします。startまたはendのいずれかがnegativeである場合、beginningからではなく、arrayのendからのindexをreferします。

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

  1. objthis valueとする。
  2. RequireInternalSlot(obj, [[TypedArrayName]])を実行する。
  3. Assert: obj[[ViewedArrayBuffer]] internal slotを持つ。
  4. bufferobj.[[ViewedArrayBuffer]]とする。
  5. sourceRecordMakeTypedArrayWithBufferWitnessRecord(obj, seq-cst)とする。
  6. IsTypedArrayOutOfBounds(sourceRecord)がtrueなら、
    1. sourceLengthを0とする。
  7. そうでなければ、
    1. sourceLengthTypedArrayLength(sourceRecord)とする。
  8. relativeStartを ? ToIntegerOrInfinity(start) とする。
  9. relativeStart = -∞なら、startIndexを0とする。
  10. そうでなく、relativeStart < 0なら、startIndexmax(sourceLength + relativeStart, 0)とする。
  11. そうでなければ、startIndexmin(relativeStart, sourceLength)とする。
  12. elementSizeTypedArrayElementSize(obj)とする。
  13. sourceByteOffsetobj.[[ByteOffset]]とする。
  14. beginByteOffsetsourceByteOffset + (startIndex × elementSize)とする。
  15. obj.[[ArrayLength]]autoであり、かつendundefinedなら、
    1. argListを« buffer, 𝔽(beginByteOffset) »とする。
  16. そうでなければ、
    1. endundefinedなら、relativeEndsourceLengthとする;そうでなければ、relativeEndを ? ToIntegerOrInfinity(end) とする。
    2. relativeEnd = -∞なら、endIndexを0とする。
    3. そうでなく、relativeEnd < 0なら、endIndexmax(sourceLength + relativeEnd, 0)とする。
    4. そうでなければ、endIndexmin(relativeEnd, sourceLength)とする。
    5. newLengthmax(endIndex - startIndex, 0)とする。
    6. argListを« buffer, 𝔽(beginByteOffset), 𝔽(newLength) »とする。
  17. TypedArraySpeciesCreate(obj, argList)を返す。

このmethodはgenericではありません。this valueは[[TypedArrayName]] internal slotを持つobjectでなければなりません。

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

これはdistinct methodであり、23.1.3.32で定義されるArray.prototype.toLocaleStringとsame algorithmをimplementします。ただし、"length"[[Get]]をperformする代わりにTypedArrayLengthがcalledされます。このalgorithmのimplementationは、underlying bufferがresizableでない場合にthis valueがfixed lengthを持ち、そのinteger-indexed propertiesがsparseでないというknowledgeを用いてoptimizedされてもよいです。しかし、そのようなoptimizationは、algorithmのspecified behaviourにobservable changesを導入してはなりません。

このmethodはgenericではありません。ValidateTypedArrayは、algorithmをevaluatingする前に、this valueおよびseq-cstをargumentsとして呼び出されます。そのresultがabrupt completionである場合、algorithmをevaluatingする代わりにそのexceptionがthrowされます。

Note

ECMAScript implementationがECMA-402 Internationalization APIを含む場合、このmethodはECMA-402 specification内のArray.prototype.toLocaleStringのalgorithmに基づきます。

23.2.3.32 %TypedArray%.prototype.toReversed ( )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. resultArrayを ? TypedArrayCreateSameType(obj, length) とする。
  5. kを0とする。
  6. k < lengthの間、繰り返す
    1. fromを ! ToString(𝔽(length - 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 )

このmethodは呼び出されたとき、次のstepsを実行します:

  1. comparatorundefinedでなく、かつIsCallable(comparator)がfalseなら、TypeError例外をthrowする。
  2. objthis valueとする。
  3. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  4. lengthTypedArrayLength(taRecord)とする。
  5. resultArrayを ? TypedArrayCreateSameType(obj, length) とする。
  6. NOTE: 以下のclosureは、23.1.3.34で使用されるstring comparisonではなくnumeric comparisonをperformする。
  7. sortCompareを、comparatorをcaptureし、calledされたときに次のstepsを実行する、parameters (x, y)を持つnew Abstract Closureとする:
    1. CompareTypedArrayElements(x, y, comparator)を返す。
  8. sortedListを ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) とする。
  9. jを0とする。
  10. j < lengthの間、繰り返す
    1. Set(resultArray, ! ToString(𝔽(j)), sortedList[j], true)を実行する。
    2. jj + 1に設定する。
  11. resultArrayを返す。

23.2.3.34 %TypedArray%.prototype.toString ( )

"toString" propertyのinitial valueは、23.1.3.36で定義される%Array.prototype.toString%です。

23.2.3.35 %TypedArray%.prototype.values ( )

このmethodは呼び出されたとき、次のstepsを実行します:

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

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

このmethodは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. taRecordを ? ValidateTypedArray(obj, seq-cst) とする。
  3. lengthTypedArrayLength(taRecord)とする。
  4. relativeIndexを ? ToIntegerOrInfinity(index) とする。
  5. relativeIndex ≥ 0なら、actualIndexrelativeIndexとする。
  6. そうでなければ、actualIndexlength + relativeIndexとする。
  7. obj.[[ContentType]]bigintなら、numericValueを ? ToBigInt(value) とする。
  8. そうでなければ、numericValueを ? ToNumber(value) とする。
  9. IsValidIntegerIndex(obj, 𝔽(actualIndex))がfalseなら、RangeError例外をthrowする。
  10. resultArrayを ? TypedArrayCreateSameType(obj, length) とする。
  11. kを0とする。
  12. k < lengthの間、繰り返す
    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% propertyのinitial valueは、23.2.3.35で定義される%TypedArray.prototype.values%です。

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

%TypedArray%.prototype[%Symbol.toStringTag%]は、set accessor functionがundefinedであるaccessor propertyです。そのget accessor functionは呼び出されたとき、次のstepsを実行します:

  1. objthis valueとする。
  2. objがObjectでないなら、undefinedを返す。
  3. obj[[TypedArrayName]] internal slotを持たないなら、undefinedを返す。
  4. nameobj.[[TypedArrayName]]とする。
  5. Assert: nameはStringである。
  6. nameを返す。

このpropertyはattributes { [[Enumerable]]: false, [[Configurable]]: true }を持ちます。

このfunctionの"name" propertyのinitial valueは"get [Symbol.toStringTag]"です。

23.2.4 Abstract Operations for TypedArray Objects

23.2.4.1 TypedArrayCreateFromConstructor ( ctor, argList )

The abstract operation TypedArrayCreateFromConstructor takes arguments ctor (a constructor) and argList (a List of ECMAScript language values) and returns either a normal completion containing a TypedArray or a throw completion. これは、constructor functionを使用したnew TypedArrayのcreationをspecifyするために使用されます。 It performs the following steps when called:

  1. taを ? Construct(ctor, argList) とする。
  2. taRecordを ? ValidateTypedArray(ta, seq-cst) とする。
  3. Assert: taProperties of TypedArray Instancesでmentionedされるすべてのinternal slotsを持つ。
  4. argList内のelementsの数が1であり、かつargList[0]がNumberなら、
    1. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
    2. lengthTypedArrayLength(taRecord)とする。
    3. length < (argList[0])なら、TypeError例外をthrowする。
  5. taを返す。

23.2.4.2 TypedArrayCreateSameType ( exemplar, length )

The abstract operation TypedArrayCreateSameType takes arguments exemplar (a TypedArray) and length (a non-negative integer) and returns either a normal completion containing a TypedArray or a throw completion. これは、exemplarからderivedされたconstructor functionを使用したnew TypedArrayのcreationをspecifyするために使用されます。%Symbol.species%のuseを通じてcustom TypedArray subclassesをconstructできるTypedArraySpeciesCreateとは異なり、このoperationは常にbuilt-in TypedArray constructorsのoneを使用します。 It performs the following steps when called:

  1. ctorを、Table 71内のconstructor name exemplar.[[TypedArrayName]]にassociatedするintrinsic objectとする。
  2. resultを ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») とする。
  3. Assert: result[[TypedArrayName]]および[[ContentType]] internal slotsを持つ。
  4. Assert: result.[[ContentType]]exemplar.[[ContentType]]である。
  5. resultを返す。

23.2.4.3 TypedArraySpeciesCreate ( exemplar, argList )

The abstract operation TypedArraySpeciesCreate takes arguments exemplar (a TypedArray) and argList (a List of ECMAScript language values) and returns either a normal completion containing a TypedArray or a throw completion. これは、exemplarからderivedされたconstructor functionを使用したnew TypedArrayのcreationをspecifyするために使用されます。%Symbol.species%のuseを通じてnon-Array objectsをcreateできるArraySpeciesCreateとは異なり、このoperationはconstructor functionがactual TypedArrayをcreateすることをenforceします。 It performs the following steps when called:

  1. defaultCtorを、Table 71内のconstructor name exemplar.[[TypedArrayName]]にassociatedするintrinsic objectとする。
  2. ctorを ? SpeciesConstructor(exemplar, defaultCtor) とする。
  3. resultを ? TypedArrayCreateFromConstructor(ctor, argList) とする。
  4. result.[[ContentType]]exemplar.[[ContentType]]でないなら、TypeError例外をthrowする。
  5. resultを返す。

23.2.4.4 ValidateTypedArray ( obj, order )

The abstract operation ValidateTypedArray takes arguments obj (an ECMAScript language value) and order (seq-cst or unordered) and returns either a normal completion containing a TypedArray With Buffer Witness Record or a throw completion. It performs the following steps when called:

  1. RequireInternalSlot(obj, [[TypedArrayName]])を実行する。
  2. Assert: obj[[ViewedArrayBuffer]] internal slotを持つ。
  3. taRecordMakeTypedArrayWithBufferWitnessRecord(obj, order)とする。
  4. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
  5. taRecordを返す。

23.2.4.5 TypedArrayElementSize ( obj )

The abstract operation TypedArrayElementSize takes argument obj (a TypedArray) and returns a non-negative integer. It performs the following steps when called:

  1. obj.[[TypedArrayName]]についてTable 71でspecifiedされるElement Size valueを返す。

23.2.4.6 TypedArrayElementType ( obj )

The abstract operation TypedArrayElementType takes argument obj (a TypedArray) and returns a TypedArray element type. It performs the following steps when called:

  1. obj.[[TypedArrayName]]についてTable 71でspecifiedされるElement Type valueを返す。

23.2.4.7 CompareTypedArrayElements ( x, y, comparator )

The abstract operation CompareTypedArrayElements takes arguments x (a Number or a BigInt), y (a Number or a BigInt), and comparator (a function object or undefined) and returns either a normal completion containing a Number or an abrupt completion. 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で使用されるstring comparisonではなくnumeric comparisonをperformします。

23.2.5 The TypedArray Constructors

TypedArray constructorは:

  • otherwise notedされる場合を除き、Table 71内で、TypedArrayの代わりにconstructor nameとして使用されるnameのみが異なる、以下でdescribedされるstructureを持つintrinsic objectです。
  • argumentsの数およびtypesに基づいてbehaviourが異なるfunctionです。TypedArrayのcallのactual behaviourは、それにpassedされるargumentsのnumberおよびkindに依存します。
  • functionとして呼び出されることを意図しておらず、そのようなmannerで呼び出されるとexceptionをthrowします。
  • クラス定義の extends 句の値として使用できる。指定された TypedArray の動作を継承しようとするサブクラスコンストラクターは、%TypedArray%.prototype の組み込みメソッドをサポートするために必要な内部状態でサブクラスインスタンスを作成し初期化するため、TypedArray コンストラクターへの super 呼び出しを含めなければならない。

23.2.5.1 TypedArray ( ...args )

TypedArray constructorは呼び出されたとき、次のstepsを実行します:

  1. NewTargetがundefinedなら、TypeError例外をthrowする。
  2. ctorNameを、this TypedArray constructorについてTable 71でspecifiedされるConstructor Name valueのString valueとする。
  3. proto"%TypedArray.prototype%"とする。
  4. numberOfArgsargs内のelementsの数とする。
  5. numberOfArgs = 0なら、? AllocateTypedArray(ctorName, NewTarget, proto, 0)を返す。
  6. firstArgargs[0]とする。
  7. firstArgがObjectなら、
    1. objを ? AllocateTypedArray(ctorName, NewTarget, proto) とする。
    2. firstArg[[TypedArrayName]] internal slotを持つなら、
      1. InitializeTypedArrayFromTypedArray(obj, firstArg)を実行する。
    3. そうでなく、firstArg[[ArrayBufferData]] internal slotを持つなら、
      1. numberOfArgs > 1なら、byteOffsetargs[1]とする;そうでなければ、byteOffsetundefinedとする。
      2. numberOfArgs > 2なら、lengthargs[2]とする;そうでなければ、lengthundefinedとする。
      3. InitializeTypedArrayFromArrayBuffer(obj, firstArg, byteOffset, length)を実行する。
    4. そうでなければ、
      1. Assert: firstArgはObjectであり、firstArg[[TypedArrayName]]および[[ArrayBufferData]] internal slotのいずれも持たない。
      2. usingIteratorを ? GetMethod(firstArg, %Symbol.iterator%) とする。
      3. usingIteratorundefinedでないなら、
        1. valuesを ? IteratorToList(? GetIteratorFromMethod(firstArg, usingIterator)) とする。
        2. InitializeTypedArrayFromList(obj, values)を実行する。
      4. そうでなければ、
        1. NOTE: firstArgiterable objectではないため、すでにarray-like objectであるとassumeする。
        2. InitializeTypedArrayFromArrayLike(obj, firstArg)を実行する。
    5. objを返す。
  8. Assert: firstArgはObjectではない。
  9. elementLengthを ? ToIndex(firstArg) とする。
  10. AllocateTypedArray(ctorName, NewTarget, proto, elementLength)を返す。

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

The abstract operation AllocateTypedArray takes arguments ctorName (a String which is the name of a TypedArray constructor in Table 71), newTarget (a constructor), and defaultProto (a String) and optional argument length (a non-negative integer) and returns either a normal completion containing a TypedArray or a throw completion. これは、TypedArray constructorのinstanceをvalidateおよびcreateするために使用されます。length argumentがpassedされる場合、そのlengthのArrayBufferもallocatedされ、new TypedArray instanceにassociatedされます。AllocateTypedArrayはTypedArrayによって使用されるcommon semanticsを提供します。 It performs the following steps when called:

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

23.2.5.1.2 InitializeTypedArrayFromTypedArray ( obj, sourceArray )

The abstract operation InitializeTypedArrayFromTypedArray takes arguments obj (a TypedArray) and sourceArray (a TypedArray) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. sourceDatasourceArray.[[ViewedArrayBuffer]]とする。
  2. elementTypeTypedArrayElementType(obj)とする。
  3. elementSizeTypedArrayElementSize(obj)とする。
  4. sourceTypeTypedArrayElementType(sourceArray)とする。
  5. sourceElementSizeTypedArrayElementSize(sourceArray)とする。
  6. sourceByteOffsetsourceArray.[[ByteOffset]]とする。
  7. sourceRecordMakeTypedArrayWithBufferWitnessRecord(sourceArray, seq-cst)とする。
  8. IsTypedArrayOutOfBounds(sourceRecord)がtrueなら、TypeError例外をthrowする。
  9. elementLengthTypedArrayLength(sourceRecord)とする。
  10. byteLengthelementSize × elementLengthとする。
  11. elementTypesourceTypeなら、
    1. dataを ? CloneArrayBuffer(sourceData, sourceByteOffset, byteLength) とする。
  12. そうでなければ、
    1. dataを ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) とする。
    2. sourceArray.[[ContentType]]obj.[[ContentType]]でないなら、TypeError例外をthrowする。
    3. sourceByteIndexsourceByteOffsetとする。
    4. targetByteIndexを0とする。
    5. countelementLengthとする。
    6. count > 0の間、繰り返す
      1. valueGetValueFromBuffer(sourceData, sourceByteIndex, sourceType, true, unordered)とする。
      2. SetValueInBuffer(data, targetByteIndex, elementType, value, true, unordered)を実行する。
      3. sourceByteIndexsourceByteIndex + sourceElementSizeに設定する。
      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 (a TypedArray), buffer (an ArrayBuffer or a SharedArrayBuffer), byteOffset (an ECMAScript language value), and length (an ECMAScript language value) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. elementSizeTypedArrayElementSize(obj)とする。
  2. offsetを ? ToIndex(byteOffset) とする。
  3. offset modulo elementSize ≠ 0なら、RangeError例外をthrowする。
  4. bufferIsFixedLengthIsFixedLengthArrayBuffer(buffer)とする。
  5. lengthundefinedでないなら、
    1. newLengthを ? ToIndex(length) とする。
  6. IsDetachedBuffer(buffer)がtrueなら、TypeError例外をthrowする。
  7. bufferByteLengthArrayBufferByteLength(buffer, seq-cst)とする。
  8. lengthundefinedであり、かつbufferIsFixedLengthfalseなら、
    1. offset > bufferByteLengthなら、RangeError例外をthrowする。
    2. obj.[[ByteLength]]autoに設定する。
    3. obj.[[ArrayLength]]autoに設定する。
  9. そうでなければ、
    1. lengthundefinedなら、
      1. bufferByteLength modulo elementSize ≠ 0なら、RangeError例外をthrowする。
      2. newByteLengthbufferByteLength - offsetとする。
      3. newByteLength < 0なら、RangeError例外をthrowする。
    2. そうでなければ、
      1. newByteLengthnewLength × elementSizeとする。
      2. offset + newByteLength > bufferByteLengthなら、RangeError例外をthrowする。
    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 (a TypedArray) and values (a List of ECMAScript language values) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. lengthvalues内のelementsの数とする。
  2. AllocateTypedArrayBuffer(obj, length)を実行する。
  3. kを0とする。
  4. k < lengthの間、繰り返す
    1. propertyKeyを ! ToString(𝔽(k)) とする。
    2. kValuevaluesのfirst elementとする。
    3. valuesからfirst elementをremoveする。
    4. Set(obj, propertyKey, kValue, true)を実行する。
    5. kk + 1に設定する。
  5. Assert: valuesは現在empty Listである。
  6. unusedを返す。

23.2.5.1.5 InitializeTypedArrayFromArrayLike ( obj, arrayLike )

The abstract operation InitializeTypedArrayFromArrayLike takes arguments obj (a TypedArray) and arrayLike (an Object, but not a TypedArray or an ArrayBuffer) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

  1. lengthを ? LengthOfArrayLike(arrayLike) とする。
  2. AllocateTypedArrayBuffer(obj, length)を実行する。
  3. kを0とする。
  4. k < lengthの間、繰り返す
    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 (a TypedArray) and length (a non-negative integer) and returns either a normal completion containing unused or a throw completion. これはArrayBufferをallocateし、それをobjにassociateします。 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 Properties of the TypedArray Constructors

TypedArray constructorは:

  • valueが%TypedArray%である[[Prototype]] internal slotを持ちます。
  • valueが3𝔽である"length" propertyを持ちます。
  • valueが、Table 71でそれについてspecifiedされるconstructor nameのString valueである"name" propertyを持ちます。
  • 次のpropertiesを持ちます:

23.2.6.1 TypedArray.BYTES_PER_ELEMENT

TypedArray.BYTES_PER_ELEMENTのvalueは、TypedArrayについてTable 71でspecifiedされるElement Size valueです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

23.2.6.2 TypedArray.prototype

TypedArray.prototypeのinitial valueは、corresponding TypedArray prototype intrinsic object(23.2.7)です。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

23.2.7 Properties of the TypedArray Prototype Objects

TypedArray prototype objectは:

  • valueが%TypedArray.prototype%である[[Prototype]] internal slotを持ちます。
  • ordinary objectです。
  • [[ViewedArrayBuffer]]や、TypedArray instance objectsにspecificなその他のinternal slotsを持ちません。

23.2.7.1 TypedArray.prototype.BYTES_PER_ELEMENT

TypedArray.prototype.BYTES_PER_ELEMENTのvalueは、TypedArrayについてTable 71でspecifiedされるElement Size valueです。

このpropertyはattributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }を持ちます。

23.2.7.2 TypedArray.prototype.constructor

given TypedArray constructorのprototypeの"constructor" propertyのinitial valueはconstructor自体です。

23.2.8 Properties of TypedArray Instances

TypedArray instancesはTypedArraysです。各TypedArray instanceは、corresponding TypedArray prototype objectからpropertiesをinheritします。各TypedArray instanceは、次のinternal slotsを持ちます:[[ViewedArrayBuffer]][[TypedArrayName]][[ContentType]][[ByteLength]][[ByteOffset]]、および[[ArrayLength]]

23.3 Uint8Arrayオブジェクト

Uint8Arrayは、上でdescribedされたTypedArrayのparticular kindです。加えて、Uint8Array constructor23.3.1)およびUint8Array prototype object(23.3.2)にはadditional methodsがあります。

23.3.1 Uint8Array Constructorの追加プロパティ

23.3.1.1 Uint8Array.fromBase64 ( string [ , options ] )

  1. stringがStringでないなら、TypeError例外をthrowする。
  2. optsを ? GetOptionsObject(options) とする。
  3. alphabetを ? Get(opts, "alphabet") とする。
  4. alphabetundefinedなら、alphabet"base64"に設定する。
  5. alphabet"base64"でも"base64url"でもないなら、TypeError例外をthrowする。
  6. lastChunkHandlingを ? Get(opts, "lastChunkHandling") とする。
  7. lastChunkHandlingundefinedなら、lastChunkHandling"loose"に設定する。
  8. lastChunkHandling"loose""strict"、または"stop-before-partial"のいずれでもないなら、TypeError例外をthrowする。
  9. resultFromBase64(string, alphabet, lastChunkHandling)とする。
  10. result.[[Error]]noneでないなら、
    1. result.[[Error]]をthrowする。
  11. resultLengthresult.[[Bytes]]内のelementsの数とする。
  12. taを ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) とする。
  13. Assert: ta.[[ViewedArrayBuffer]].[[ArrayBufferByteLength]]result.[[Bytes]]内のelementsの数である。
  14. ta.[[ViewedArrayBuffer]].[[ArrayBufferData]]の各indexのvalueを、result.[[Bytes]]のcorresponding indexのvalueに設定する。
  15. taを返す。

23.3.1.2 Uint8Array.fromHex ( string )

  1. stringがStringでないなら、TypeError例外をthrowする。
  2. resultFromHex(string)とする。
  3. result.[[Error]]noneでないなら、
    1. result.[[Error]]をthrowする。
  4. resultLengthresult.[[Bytes]]内のelementsの数とする。
  5. taを ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) とする。
  6. Assert: ta.[[ViewedArrayBuffer]].[[ArrayBufferByteLength]]result.[[Bytes]]内のelementsの数である。
  7. ta.[[ViewedArrayBuffer]].[[ArrayBufferData]]の各indexのvalueを、result.[[Bytes]]のcorresponding indexのvalueに設定する。
  8. taを返す。

23.3.2 Uint8Array Prototype Objectの追加プロパティ

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

  1. intothis valueとする。
  2. ValidateUint8Array(into)を実行する。
  3. stringがStringでないなら、TypeError例外をthrowする。
  4. optsを ? GetOptionsObject(options) とする。
  5. alphabetを ? Get(opts, "alphabet") とする。
  6. alphabetundefinedなら、alphabet"base64"に設定する。
  7. alphabet"base64"でも"base64url"でもないなら、TypeError例外をthrowする。
  8. lastChunkHandlingを ? Get(opts, "lastChunkHandling") とする。
  9. lastChunkHandlingundefinedなら、lastChunkHandling"loose"に設定する。
  10. lastChunkHandling"loose""strict"、または"stop-before-partial"のいずれでもないなら、TypeError例外をthrowする。
  11. taRecordMakeTypedArrayWithBufferWitnessRecord(into, seq-cst)とする。
  12. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
  13. byteLengthTypedArrayLength(taRecord)とする。
  14. resultFromBase64(string, alphabet, lastChunkHandling, byteLength)とする。
  15. bytesresult.[[Bytes]]とする。
  16. writtenbytes内のelementsの数とする。
  17. NOTE: FromBase64はuser codeをinvokeしないため、intoをbackingするArrayBufferはdetachedまたはshrunkされていることはない。
  18. Assert: writtenbyteLength
  19. SetUint8ArrayBytes(into, bytes)を実行する。
  20. result.[[Error]]noneでないなら、
    1. result.[[Error]]をthrowする。
  21. resultObjOrdinaryObjectCreate(%Object.prototype%)とする。
  22. CreateDataPropertyOrThrow(resultObj, "read", 𝔽(result.[[Read]]))を実行する。
  23. CreateDataPropertyOrThrow(resultObj, "written", 𝔽(written))を実行する。
  24. resultObjを返す。

23.3.2.2 Uint8Array.prototype.setFromHex ( string )

  1. intothis valueとする。
  2. ValidateUint8Array(into)を実行する。
  3. stringがStringでないなら、TypeError例外をthrowする。
  4. taRecordMakeTypedArrayWithBufferWitnessRecord(into, seq-cst)とする。
  5. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
  6. byteLengthTypedArrayLength(taRecord)とする。
  7. resultFromHex(string, byteLength)とする。
  8. bytesresult.[[Bytes]]とする。
  9. writtenbytes内のelementsの数とする。
  10. NOTE: FromHexはuser codeをinvokeしないため、intoをbackingするArrayBufferはdetachedまたはshrunkされていることはない。
  11. Assert: writtenbyteLength
  12. SetUint8ArrayBytes(into, bytes)を実行する。
  13. result.[[Error]]noneでないなら、
    1. result.[[Error]]をthrowする。
  14. resultObjOrdinaryObjectCreate(%Object.prototype%)とする。
  15. CreateDataPropertyOrThrow(resultObj, "read", 𝔽(result.[[Read]]))を実行する。
  16. CreateDataPropertyOrThrow(resultObj, "written", 𝔽(written))を実行する。
  17. resultObjを返す。

23.3.2.3 Uint8Array.prototype.toBase64 ( [ options ] )

  1. objthis valueとする。
  2. ValidateUint8Array(obj)を実行する。
  3. optsを ? GetOptionsObject(options) とする。
  4. alphabetを ? Get(opts, "alphabet") とする。
  5. alphabetundefinedなら、alphabet"base64"に設定する。
  6. alphabet"base64"でも"base64url"でもないなら、TypeError例外をthrowする。
  7. omitPaddingToBoolean(? Get(opts, "omitPadding"))とする。
  8. toEncodeを ? GetUint8ArrayBytes(obj) とする。
  9. alphabet"base64"なら、
    1. outAsciiを、toEncodeRFC 4648のsection 4でspecifiedされるbase64 encodingに従ってencodingした結果のcode pointsのsequenceとする。Paddingは、omitPaddingfalseである場合に限りincludedされる。
  10. そうでなければ、
    1. Assert: alphabet"base64url"である。
    2. outAsciiを、toEncodeRFC 4648のsection 5でspecifiedされるbase64url encodingに従ってencodingした結果のcode pointsのsequenceとする。Paddingは、omitPaddingfalseである場合に限りincludedされる。
  11. CodePointsToString(outAscii)を返す。

23.3.2.4 Uint8Array.prototype.toHex ( )

  1. objthis valueとする。
  2. ValidateUint8Array(obj)を実行する。
  3. toEncodeを ? GetUint8ArrayBytes(obj) とする。
  4. outをempty Stringとする。
  5. toEncodeの各byte byteについて、以下を行う
    1. hexNumber::toString(𝔽(byte), 16)とする。
    2. hexStringPad(hex, 2, "0", start)に設定する。
    3. outouthexstring-concatenationに設定する。
  6. outを返す。

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

23.3.3.1 ValidateUint8Array ( ta )

The abstract operation ValidateUint8Array takes argument ta (an ECMAScript language value) and returns either a normal completion containing unused or a throw completion. It performs the following steps when called:

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

23.3.3.2 GetUint8ArrayBytes ( ta )

The abstract operation GetUint8ArrayBytes takes argument ta (a Uint8Array) and returns either a normal completion containing a List of byte values or a throw completion. It performs the following steps when called:

  1. bufferta.[[ViewedArrayBuffer]]とする。
  2. taRecordMakeTypedArrayWithBufferWitnessRecord(ta, seq-cst)とする。
  3. IsTypedArrayOutOfBounds(taRecord)がtrueなら、TypeError例外をthrowする。
  4. lengthTypedArrayLength(taRecord)とする。
  5. byteOffsetta.[[ByteOffset]]とする。
  6. bytesを新しい空のListとする。
  7. indexを0とする。
  8. index < lengthの間、繰り返す
    1. byteIndexbyteOffset + indexとする。
    2. byte(GetValueFromBuffer(buffer, byteIndex, uint8, true, unordered))とする。
    3. bytebytesへappendする。
    4. indexindex + 1に設定する。
  9. bytesを返す。

23.3.3.3 SetUint8ArrayBytes ( into, bytes )

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

  1. offsetinto.[[ByteOffset]]とする。
  2. lengthbytes内のelementsの数とする。
  3. indexを0とする。
  4. index < lengthの間、繰り返す
    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 (a String) and index (a non-negative integer) and returns a non-negative integer. It performs the following steps when called:

  1. lengthstringのlengthとする。
  2. index < lengthの間、繰り返す
    1. charstring内のindex indexにあるcode unitとする。
    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 (a String of length 2 or 3) and throwOnExtraBits (a Boolean) and returns either a normal completion containing a List of byte values, or a throw completion. It performs the following steps when called:

  1. chunkLengthchunkのlengthとする。
  2. chunkLength = 2なら、
    1. chunkchunk"AA"string-concatenationに設定する。
  3. そうでなければ、
    1. Assert: chunkLengthは3である。
    2. chunkchunk"A"string-concatenationに設定する。
  4. bytesDecodeFullLengthBase64Chunk(chunk)とする。
  5. chunkLength = 2なら、
    1. throwOnExtraBitstrueであり、かつbytes[1] ≠ 0なら、SyntaxError例外をthrowする。
    2. « bytes[0] »を返す。
  6. throwOnExtraBitstrueであり、かつbytes[2] ≠ 0なら、SyntaxError例外をthrowする。
  7. « bytes[0], bytes[1] »を返す。

23.3.3.6 DecodeFullLengthBase64Chunk ( chunk )

The abstract operation DecodeFullLengthBase64Chunk takes argument chunk (a String of length 4) and returns a List of byte values of length 3.

standard base64 alphabet"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"、すなわち、Unicode Basic Latin block内のすべてのletterおよびnumberにcorrespondingするcode unitsと、"+"および"/"からなるStringです。

  1. byteSequenceを、chunkをbase64としてdecodingした結果のunique sequence of 3 bytesとする(すなわち、byteSequenceRFC 4648のsection 4でspecifiedされるbase64 encodingをapplyingするとchunkをproduceするようなsequence)。
  2. elementsがbyteSequenceのelementsであり、orderを保ったListを返す。

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

The abstract operation FromBase64 takes arguments string (a String), alphabet ("base64" or "base64url"), and lastChunkHandling ("loose", "strict", or "stop-before-partial") and optional argument maxLength (a non-negative integer) and returns a Record with fields [[Read]] (an integer), [[Bytes]] (a List of byte values), and [[Error]] (a SyntaxError object or none). It performs the following steps when called:

  1. maxLengthがpresentでないなら、
    1. maxLengthを253 - 1に設定する。
    2. NOTE: inputはStringであるため、Stringsのlengthは253 - 1 charactersにlimitedされ、outputはinputが持つcharactersより多くのbytesを必要としないので、このlimitに達することは決してない。しかし、maxLengthfinite valueを使用することはeditorially convenientである。
  2. NOTE: 下のalgorithmにおけるvalidationおよびdecodingのorderはobservableではない。Implementationsは、最もefficientなorderでそれらをperformすることがencouragedされ、possibly validationとdecodingをinterleavingしてもよい。
  3. maxLength = 0なら、
    1. Record { [[Read]]: 0, [[Bytes]]: « », [[Error]]: none }を返す。
  4. readを0とする。
  5. bytesを新しい空のListとする。
  6. chunkをempty Stringとする。
  7. chunkLengthを0とする。
  8. indexを0とする。
  9. lengthstringのlengthとする。
  10. 繰り返す、
    1. Assert: bytes内のelementsの数は3でevenly divisibleである。
    2. indexSkipAsciiWhitespace(string, index)に設定する。
    3. index = lengthなら、
      1. chunkLength > 0なら、
        1. lastChunkHandling"stop-before-partial"なら、
          1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none }を返す。
        2. lastChunkHandling"strict"なら、
          1. errorをnewly created SyntaxError objectとする。
          2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
        3. Assert: lastChunkHandling"loose"である。
        4. chunkLength = 1なら、
          1. errorをnewly created SyntaxError objectとする。
          2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
        5. bytesを、bytesと ! DecodeFinalBase64Chunk(chunk, false) のlist-concatenationに設定する。
      2. Record { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none }を返す。
    4. charstringindexからindex + 1までのsubstringとする。
    5. indexindex + 1に設定する。
    6. char"="なら、
      1. chunkLength < 2なら、
        1. errorをnewly created SyntaxError objectとする。
        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をnewly created SyntaxError objectとする。
          3. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
        2. charstringindexからindex + 1までのsubstringに設定する。
        3. char"="なら、
          1. indexSkipAsciiWhitespace(string, index + 1)に設定する。
      4. index < lengthなら、
        1. errorをnewly created SyntaxError objectとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
      5. lastChunkHandling"strict"なら、throwOnExtraBitstrueとする;そうでなければ、throwOnExtraBitsfalseとする。
      6. decodeResultCompletion(DecodeFinalBase64Chunk(chunk, throwOnExtraBits))とする。
      7. decodeResultabrupt completionなら、
        1. errordecodeResult.[[Value]]とする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
      8. bytesを、bytesと ! decodeResultlist-concatenationに設定する。
      9. Record { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none }を返す。
    7. alphabet"base64url"なら、
      1. char"+"または"/"のいずれかなら、
        1. errorをnewly created SyntaxError objectとする。
        2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
      2. そうでなく、char"-"なら、
        1. char"+"に設定する。
      3. そうでなく、char"_"なら、
        1. char"/"に設定する。
    8. charのsole code unitがstandard base64 alphabetのelementでないなら、
      1. errorをnewly created SyntaxError objectとする。
      2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
    9. remainingmaxLength - bytes内のelementsの数とする。
    10. remaining = 1かつchunkLength = 2の場合、またはremaining = 2かつchunkLength = 3の場合、
      1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none }を返す。
    11. chunkchunkcharstring-concatenationに設定する。
    12. chunkLengthchunkのlengthに設定する。
    13. chunkLength = 4なら、
      1. bytesを、bytesDecodeFullLengthBase64Chunk(chunk)のlist-concatenationに設定する。
      2. chunkをempty Stringに設定する。
      3. chunkLengthを0に設定する。
      4. readindexに設定する。
      5. bytes内のelementsの数 = maxLengthなら、
        1. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none }を返す。

23.3.3.8 FromHex ( string [ , maxLength ] )

The abstract operation FromHex takes argument string (a String) and optional argument maxLength (a non-negative integer) and returns a Record with fields [[Read]] (an integer), [[Bytes]] (a List of byte values), and [[Error]] (a SyntaxError object or none). It performs the following steps when called:

  1. maxLengthがpresentでないなら、maxLengthを253 - 1に設定する。
  2. lengthstringのlengthとする。
  3. bytesを新しい空のListとする。
  4. readを0とする。
  5. length modulo 2 ≠ 0なら、
    1. errorをnewly created SyntaxError objectとする。
    2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
  6. read < lengthであり、かつbytes内のelementsの数 < maxLengthである間、繰り返す
    1. hexitsstringreadからread + 2までのsubstringとする。
    2. hexits"0123456789abcdefABCDEF"内にないcode unitsを含むなら、
      1. errorをnewly created SyntaxError objectとする。
      2. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error }を返す。
    3. readread + 2に設定する。
    4. byteを、values 10 through 15のdigitsとしてletters A through Fおよびa through fを使用するbase-16 notationでhexitsによりrepresentedされるinteger valueとする。
    5. bytebytesへappendする。
  7. Record { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none }を返す。