← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
23

Dizinli Koleksiyonlar (Indexed Collections)

23.1 Dizi (Array) Nesneleri (Array Objects)

Diziler, belirli bir özellik adları (property names) sınıfına özel muamele gösteren aykırı nesnelerdir (exotic objects). Bu özel muamelenin tanımı için 10.4.2 bölümüne bakın.

23.1.1 Array Yapıcısı (The Array Constructor)

Array yapıcısı (constructor):

23.1.1.1 Array ( ...values )

Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, newTarget, etkin fonksiyon nesnesi (active function object) olsun; aksi takdirde newTarget, NewTarget olsun.

  2. proto, ? GetPrototypeFromConstructor(newTarget, "%Array.prototype%") olsun.

  3. numberOfArgs, values içindeki öğe sayısı olsun.

  4. Eğer numberOfArgs = 0 ise, ! ArrayCreate(0, proto) döndür.

  5. Eğer numberOfArgs = 1 ise, o zaman

    1. length, values[0] olsun.

    2. array, ! ArrayCreate(0, proto) olsun.

    3. Eğer length bir Sayı değilse (is not a Number), o zaman

      1. ! CreateDataPropertyOrThrow(array, "0", length) işlemini gerçekleştir.

      2. intLength değeri 1𝔽 olsun.

    4. Aksi takdirde,

      1. intLength, ! ToUint32(length) olsun.

      2. Eğer SameValueZero(intLength, length) false ise, bir RangeError istisnası fırlatır.

    5. ! Set(array, "length", intLength, true) işlemini gerçekleştir.

    6. array döndür.

  6. Assert: numberOfArgs ≥ 2.

  7. array, ? ArrayCreate(numberOfArgs, proto) olsun.

  8. k, 0 olsun.

  9. k < numberOfArgs olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. itemK, values[k] olsun.

    3. ! CreateDataPropertyOrThrow(array, propertyKey, itemK) işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

  10. Assert: array nesnesinin "length" özelliğinin matematiksel değeri (mathematical value of) numberOfArgs'tır.

  11. array döndür.

23.1.2 Array Yapıcısının Özellikleri (Properties of the Array Constructor)

Array yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.

  • değeri 1𝔽 olan bir "length" özelliğine sahiptir.

  • aşağıdaki özelliklere sahiptir:

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

Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ctor, this değeri olsun.

  2. Eğer mapper undefined ise, o zaman

    1. mapping, false olsun.
  3. Aksi takdirde,

    1. Eğer IsCallable(mapper) false ise, bir TypeError istisnası fırlatır.

    2. mapping, true olsun.

  4. usingIterator, ? GetMethod(items, %Symbol.iterator%) olsun.

  5. Eğer usingIterator undefined değilse, o zaman

    1. Eğer IsConstructor(ctor) true ise, o zaman

      1. array, ? Construct(ctor) olsun.
    2. Aksi takdirde,

      1. array, ! ArrayCreate(0) olsun.
    3. iteratorRecord, ? GetIteratorFromMethod(items, usingIterator) olsun.

    4. k, 0 olsun.

    5. Tekrarla,

      1. Eğer k ≥ 253 - 1 ise, o zaman

         1. *error*, yeni oluşturulmuş bir `TypeError` nesnesinin [ThrowCompletion](07_sec-ecmascript-data-types-and-values.md#sec-throwcompletion) değeri olsun.
        
         2. Dönüş değeri: ? [IteratorClose](08_sec-abstract-operations.md#sec-iteratorclose)(*iteratorRecord*, *error*).
      2. propertyKey, ! ToString(𝔽(k)) olsun.

      3. next, ? IteratorStepValue(iteratorRecord) olsun.

      4. Eğer next done ise, o zaman

         1. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*array*, `"length"`, [𝔽](06_sec-notational-conventions.md#𝔽)(*k*), `true`) işlemini gerçekleştir.
        
         2. *array* döndür.
      5. Eğer mapping true ise, o zaman

         1. *mappedValue*, [Call](08_sec-abstract-operations.md#sec-call)(*mapper*, *thisArg*, « *next*, [𝔽](06_sec-notational-conventions.md#𝔽)(*k*) ») çağrısının [Completion](06_sec-notational-conventions.md#sec-completion-ao) sonucu olsun.
        
         2. [IfAbruptCloseIterator](08_sec-abstract-operations.md#sec-ifabruptcloseiterator)(*mappedValue*, *iteratorRecord*).
      6. Aksi takdirde,

         1. *mappedValue*, *next* olsun.
      7. defineStatus, CreateDataPropertyOrThrow(array, propertyKey, mappedValue) işleminin Completion sonucu olsun.

      8. IfAbruptCloseIterator(defineStatus, iteratorRecord).

      9. k değerini k + 1 olarak ayarla.

  6. NOTE: items yinelenebilir (iterable) olmadığından bunun bir dizi benzeri nesne (array-like object) olduğunu varsay.

  7. arrayLike, ! ToObject(items) olsun.

  8. length, ? LengthOfArrayLike(arrayLike) olsun.

  9. Eğer IsConstructor(ctor) true ise, o zaman

    1. array, ? Construct(ctor, « 𝔽(length) ») olsun.
  10. Aksi takdirde,

    1. array, ? ArrayCreate(length) olsun.
  11. k, 0 olsun.

  12. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ? Get(arrayLike, propertyKey) olsun.

    3. Eğer mapping true ise, o zaman

      1. mappedValue, ? Call(mapper, thisArg, « kValue, 𝔽(k) ») olsun.
    4. Aksi takdirde,

      1. mappedValue, kValue olsun.
    5. ? CreateDataPropertyOrThrow(array, propertyKey, mappedValue) işlemini gerçekleştir.

    6. k değerini k + 1 olarak ayarla.

  13. ? Set(array, "length", 𝔽(length), true) işlemini gerçekleştir.

  14. array döndür.

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

Bu asenkron fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ctor, this değeri olsun.

  2. mapping, false olsun.

  3. Eğer mapper undefined değilse, o zaman

    1. Eğer IsCallable(mapper) false ise, bir TypeError istisnası fırlatır.

    2. Set mapping to true.

  4. iteratorRecord, undefined olsun.

  5. usingAsyncIterator, ? GetMethod(items, %Symbol.asyncIterator%) olsun.

  6. Eğer usingAsyncIterator undefined ise, o zaman

    1. usingSyncIterator, ? GetMethod(items, %Symbol.iterator%) olsun.

    2. Eğer usingSyncIterator undefined değilse, o zaman

      1. iteratorRecord, ? GetIteratorFromMethod(items, usingSyncIterator) çağrısının CreateAsyncFromSyncIterator sonucu olarak ayarla.
  7. Aksi takdirde,

    1. iteratorRecord, ? GetIteratorFromMethod(items, usingAsyncIterator) olsun.
  8. Eğer iteratorRecord undefined değilse, o zaman

    1. Eğer IsConstructor(ctor) true ise, o zaman

      1. array, ? Construct(ctor) olsun.
    2. Aksi takdirde,

      1. array, ! ArrayCreate(0) olsun.
    3. k, 0 olsun.

    4. Tekrarla,

      1. Eğer k ≥ 253 - 1 ise, o zaman

         1. *error*, yeni oluşturulmuş bir `TypeError` nesnesinin [ThrowCompletion](07_sec-ecmascript-data-types-and-values.md#sec-throwcompletion) değeri olsun.
        
         2. Dönüş değeri: ? [AsyncIteratorClose](08_sec-abstract-operations.md#sec-asynciteratorclose)(*iteratorRecord*, *error*).
      2. propertyKey, ! ToString(𝔽(k)) olsun.

      3. nextResult, ? Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]]) olsun.

      4. nextResult değerini ? Await(nextResult) olarak ayarla.

      5. Eğer nextResult bir Nesne değilse (is not an Object), bir TypeError istisnası fırlatır.

      6. done, ? IteratorComplete(nextResult) olsun.

      7. Eğer done true ise, o zaman

         1. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*array*, `"length"`, [𝔽](06_sec-notational-conventions.md#𝔽)(*k*), `true`) işlemini gerçekleştir.
        
         2. *array* döndür.
      8. nextValue, ? IteratorValue(nextResult) olsun.

      9. Eğer mapping true ise, o zaman

         1. *mappedValue*, [Call](08_sec-abstract-operations.md#sec-call)(*mapper*, *thisArg*, « *nextValue*, [𝔽](06_sec-notational-conventions.md#𝔽)(*k*) ») çağrısının [Completion](06_sec-notational-conventions.md#sec-completion-ao) sonucu olsun.
        
         2. [IfAbruptCloseAsyncIterator](08_sec-abstract-operations.md#sec-ifabruptcloseasynciterator)(*mappedValue*, *iteratorRecord*).
        
         3. *mappedValue*, [Await](28_sec-control-abstraction-objects.md#await)(*mappedValue*) çağrısının [Completion](06_sec-notational-conventions.md#sec-completion-ao) sonucu olsun.
        
         4. [IfAbruptCloseAsyncIterator](08_sec-abstract-operations.md#sec-ifabruptcloseasynciterator)(*mappedValue*, *iteratorRecord*).
      10. Aksi takdirde,

        1. *mappedValue*, *nextValue* olsun.
      11. defineStatus, CreateDataPropertyOrThrow(array, propertyKey, mappedValue) işleminin Completion sonucu olsun.

      12. IfAbruptCloseAsyncIterator(defineStatus, iteratorRecord).

      13. k değerini k + 1 olarak ayarla.

  9. Aksi takdirde,

    1. NOTE: items ne asenkron yinelenebilir (async iterable) ne de yinelenebilir (iterable) olmadığından bunun bir dizi benzeri nesne (array-like object) olduğunu varsay.

    2. arrayLike, ! ToObject(items) olsun.

    3. length, ? LengthOfArrayLike(arrayLike) olsun.

    4. Eğer IsConstructor(ctor) true ise, o zaman

      1. array, ? Construct(ctor, « 𝔽(length) ») olsun.
    5. Aksi takdirde,

      1. array, ? ArrayCreate(length) olsun.
    6. Let k be 0.

    7. Repeat, while k < length,

      1. Let propertyKey be ! ToString(𝔽(k)).

      2. Let kValue be ? Get(arrayLike, propertyKey).

      3. Set kValue to ? Await(kValue).

      4. If mapping is true, then

         1. Let *mappedValue* be ? [Call](08_sec-abstract-operations.md#sec-call)(*mapper*, *thisArg*, « *kValue*, [𝔽](06_sec-notational-conventions.md#𝔽)(*k*) »).
        
         2. Set *mappedValue* to ? [Await](28_sec-control-abstraction-objects.md#await)(*mappedValue*).
      5. Else,

         1. Let *mappedValue* be *kValue*.
      6. Perform ? CreateDataPropertyOrThrow(array, propertyKey, mappedValue).

      7. Set k to k + 1.

    8. Perform ? Set(array, "length", 𝔽(length), true).

    9. Return array.

23.1.2.3 Array.isArray ( arg )

Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Dönüş değeri: ? IsArray(arg).

23.1.2.4 Array.of ( ...items )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, items içindeki öğe sayısı olsun.

  2. lengthNumber, 𝔽(length) olsun.

  3. ctor, this değeri olsun.

  4. Eğer IsConstructor(ctor) true ise, o zaman

    1. array, ? Construct(ctor, « lengthNumber ») olsun.
  5. Aksi takdirde,

    1. array, ? ArrayCreate(length) olsun.
  6. k, 0 olsun.

  7. k < length olduğu sürece tekrarla,

    1. kValue, items[k] olsun.

    2. propertyKey, ! ToString(𝔽(k)) olsun.

    3. ? CreateDataPropertyOrThrow(array, propertyKey, kValue) işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

  8. ? Set(array, "length", lengthNumber, true) işlemini gerçekleştir.

  9. array döndür.

23.1.2.5 Array.prototype

Array.prototype özelliğinin değeri Array prototip nesnesidir (Array prototype object).

Bu özellik, { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

23.1.2.6 get Array [ %Symbol.species% ]

Array[%Symbol.species%] bir erişici özelliğidir (accessor property) ve küme erişici (set accessor) fonksiyonu undefined'dır. Getiri erişici (get accessor) fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. this değerini döndür.

Bu fonksiyonun "name" özelliğinin değeri "get [Symbol.species]"'tir.

23.1.3 Array Prototip Nesnesinin Özellikleri (Properties of the Array Prototype Object)

Array prototip nesnesi:

  • %Array.prototype%'tir.

  • bir aykırı Dizi nesnesidir (Array exotic object) ve bu tür nesneler için belirtilen dahili metotlara sahiptir.

  • başlangıç değeri +0𝔽 olan ve öznitelikleri { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } olan bir "length" özelliğine sahiptir.

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.

23.1.3.1 Array.prototype.at ( index )

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. relativeIndex, ? ToIntegerOrInfinity(index) olsun.

  4. Eğer relativeIndex ≥ 0 ise, o zaman

    1. k, relativeIndex olsun.
  5. Aksi takdirde,

    1. k, length + relativeIndex olsun.
  6. Eğer k < 0 veya klength ise, undefined döndür.

  7. Dönüş değeri: ? Get(obj, ! ToString(𝔽(k))).

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

Bu metot, nesnenin dizi öğelerini ve ardından her bir argümanın dizi öğelerini içeren bir dizi döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. array, ? ArraySpeciesCreate(obj, 0) olsun.

  3. nextIndex, 0 olsun.

  4. obj değerini items listesinin başına ekle.

  5. items listesinin her bir item öğesi için aşağıdakileri yap:

    1. spreadable, ? IsConcatSpreadable(item) olsun.

    2. Eğer spreadable true ise, o zaman

      1. length, ? LengthOfArrayLike(item) olsun.

      2. Eğer nextIndex + length > 253 - 1 ise, bir TypeError istisnası fırlatır.

      3. sourceIndex, 0 olsun.

      4. sourceIndex < length olduğu sürece tekrarla,

         1. *propertyKey*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*sourceIndex*)) olsun.
        
         2. *exists*, ? [HasProperty](08_sec-abstract-operations.md#sec-hasproperty)(*item*, *propertyKey*) olsun.
        
         3. Eğer *exists* `true` ise, o zaman
           
                    1. *subElement*, ? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*item*, *propertyKey*) olsun.
           
                    2. ? [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow)(*array*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*nextIndex*)), *subElement*) işlemini gerçekleştir.
        
         4. *nextIndex* değerini *nextIndex* + 1 olarak ayarla.
        
         5. *sourceIndex* değerini *sourceIndex* + 1 olarak ayarla.
    3. Aksi takdirde,

      1. NOTE: item yayılmak (spread) yerine tek bir öğe olarak eklenir.

      2. Eğer nextIndex ≥ 253 - 1 ise, bir TypeError istisnası fırlatır.

      3. ? CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), item) işlemini gerçekleştir.

      4. nextIndex değerini nextIndex + 1 olarak ayarla.

  6. ? Set(array, "length", 𝔽(nextIndex), true) işlemini gerçekleştir.

  7. array döndür.

Bu metodun "length" özelliğinin değeri 1𝔽'dir.

23.1.3.2.1 IsConcatSpreadable ( obj )

IsConcatSpreadable soyut işlemi; obj (bir ECMAScript dil değeri (ECMAScript language value)) argümanını alır ve ya bir Boolean içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), false döndür.

  2. spreadable, ? Get(obj, %Symbol.isConcatSpreadable%) olsun.

  3. Eğer spreadable undefined değilse, ToBoolean(spreadable) döndür.

  4. Dönüş değeri: ? IsArray(obj).

23.1.3.3 Array.prototype.constructor

Array.prototype.constructor özelliğinin ilk değeri %Array%'dir.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. relativeTarget, ? ToIntegerOrInfinity(target) olsun.

  4. Eğer relativeTarget = -∞ ise, to, 0 olsun.

  5. Aksi takdirde, eğer relativeTarget < 0 ise, to, max(length + relativeTarget, 0) olsun.

  6. Aksi takdirde, to, min(relativeTarget, length) olsun.

  7. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  8. Eğer relativeStart = -∞ ise, from, 0 olsun.

  9. Aksi takdirde, eğer relativeStart < 0 ise, from, max(length + relativeStart, 0) olsun.

  10. Aksi takdirde, from, min(relativeStart, length) olsun.

  11. Eğer end undefined ise, relativeEnd, length olsun; aksi takdirde relativeEnd, ? ToIntegerOrInfinity(end) olsun.

  12. Eğer relativeEnd = -∞ ise, final, 0 olsun.

  13. Aksi takdirde, eğer relativeEnd < 0 ise, final, max(length + relativeEnd, 0) olsun.

  14. Aksi takdirde, final, min(relativeEnd, length) olsun.

  15. count, min(final - from, length - to) olsun.

  16. Eğer from < to ve to < from + count ise, o zaman

    1. direction, -1 olsun.

    2. from değerini from + count - 1 olarak ayarla.

    3. to değerini to + count - 1 olarak ayarla.

  17. Aksi takdirde,

    1. direction, 1 olsun.
  18. count > 0 olduğu sürece tekrarla,

    1. fromKey, ! ToString(𝔽(from)) olsun.

    2. toKey, ! ToString(𝔽(to)) olsun.

    3. fromPresent, ? HasProperty(obj, fromKey) olsun.

    4. Eğer fromPresent true ise, o zaman

      1. fromValue, ? Get(obj, fromKey) olsun.

      2. ? Set(obj, toKey, fromValue, true) işlemini gerçekleştir.

    5. Aksi takdirde,

      1. Assert: fromPresent false'dur.

      2. ? DeletePropertyOrThrow(obj, toKey) işlemini gerçekleştir.

    6. from değerini from + direction olarak ayarla.

    7. to değerini to + direction olarak ayarla.

    8. count değerini count - 1 olarak ayarla.

  19. obj döndür.

23.1.3.5 Array.prototype.entries ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. Dönüş değeri: CreateArrayIterator(obj, key+value).

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  4. k, 0 olsun.

  5. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. testResult, ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) olsun.

      3. Eğer testResult false ise, false döndür.

    4. k değerini k + 1 olarak ayarla.

  6. true döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  4. Eğer relativeStart = -∞ ise, k, 0 olsun.

  5. Aksi takdirde, eğer relativeStart < 0 ise, k, max(length + relativeStart, 0) olsun.

  6. Aksi takdirde, k, min(relativeStart, length) olsun.

  7. Eğer end undefined ise, relativeEnd, length olsun; aksi takdirde relativeEnd, ? ToIntegerOrInfinity(end) olsun.

  8. Eğer relativeEnd = -∞ ise, final, 0 olsun.

  9. Aksi takdirde, eğer relativeEnd < 0 ise, final, max(length + relativeEnd, 0) olsun.

  10. Aksi takdirde, final, min(relativeEnd, length) olsun.

  11. k < final olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. ? Set(obj, propertyKey, value, true) işlemini gerçekleştir.

    3. k değerini k + 1 olarak ayarla.

  12. obj döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  4. array, ? ArraySpeciesCreate(obj, 0) olsun.

  5. k, 0 olsun.

  6. to, 0 olsun.

  7. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. selected, ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) olsun.

      3. Eğer selected true ise, o zaman

         1. ? [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow)(*array*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*to*)), *kValue*) işlemini gerçekleştir.
        
         2. *to* değerini *to* + 1 olarak ayarla.
    4. k değerini k + 1 olarak ayarla.

  8. array döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. findRecord, ? FindViaPredicate(obj, length, ascending, predicate, thisArg) olsun.

  4. findRecord.[[Value]] döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. findRecord, ? FindViaPredicate(obj, length, ascending, predicate, thisArg) olsun.

  4. findRecord.[[Index]] döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. findRecord, ? FindViaPredicate(obj, length, descending, predicate, thisArg) olsun.

  4. findRecord.[[Value]] döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. findRecord, ? FindViaPredicate(obj, length, descending, predicate, thisArg) olsun.

  4. findRecord.[[Index]] döndür.

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

FindViaPredicate soyut işlemi; obj (bir Nesne), length (negatif olmayan bir tamsayı), direction (ascending veya descending), predicate (bir ECMAScript dil değeri) ve thisArg (bir ECMAScript dil değeri) argümanlarını alır ve [[Index]] (tamsayı türünde bir Sayı) ile [[Value]] (bir ECMAScript dil değeri) alanlarına sahip bir Kayıt (Record) içeren bir olağan tamamlanma (normal completion containing) veya bir fırlatma tamamlanması (throw completion) döndürür.

obj, dizi benzeri bir nesne veya bir TypedArray olmalıdır. Bu işlem, predicate fonksiyonunu obj'nin her bir öğesi için, artan dizin sırasında veya azalan dizin sırasında (direction ile belirtildiği gibi), predicate true değerine zorlanabilir bir değer döndürene kadar bir kez çağırır. Bu noktada işlem, bulunan öğenin dizinini ve değerini veren bir Kayıt (Record) döndürür. Eğer böyle bir öğe bulunamazsa, bu işlem dizin için -1𝔽 ve değer için undefined belirten bir Kayıt (Record) döndürür.

predicate bir fonksiyon olmalıdır. Dizinin bir öğesi için çağrıldığında kendisine üç argüman aktarılır: öğenin değeri, öğenin dizini ve dolaşılan nesne. Dönüş değeri bir Boolean değerine zorlanacaktır.

thisArg, predicate fonksiyonunun her çağrısı için this değeri olarak kullanılacaktır.

Bu işlem, üzerinde çağrıldığı nesneyi doğrudan değiştirmez, ancak nesne predicate çağrıları tarafından değiştirilebilir.

İşlenecek öğelerin kapsamı, predicate fonksiyonunun ilk çağrısından önce, yani dolaşma başlamadan hemen önce belirlenir. Bundan sonra diziye eklenen öğeler predicate tarafından ziyaret edilmeyecektir. Eğer dizinin mevcut öğeleri değiştirilirse, predicate fonksiyonuna aktarılan değerleri bu işlemin onları ziyaret ettiği andaki değerleri olacaktır. Dolaşma başladıktan sonra ve ziyaret edilmeden önce silinen öğeler yine de ziyaret edilir ve ya prototipten aranır ya da undefined olur.

Bu işlem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer IsCallable(predicate) false ise, bir TypeError istisnası fırlat.

  2. Eğer direction ascending ise, o zaman

    1. indices, 0'dan (dahil) length'e (hariç) kadar olan tamsayıların artan sırada bir Listesi (List) olsun.
  3. Aksi takdirde,

    1. indices, 0'dan (dahil) length'e (hariç) kadar olan tamsayıların azalan sırada bir Listesi (List) olsun.
  4. indices listesindeki her bir k tamsayısı için şunları yap:

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. NOTE: Eğer obj bir TypedArray ise, aşağıdaki Get çağrısı bir olağan tamamlanma döndürecektir.

    3. kValue, ? Get(obj, propertyKey) olsun.

    4. testResult, ? Call(predicate, thisArg, « kValue, 𝔽(k), obj ») olsun.

    5. Eğer ToBoolean(testResult) true ise, { [[Index]]: 𝔽(k), [[Value]]: kValue } Kaydını (Record) döndür.

  5. { [[Index]]: -1𝔽, [[Value]]: undefined } Kaydını (Record) döndür.

23.1.3.13 Array.prototype.flat ( [ depth ] )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. sourceLength, ? LengthOfArrayLike(obj) olsun.

  3. depthNumber, 1 olsun.

  4. Eğer depth undefined değilse, o zaman

    1. depthNumber değerini ? ToIntegerOrInfinity(depth) olarak ayarla.

    2. Eğer depthNumber < 0 ise, depthNumber değerini 0 olarak ayarla.

  5. array, ? ArraySpeciesCreate(obj, 0) olsun.

  6. ? FlattenIntoArray(array, obj, sourceLength, 0, depthNumber) işlemini gerçekleştir.

  7. array döndür.

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

FlattenIntoArray soyut işlemi; target (bir Nesne), source (bir Nesne), sourceLength (negatif olmayan bir tamsayı), start (negatif olmayan bir tamsayı) ve depth (negatif olmayan bir tamsayı veya +∞) argümanları ile isteğe bağlı mapperFunc (bir fonksiyon nesnesi) ve thisArg (bir ECMAScript dil değeri) argümanlarını alır ve negatif olmayan bir tamsayı içeren bir olağan tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: Eğer mapperFunc sağlanmışsa, IsCallable(mapperFunc) true'dur, thisArg sağlanmıştır ve depth, 1'dir.

  2. targetIndex, start olsun.

  3. sourceIndex, +0𝔽 olsun.

  4. (sourceIndex) < sourceLength olduğu sürece tekrarla,

    1. propertyKey, ! ToString(sourceIndex) olsun.

    2. exists, ? HasProperty(source, propertyKey) olsun.

    3. Eğer exists true ise, o zaman

      1. element, ? Get(source, propertyKey) olsun.

      2. Eğer mapperFunc sağlanmışsa, o zaman

         1. *element* değerini ? [Call](08_sec-abstract-operations.md#sec-call)(*mapperFunc*, *thisArg*, « *element*, *sourceIndex*, *source* ») olarak ayarla.
      3. shouldFlatten, false olsun.

      4. Eğer depth > 0 ise, o zaman

         1. *shouldFlatten* değerini ? [IsArray](08_sec-abstract-operations.md#sec-isarray)(*element*) olarak ayarla.
      5. Eğer shouldFlatten true ise, o zaman

         1. Eğer *depth* = +∞ ise, *newDepth*, +∞ olsun.
        
         2. Aksi takdirde, *newDepth*, *depth* - 1 olsun.
        
         3. *elementLength*, ? [LengthOfArrayLike](08_sec-abstract-operations.md#sec-lengthofarraylike)(*element*) olsun.
        
         4. *targetIndex* değerini ? [FlattenIntoArray](#sec-flattenintoarray)(*target*, *element*, *elementLength*, *targetIndex*, *newDepth*) olarak ayarla.
      6. Aksi takdirde,

         1. Eğer *targetIndex* ≥ 2<sup>53</sup> - 1 ise, bir `TypeError` istisnası fırlat.
        
         2. ? [CreateDataPropertyOrThrow](08_sec-abstract-operations.md#sec-createdatapropertyorthrow)(*target*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*targetIndex*)), *element*) işlemini gerçekleştir.
        
         3. *targetIndex* değerini *targetIndex* + 1 olarak ayarla.
    4. sourceIndex değerini sourceIndex + 1𝔽 olarak ayarla.

  5. targetIndex döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. sourceLength, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(mapperFunc) false ise, bir TypeError istisnası fırlat.

  4. array, ? ArraySpeciesCreate(obj, 0) olsun.

  5. ? FlattenIntoArray(array, obj, sourceLength, 0, 1, mapperFunc, thisArg) işlemini gerçekleştir.

  6. array döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  4. k, 0 olsun.

  5. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

  6. undefined döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer length = 0 ise, false döndür.

  4. startIndex, ? ToIntegerOrInfinity(fromIndex) olsun.

  5. Assert: Eğer fromIndex undefined ise, o zaman startIndex, 0'dır.

  6. Eğer startIndex = +∞ ise, false döndür.

  7. Eğer startIndex = -∞ ise, startIndex değerini 0 olarak ayarla.

  8. Eğer startIndex ≥ 0 ise, o zaman

    1. k, startIndex olsun.
  9. Aksi takdirde,

    1. k, length + startIndex olsun.

    2. Eğer k < 0 ise, k değerini 0 olarak ayarla.

  10. k < length olduğu sürece tekrarla,

    1. elementK, ? Get(obj, ! ToString(𝔽(k))) olsun.

    2. Eğer SameValueZero(searchElement, elementK) true ise, true döndür.

    3. k değerini k + 1 olarak ayarla.

  11. false döndür.

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

Bu metot, searchElement değerini, dizinin öğeleri ile artan sırada IsStrictlyEqual algoritmasını kullanarak karşılaştırır ve bir veya daha fazla dizinde bulunursa, bu türden en küçük dizini döndürür; aksi takdirde -1𝔽 döndürür.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer length = 0 ise, -1𝔽 döndür.

  4. startIndex, ? ToIntegerOrInfinity(fromIndex) olsun.

  5. Assert: Eğer fromIndex undefined ise, o zaman startIndex, 0'dır.

  6. Eğer startIndex = +∞ ise, -1𝔽 döndür.

  7. Eğer startIndex = -∞ ise, startIndex değerini 0 olarak ayarla.

  8. Eğer startIndex ≥ 0 ise, o zaman

    1. k, startIndex olsun.
  9. Aksi takdirde,

    1. k, length + startIndex olsun.

    2. Eğer k < 0 ise, k değerini 0 olarak ayarla.

  10. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. elementK, ? Get(obj, propertyKey) olsun.

      2. Eğer IsStrictlyEqual(searchElement, elementK) true ise, 𝔽(k) döndür.

    4. k değerini k + 1 olarak ayarla.

  11. -1𝔽 döndür.

23.1.3.18 Array.prototype.join ( separator )

Bu metot, dizinin öğelerini Karakter Dizilerine (String) dönüştürür ve ardından bu Karakter Dizilerini, aralarına separator argümanının değerini koyarak birleştirir. Eğer herhangi bir ayırıcı (separator) sağlanmazsa, ayırıcı olarak tek bir virgül kullanılır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer separator undefined ise, sep, "," olsun.

  4. Aksi takdirde, sep, ? ToString(separator) olsun.

  5. result, boş Karakter Dizisi (String) olsun.

  6. k, 0 olsun.

  7. k < length olduğu sürece tekrarla,

    1. Eğer k > 0 ise, result değerini result ile sep'in karakter-dizisi-birleştirmesi olarak ayarla.

    2. element, ? Get(obj, ! ToString(𝔽(k))) olsun.

    3. Eğer element undefined veya null değilse, o zaman

      1. elementString, ? ToString(element) olsun.

      2. result değerini result ile elementString'in karakter-dizisi-birleştirmesi olarak ayarla.

    4. k değerini k + 1 olarak ayarla.

  8. result döndür.

23.1.3.19 Array.prototype.keys ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. Dönüş değeri: CreateArrayIterator(obj, key).

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer length = 0 ise, -1𝔽 döndür.

  4. Eğer fromIndex sağlanmışsa, startIndex, ? ToIntegerOrInfinity(fromIndex) olsun; aksi takdirde startIndex, length - 1 olsun.

  5. Eğer startIndex = -∞ ise, -1𝔽 döndür.

  6. Eğer startIndex ≥ 0 ise, o zaman

    1. k, min(startIndex, length - 1) olsun.
  7. Aksi takdirde,

    1. k, length + startIndex olsun.
  8. k ≥ 0 olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. elementK, ? Get(obj, propertyKey) olsun.

      2. Eğer IsStrictlyEqual(searchElement, elementK) true ise, 𝔽(k) döndür.

    4. k değerini k - 1 olarak ayarla.

  9. -1𝔽 döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  4. array, ? ArraySpeciesCreate(obj, length) olsun.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. mappedValue, ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») olsun.

      3. ? CreateDataPropertyOrThrow(array, propertyKey, mappedValue) işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

  7. array döndür.

23.1.3.22 Array.prototype.pop ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer length = 0 ise, o zaman

    1. ? Set(obj, "length", +0𝔽, true) işlemini gerçekleştir.

    2. undefined döndür.

  4. Assert: length > 0.

  5. newLength, 𝔽(length - 1) olsun.

  6. index, ! ToString(newLength) olsun.

  7. element, ? Get(obj, index) olsun.

  8. ? DeletePropertyOrThrow(obj, index) işlemini gerçekleştir.

  9. ? Set(obj, "length", newLength, true) işlemini gerçekleştir.

  10. element döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. argCount, items içindeki öğelerin sayısı olsun.

  4. Eğer length + argCount > 253 - 1 ise, bir TypeError istisnası fırlat.

  5. items içindeki her bir item öğesi için şunları yap:

    1. ? Set(obj, ! ToString(𝔽(length)), item, true) işlemini gerçekleştir.

    2. length değerini length + 1 olarak ayarla.

  6. ? Set(obj, "length", 𝔽(length), true) işlemini gerçekleştir.

  7. 𝔽(length) döndür.

Bu metodun "length" özelliği 1𝔽'dir.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  4. Eğer length = 0 ve initialValue sağlanmamışsa, bir TypeError istisnası fırlat.

  5. k, 0 olsun.

  6. accumulator, undefined olsun.

  7. Eğer initialValue sağlanmışsa, o zaman

    1. accumulator değerini initialValue olarak ayarla.
  8. Aksi takdirde,

    1. kPresent, false olsun.

    2. kPresent false olduğu ve k < length olduğu sürece tekrarla,

      1. propertyKey, ! ToString(𝔽(k)) olsun.

      2. kPresent değerini ? HasProperty(obj, propertyKey) olarak ayarla.

      3. Eğer kPresent true ise, o zaman

        1. accumulator değerini ? Get(obj, propertyKey) olarak ayarla.
      4. k değerini k + 1 olarak ayarla.

    3. Eğer kPresent false ise, bir TypeError istisnası fırlat.

  9. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. accumulator değerini ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») olarak ayarla.

    4. k değerini k + 1 olarak ayarla.

  10. accumulator döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  4. Eğer length = 0 ve initialValue sağlanmamışsa, bir TypeError istisnası fırlat.

  5. k, length - 1 olsun.

  6. accumulator, undefined olsun.

  7. Eğer initialValue sağlanmışsa, o zaman

    1. accumulator değerini initialValue olarak ayarla.
  8. Aksi takdirde,

    1. kPresent, false olsun.

    2. kPresent false olduğu ve k ≥ 0 olduğu sürece tekrarla,

      1. propertyKey, ! ToString(𝔽(k)) olsun.

      2. kPresent değerini ? HasProperty(obj, propertyKey) olarak ayarla.

      3. Eğer kPresent true ise, o zaman

        1. accumulator değerini ? Get(obj, propertyKey) olarak ayarla.
      4. k değerini k - 1 olarak ayarla.

    3. Eğer kPresent false ise, bir TypeError istisnası fırlat.

  9. k ≥ 0 olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. accumulator değerini ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») olarak ayarla.

    4. k değerini k - 1 olarak ayarla.

  10. accumulator döndür.

23.1.3.26 Array.prototype.reverse ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. middle, floor(length / 2) olsun.

  4. lower, 0 olsun.

  5. lowermiddle olduğu sürece tekrarla,

    1. upper, length - lower - 1 olsun.

    2. upperP, ! ToString(𝔽(upper)) olsun.

    3. lowerP, ! ToString(𝔽(lower)) olsun.

    4. lowerExists, ? HasProperty(obj, lowerP) olsun.

    5. Eğer lowerExists true ise, o zaman

      1. lowerValue, ? Get(obj, lowerP) olsun.
    6. upperExists, ? HasProperty(obj, upperP) olsun.

    7. Eğer upperExists true ise, o zaman

      1. upperValue, ? Get(obj, upperP) olsun.
    8. Eğer lowerExists true ve upperExists true ise, o zaman

      1. ? Set(obj, lowerP, upperValue, true) işlemini gerçekleştir.

      2. ? Set(obj, upperP, lowerValue, true) işlemini gerçekleştir.

    9. Aksi takdirde, eğer lowerExists false ve upperExists true ise, o zaman

      1. ? Set(obj, lowerP, upperValue, true) işlemini gerçekleştir.

      2. ? DeletePropertyOrThrow(obj, upperP) işlemini gerçekleştir.

    10. Aksi takdirde, eğer lowerExists true ve upperExists false ise, o zaman

      1. ? DeletePropertyOrThrow(obj, lowerP) işlemini gerçekleştir.

      2. ? Set(obj, upperP, lowerValue, true) işlemini gerçekleştir.

    11. Aksi takdirde,

      1. Assert: hem lowerExists hem de upperExists false'dur.

      2. NOTE: Herhangi bir işlem yapılması gerekmez.

    12. lower değerini lower + 1 olarak ayarla.

  6. obj döndür.

23.1.3.27 Array.prototype.shift ( )

Bu metot dizinin ilk öğesini kaldırır ve onu döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer length = 0 ise, o zaman

    1. ? Set(obj, "length", +0𝔽, true) işlemini gerçekleştir.

    2. undefined döndür.

  4. first, ? Get(obj, "0") olsun.

  5. k, 1 olsun.

  6. k < length olduğu sürece tekrarla,

    1. from, ! ToString(𝔽(k)) olsun.

    2. to, ! ToString(𝔽(k - 1)) olsun.

    3. fromPresent, ? HasProperty(obj, from) olsun.

    4. Eğer fromPresent true ise, o zaman

      1. fromValue, ? Get(obj, from) olsun.

      2. ? Set(obj, to, fromValue, true) işlemini gerçekleştir.

    5. Aksi takdirde,

      1. Assert: fromPresent false'dur.

      2. ? DeletePropertyOrThrow(obj, to) işlemini gerçekleştir.

    6. k değerini k + 1 olarak ayarla.

  7. ? DeletePropertyOrThrow(obj, ! ToString(𝔽(length - 1))) işlemini gerçekleştir.

  8. ? Set(obj, "length", 𝔽(length - 1), true) işlemini gerçekleştir.

  9. first döndür.

23.1.3.28 Array.prototype.slice ( start, end )

Bu metot, dizinin start öğesinden başlayıp end öğesine kadar olan (ancak end öğesi dahil edilmeyen) öğeleri içeren bir dizi döndürür (veya end undefined ise dizinin sonuna kadar olan kısmı döndürür). Eğer start negatifse, length dizinin uzunluğu olmak üzere length + start olarak işlem görür. Eğer end negatifse, length dizinin uzunluğu olmak üzere length + end olarak işlem görür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  4. Eğer relativeStart = -∞ ise, k, 0 olsun.

  5. Aksi takdirde, eğer relativeStart < 0 ise, k, max(length + relativeStart, 0) olsun.

  6. Aksi takdirde, k, min(relativeStart, length) olsun.

  7. Eğer end undefined ise, relativeEnd, length olsun; aksi takdirde relativeEnd, ? ToIntegerOrInfinity(end) olsun.

  8. Eğer relativeEnd = -∞ ise, final, 0 olsun.

  9. Aksi takdirde, eğer relativeEnd < 0 ise, final, max(length + relativeEnd, 0) olsun.

  10. Aksi takdirde, final, min(relativeEnd, length) olsun.

  11. count, max(final - k, 0) olsun.

  12. array, ? ArraySpeciesCreate(obj, count) olsun.

  13. resultIndex, 0 olsun.

  14. k < final olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. ? CreateDataPropertyOrThrow(array, ! ToString(𝔽(resultIndex)), kValue) işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

    5. resultIndex değerini resultIndex + 1 olarak ayarla.

  15. ? Set(array, "length", 𝔽(resultIndex), true) işlemini gerçekleştir.

  16. array döndür.

15 adımında "length" özelliğinin açıkça ayarlanması, array yerleşik bir Dizi olmasa bile uzunluğun doğru olmasını sağlamayı amaçlar.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  4. k, 0 olsun.

  5. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ? HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. testResult, ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) olsun.

      3. Eğer testResult true ise, true döndür.

    4. k değerini k + 1 olarak ayarla.

  6. false döndür.

23.1.3.30 Array.prototype.sort ( comparator )

Bu metot dizinin öğelerini sıralar. Eğer comparator undefined değilse, iki argüman (x ve y) kabul eden ve eğer x < y ise negatif bir Sayı, eğer x > y ise pozitif bir Sayı, aksi takdirde sıfır döndüren bir fonksiyon olmalıdır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer comparator undefined değilse ve IsCallable(comparator) false ise, bir TypeError istisnası fırlat.

  2. obj, ? ToObject(this değeri) olsun.

  3. length, ? LengthOfArrayLike(obj) olsun.

  4. sortCompare, parametreleri (x, y) olan, comparator argümanını yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:

    1. Dönüş değeri: ? CompareArrayElements(x, y, comparator).
  5. sortedList, ? SortIndexedProperties(obj, length, sortCompare, skip-holes) olsun.

  6. itemCount, sortedList içindeki öğelerin sayısı olsun.

  7. j, 0 olsun.

  8. j < itemCount olduğu sürece tekrarla,

    1. ? Set(obj, ! ToString(𝔽(j)), sortedList[j], true) işlemini gerçekleştir.

    2. j değerini j + 1 olarak ayarla.

  9. NOTE: 5 adımındaki SortIndexedProperties çağrısı skip-holes kullanır. Kalan dizinler, tespit edilen ve sıralama dışında tutulan deliklerin (holes) sayısını korumak amacıyla silinir.

  10. j < length olduğu sürece tekrarla,

    1. ? DeletePropertyOrThrow(obj, ! ToString(𝔽(j))) işlemini gerçekleştir.

    2. j değerini j + 1 olarak ayarla.

  11. obj döndür.

23.1.3.30.1 SortIndexedProperties ( obj, length, sortCompare, holes )

SortIndexedProperties soyut işlemi; obj (bir Nesne), length (negatif olmayan bir tamsayı), sortCompare (iki parametreli bir Soyut Kapanış (Abstract Closure)) ve holes (skip-holes veya read-through-holes) argümanlarını alır ve ECMAScript dil değerlerinin bir Listesini (List) içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. items, yeni boş bir Liste (List) olsun.

  2. k, 0 olsun.

  3. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. Eğer holes skip-holes ise, o zaman

      1. kRead, ? HasProperty(obj, propertyKey) olsun.
    3. Aksi takdirde,

      1. Assert: holes, read-through-holes'dur.

      2. kRead, true olsun.

    4. Eğer kRead true ise, o zaman

      1. kValue, ? Get(obj, propertyKey) olsun.

      2. kValue değerini items listesinin sonuna ekle.

    5. k değerini k + 1 olarak ayarla.

  4. items listesini, uygulama tarafından tanımlanmış (implementation-defined) bir sortCompare çağrıları dizisiyle sırala. Eğer bu türden herhangi bir çağrı ani bir tamamlanma (abrupt completion) döndürürse, sortCompare fonksiyonuna daha fazla çağrı yapmadan önce dur ve o Tamamlanma Kaydını (Completion Record) döndür.

  5. items döndür.

Sıralama düzeni, yukarıdaki algoritmanın 4 adımının tamamlanmasından sonraki items sıralamasıdır. Eğer sortCompare, items öğeleri için tutarlı bir karşılaştırıcı (consistent comparator) değilse, sıralama düzeni (sort order) uygulama tarafından tanımlanmıştır (implementation-defined). SortIndexedProperties soyut işlemi Array.prototype.sort veya Array.prototype.toSorted tarafından çağrıldığında, eğer comparator undefined ise ve sortCompare fonksiyonuna argüman olarak geçirilen herhangi bir belirli değere yapılan tüm ToString uygulamaları aynı sonucu üretmiyorsa, sıralama düzeni (sort order) yine uygulama tarafından tanımlanmıştır (implementation-defined).

Sıralama düzeninin (sort order) uygulama tarafından tanımlanmış (implementation-defined) olduğu belirtilmedikçe, aşağıdaki koşulların tümünü karşılaması gerekir:

  • itemCount sayısından küçük olan negatif olmayan tamsayıların öyle bir matematiksel permütasyonu π olmalıdır ki, itemCount sayısından küçük her negatif olmayan j tamsayısı için old[j] öğesi new[π(j)] ile tamamen aynı olsun.

  • Her biri itemCount sayısından küçük olan tüm negatif olmayan j ve k tamsayıları için, eğer (sortCompare(old[j], old[k])) < 0 ise, o zaman π(j) < π(k) olmalıdır.

  • Ve j < k < itemCount koşulunu sağlayan tüm negatif olmayan j ve k tamsayıları için, eğer (sortCompare(old[j], old[k])) = 0 ise, o zaman π(j) < π(k) olmalıdır; yani sıralama kararlıdır (stable).

Burada old[j] gösterimi, 4 adımı yürütülmeden önceki items[j] değerini ve new[j] gösterimi ise 4 adımı yürütüldükten sonraki items[j] değerini belirtmek için kullanılır.

Bir Soyut Kapanış (Abstract Closure) or comparator fonksiyonu, values kümesindeki tüm a, b ve c değerleri (muhtemelen aynı değer) için aşağıdaki tüm gereksinimler karşılanıyorsa o values kümesi için tutarlı bir karşılaştırıcıdır (consistent comparator): a <C b gösterimi (comparator(a, b)) < 0 anlamına gelir; a =C b gösterimi (comparator(a, b)) = 0 anlamına gelir; ve a >C b gösterimi (comparator(a, b)) > 0 anlamına gelir.

  • Belirli bir a ve b değer çifti iki argüman olarak geçirildiğinde comparator(a, b) çağrısı her zaman aynı v değerini döndürür. Ayrıca, v bir Sayıdır ve v NaN değildir. Bunun, belirli bir a ve b çifti için a <C b, a =C b ve a >C b ifadelerinden tam olarak birinin doğru olacağı anlamına geldiğini unutmayın.

  • comparator(a, b) çağrısı, obj nesnesini veya obj'nin prototip zincirindeki herhangi bir nesneyi değiştirmez.

  • a =C a (yansıma)

  • Eğer a =C b ise, o zaman b =C a (simetri)

  • Eğer a =C b ve b =C c ise, o zaman a =C c (=C'nin geçişkenliği)

  • Eğer a <C b ve b <C c ise, o zaman a <C c (<C'nin geçişkenliği)

  • Eğer a >C b ve b >C c ise, o zaman a >C c (>C'nin geçişkenliği)

23.1.3.30.2 CompareArrayElements ( x, y, comparator )

CompareArrayElements soyut işlemi; x (bir ECMAScript dil değeri), y (bir ECMAScript dil değeri) ve comparator (bir fonksiyon nesnesi veya undefined) argümanlarını alır ve bir Sayı içeren bir olağan tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer hem x undefined hem de y undefined ise, +0𝔽 döndür.

  2. Eğer x undefined ise, 1𝔽 döndür.

  3. Eğer y undefined ise, -1𝔽 döndür.

  4. Eğer comparator undefined değilse, o zaman

    1. result, ? ToNumber(? Call(comparator, undefined, « x, y »)) olsun.

    2. Eğer result NaN ise, +0𝔽 döndür.

    3. Return result.

  5. xString, ? ToString(x) olsun.

  6. yString, ? ToString(y) olsun.

  7. xSmaller, ! IsLessThan(xString, yString, true) olsun.

  8. Eğer xSmaller true ise, -1𝔽 döndür.

  9. ySmaller, ! IsLessThan(yString, xString, true) olsun.

  10. Eğer ySmaller true ise, 1𝔽 döndür.

  11. +0𝔽 döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  4. Eğer relativeStart = -∞ ise, actualStart be 0.

  5. Aksi takdirde, eğer relativeStart < 0 ise, actualStart, max(length + relativeStart, 0) olsun.

  6. Aksi takdirde, actualStart, min(relativeStart, length) olsun.

  7. itemCount, items içindeki öğelerin sayısı olsun.

  8. Eğer start sağlanmamışsa, o zaman

    1. dc, 0 olsun.
  9. Aksi takdirde, eğer deleteCount sağlanmamışsa, o zaman

    1. actualDeleteCount, length - actualStart olsun.
  10. Aksi takdirde,

    1. dc, ? ToIntegerOrInfinity(deleteCount) olsun.

    2. actualDeleteCount, dc değerinin 0 ile length - actualStart arasında sınırlandırılmasının (clamping) sonucu olsun.

  11. Eğer length + itemCount - actualDeleteCount > 253 - 1 ise, bir TypeError istisnası fırlat.

  12. deletedArray, ? ArraySpeciesCreate(obj, actualDeleteCount) olsun.

  13. k, 0 olsun.

  14. k < actualDeleteCount olduğu sürece tekrarla,

    1. from, ! ToString(𝔽(actualStart + k)) olsun.

    2. Eğer ? HasProperty(obj, from) true ise, o zaman

      1. fromValue, ? Get(obj, from) olsun.

      2. ? CreateDataPropertyOrThrow(deletedArray, ! ToString(𝔽(k)), fromValue) işlemini gerçekleştir.

    3. k değerini k + 1 olarak ayarla.

  15. ? Set(deletedArray, "length", 𝔽(actualDeleteCount), true) işlemini gerçekleştir.

  16. Eğer itemCount < actualDeleteCount ise, o zaman

    1. k değerini actualStart olarak ayarla.

    2. k < (length - actualDeleteCount) olduğu sürece tekrarla,

      1. from, ! ToString(𝔽(k + actualDeleteCount)) olsun.

      2. to, ! ToString(𝔽(k + itemCount)) olsun.

      3. Eğer ? HasProperty(obj, from) true ise, o zaman

         1. *fromValue*, ? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*obj*, *from*) olsun.
        
         2. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*obj*, *to*, *fromValue*, `true`) işlemini gerçekleştir.
      4. Aksi takdirde,

         1. ? [DeletePropertyOrThrow](08_sec-abstract-operations.md#sec-deletepropertyorthrow)(*obj*, *to*) işlemini gerçekleştir.
      5. k değerini k + 1 olarak ayarla.

    3. k değerini length olarak ayarla.

    4. k > (length - actualDeleteCount + itemCount) olduğu sürece tekrarla,

      1. ? DeletePropertyOrThrow(obj, ! ToString(𝔽(k - 1))) işlemini gerçekleştir.

      2. k değerini k - 1 olarak ayarla.

  17. Aksi takdirde, eğer itemCount > actualDeleteCount ise, o zaman

    1. k değerini (length - actualDeleteCount) olarak ayarla.

    2. k > actualStart olduğu sürece tekrarla,

      1. from, ! ToString(𝔽(k + actualDeleteCount - 1)) olsun.

      2. to, ! ToString(𝔽(k + itemCount - 1)) olsun.

      3. Eğer ? HasProperty(obj, from) true ise, o zaman

         1. *fromValue*, ? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*obj*, *from*) olsun.
        
         2. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*obj*, *to*, *fromValue*, `true`) işlemini gerçekleştir.
      4. Aksi takdirde,

         1. ? [DeletePropertyOrThrow](08_sec-abstract-operations.md#sec-deletepropertyorthrow)(*obj*, *to*) işlemini gerçekleştir.
      5. k değerini k - 1 olarak ayarla.

  18. k değerini actualStart olarak ayarla.

  19. items içindeki her bir item öğesi için şunları yap:

    1. ? Set(obj, ! ToString(𝔽(k)), item, true) işlemini gerçekleştir.

    2. k değerini k + 1 olarak ayarla.

  20. ? Set(obj, "length", 𝔽(length - actualDeleteCount + itemCount), true) işlemini gerçekleştir.

  21. deletedArray döndür.

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

ECMA-402 Uluslararasılaştırma (Internationalization) API'sini içeren bir ECMAScript uygulaması bu metodu ECMA-402 şartnamesinde belirtildiği şekilde uygulamalıdır. Eğer bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu metodun aşağıdaki şartnamesi kullanılır.

Bu metodun isteğe bağlı parametrelerinin anlamları ECMA-402 şartnamesinde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar, bu parametre konumlarını başka hiçbir şey için kullanmamalıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. array, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(array) olsun.

  3. separator, ana bilgisayar ortamının (host environment) geçerli yerel ayarına (locale) uygun, uygulama tarafından tanımlanmış (implementation-defined) liste ayırıcı Karakter Dizisi (String) değeri (örneğin ", ") olsun.

  4. result, boş Karakter Dizisi (String) olsun.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla,

    1. Eğer k > 0 ise, result değerini result ile separator'ın karakter-dizisi-birleştirmesi olarak ayarla.

    2. element, ? Get(array, ! ToString(𝔽(k))) olsun.

    3. Eğer element undefined veya null değilse, o zaman

      1. elementString, ? ToString(? Invoke(element, "toLocaleString")) olsun.

      2. result değerini result ile elementString'in karakter-dizisi-birleştirmesi olarak ayarla.

    4. k değerini k + 1 olarak ayarla.

  7. result döndür.

23.1.3.33 Array.prototype.toReversed ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. array, ? ArrayCreate(length) olsun.

  4. k, 0 olsun.

  5. k < length olduğu sürece tekrarla,

    1. from, ! ToString(𝔽(length - k - 1)) olsun.

    2. propertyKey, ! ToString(𝔽(k)) olsun.

    3. fromValue, ? Get(obj, from) olsun.

    4. Perform ! CreateDataPropertyOrThrow(array, propertyKey, fromValue).

    5. k değerini k + 1 olarak ayarla.

  6. array döndür.

23.1.3.34 Array.prototype.toSorted ( comparator )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer comparator undefined değilse ve IsCallable(comparator) false ise, bir TypeError istisnası fırlat.

  2. obj, ? ToObject(this değeri) olsun.

  3. length, ? LengthOfArrayLike(obj) olsun.

  4. array, ? ArrayCreate(length) olsun.

  5. sortCompare, parametreleri (x, y) olan, comparator argümanını yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:

    1. Dönüş değeri: ? CompareArrayElements(x, y, comparator).
  6. sortedList, ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) olsun.

  7. j, 0 olsun.

  8. j < length olduğu sürece tekrarla,

    1. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(j)), sortedList[j]) işlemini gerçekleştir.

    2. j değerini j + 1 olarak ayarla.

  9. array döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  4. Eğer relativeStart = -∞ ise, actualStart, 0 olsun.

  5. Aksi takdirde, eğer relativeStart < 0 ise, actualStart, max(length + relativeStart, 0) olsun.

  6. Aksi takdirde, actualStart, min(relativeStart, length) olsun.

  7. insertCount, items içindeki öğelerin sayısı olsun.

  8. Eğer start sağlanmamışsa, o zaman

    1. dc, 0 olsun.
  9. Aksi takdirde, eğer skipCount sağlanmamışsa, o zaman

    1. actualSkipCount, length - actualStart olsun.
  10. Aksi takdirde,

    1. sc, ? ToIntegerOrInfinity(skipCount) olsun.

    2. actualSkipCount, sc değerinin 0 ile length - actualStart arasında sınırlandırılmasının (clamping) sonucu olsun.

  11. newLength, length + insertCount - actualSkipCount olsun.

  12. Eğer newLength > 253 - 1 ise, bir TypeError istisnası fırlat.

  13. newArray, ? ArrayCreate(newLength) olsun.

  14. writeIndex , 0 olsun.

  15. readIndex, actualStart + actualSkipCount olsun.

  16. writeIndex < actualStart olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(writeIndex)) olsun.

    2. iValue, ? Get(obj, propertyKey) olsun.

    3. ! CreateDataPropertyOrThrow(newArray, propertyKey, iValue) işlemini gerçekleştir.

    4. writeIndex değerini writeIndex + 1 olarak ayarla.

  17. items içindeki her bir item öğesi için şunları yap:

    1. propertyKey, ! ToString(𝔽(writeIndex)) olsun.

    2. ! CreateDataPropertyOrThrow(newArray, propertyKey, item) işlemini gerçekleştir.

    3. writeIndex değerini writeIndex + 1 olarak ayarla.

  18. writeIndex < newLength olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(writeIndex)) olsun.

    2. from, ! ToString(𝔽(readIndex)) olsun.

    3. fromValue, ? Get(obj, from) olsun.

    4. ! CreateDataPropertyOrThrow(newArray, propertyKey, fromValue) işlemini gerçekleştir.

    5. writeIndex değerini writeIndex + 1 olarak ayarla.

    6. readIndex değerini readIndex + 1 olarak ayarla.

  19. newArray döndür.

23.1.3.36 Array.prototype.toString ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. array, ? ToObject(this değeri) olsun.

  2. func, ? Get(array, "join") olsun.

  3. Eğer IsCallable(func) false ise, func değerini intrinsic %Object.prototype.toString% fonksiyonu olarak ayarla.

  4. ? Call(func, array) döndür.

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

Bu metot, argümanları dizinin başlangıcına, dizi içindeki sıraları argüman listesindeki sıralarıyla aynı olacak şekilde ekler.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. argCount, items içindeki öğelerin sayısı olsun.

  4. Eğer argCount > 0 ise, o zaman

    1. Eğer length + argCount > 253 - 1 ise, bir TypeError istisnası fırlat.

    2. k, length olsun.

    3. k > 0 olduğu sürece tekrarla,

      1. from, ! ToString(𝔽(k - 1)) olsun.

      2. to, ! ToString(𝔽(k + argCount - 1)) olsun.

      3. fromPresent, ? HasProperty(obj, from) olsun.

      4. Eğer fromPresent true ise, o zaman

         1. *fromValue*, ? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*obj*, *from*) olsun.
        
         2. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*obj*, *to*, *fromValue*, `true`) işlemini gerçekleştir.
      5. Aksi takdirde,

         1. [Assert](06_sec-notational-conventions.md#assert): *fromPresent* `false`'dur.
        
         2. ? [DeletePropertyOrThrow](08_sec-abstract-operations.md#sec-deletepropertyorthrow)(*obj*, *to*) işlemini gerçekleştir.
      6. k değerini k - 1 olarak ayarla.

    4. j, +0𝔽 olsun.

    5. items içindeki her bir item öğesi için şunları yap:

      1. ? Set(obj, ! ToString(j), item, true) işlemini gerçekleştir.

      2. j değerini j + 1𝔽 olarak ayarla.

  5. ? Set(obj, "length", 𝔽(length + argCount), true) işlemini gerçekleştir.

  6. 𝔽(length + argCount) döndür.

Bu metodun "length" özelliği 1𝔽'dir.

23.1.3.38 Array.prototype.values ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. Dönüş değeri: CreateArrayIterator(obj, value).

23.1.3.39 Array.prototype.with ( index, value )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. length, ? LengthOfArrayLike(obj) olsun.

  3. relativeIndex, ? ToIntegerOrInfinity(index) olsun.

  4. Eğer relativeIndex ≥ 0, actualIndex, relativeIndex olsun.

  5. Aksi takdirde, actualIndex, length + relativeIndex olsun.

  6. Eğer actualIndexlength veya actualIndex < 0 ise, bir RangeError istisnası fırlat.

  7. array, ? ArrayCreate(length) olsun.

  8. k, 0 olsun.

  9. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. Eğer k = actualIndex ise, fromValue, value olsun.

    3. Aksi takdirde, fromValue, ? Get(obj, propertyKey) olsun.

    4. ! CreateDataPropertyOrThrow(array, propertyKey, fromValue) işlemini gerçekleştir.

    5. k değerini k + 1 olarak ayarla.

  10. array döndür.

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

%Symbol.iterator% özelliğinin ilk değeri, 23.1.3.38 içinde tanımlanan %Array.prototype.values% intrinsic nesnesidir.

23.1.3.41 Array.prototype [ %Symbol.unscopables% ]

%Symbol.unscopables% veri özelliğinin (data property) ilk değeri, aşağıdaki adımlarla oluşturulan bir nesnedir:

  1. unscopableList, OrdinaryObjectCreate(null) olsun.

  2. ! CreateDataPropertyOrThrow(unscopableList, "at", true) işlemini gerçekleştir.

  3. ! CreateDataPropertyOrThrow(unscopableList, "copyWithin", true) işlemini gerçekleştir.

  4. ! CreateDataPropertyOrThrow(unscopableList, "entries", true) işlemini gerçekleştir.

  5. ! CreateDataPropertyOrThrow(unscopableList, "fill", true) işlemini gerçekleştir.

  6. ! CreateDataPropertyOrThrow(unscopableList, "find", true) işlemini gerçekleştir.

  7. ! CreateDataPropertyOrThrow(unscopableList, "findIndex", true) işlemini gerçekleştir.

  8. ! CreateDataPropertyOrThrow(unscopableList, "findLast", true) işlemini gerçekleştir.

  9. ! CreateDataPropertyOrThrow(unscopableList, "findLastIndex", true) işlemini gerçekleştir.

  10. ! CreateDataPropertyOrThrow(unscopableList, "flat", true) işlemini gerçekleştir.

  11. ! CreateDataPropertyOrThrow(unscopableList, "flatMap", true) işlemini gerçekleştir.

  12. ! CreateDataPropertyOrThrow(unscopableList, "includes", true) işlemini gerçekleştir.

  13. ! CreateDataPropertyOrThrow(unscopableList, "keys", true) işlemini gerçekleştir.

  14. ! CreateDataPropertyOrThrow(unscopableList, "toReversed", true) işlemini gerçekleştir.

  15. ! CreateDataPropertyOrThrow(unscopableList, "toSorted", true) işlemini gerçekleştir.

  16. ! CreateDataPropertyOrThrow(unscopableList, "toSpliced", true) işlemini gerçekleştir.

  17. ! CreateDataPropertyOrThrow(unscopableList, "values", true) işlemini gerçekleştir.

  18. unscopableList döndür.

Bu özellik, { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

23.1.4 Properties of Array Instances

Dizi örnekleri, Dizi aykırı nesneleridir (Array exotic objects) ve bu tür nesneler için belirtilen dahili metotlara sahiptir. Dizi örnekleri, Dizi prototip nesnesinden özellikleri miras alır.

Dizi örneklerinin bir "length" özelliği ve dizi dizin adlarına sahip bir dizi numaralandırılabilir özelliği vardır.

23.1.4.1 length

Bir Dizi örneğinin "length" özelliği, değeri her zaman adı bir dizi dizini (array index) olan her yapılandırılabilir (configurable) kendi özelliğinin adından sayısal olarak daha büyük olan bir veri özelliğidir (data property).

"length" özelliği başlangıçta { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

23.1.5 Array Iterator Objects

Dizi Yineleyici nesneleri için adlandırılmış bir yapıcı (constructor) yoktur. Bunun yerine, Dizi Yineleyici nesneleri, Dizi örnek nesnelerinin belirli metotları çağrılarak oluşturulur.

23.1.5.1 CreateArrayIterator ( array, kind )

CreateArrayIterator soyut işlemi; array (bir Nesne) ve kind (key+value, key veya value) argümanlarını alır ve bir Nesne döndürür. Bu işlem, bu tür yineleyiciler (iterators) döndüren Dizi metotları için yineleyici nesneleri (iterator objects) oluşturmak amacıyla kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. iterator, OrdinaryObjectCreate(%ArrayIteratorPrototype%, « [[IteratedArrayLike]], [[ArrayLikeNextIndex]], [[ArrayLikeIterationKind]] ») olsun.

  2. iterator.[[IteratedArrayLike]] değerini array olarak ayarla.

  3. iterator.[[ArrayLikeNextIndex]] değerini 0 olarak ayarla.

  4. iterator.[[ArrayLikeIterationKind]] değerini kind olarak ayarla.

  5. iterator döndür.

23.1.5.2 The %ArrayIteratorPrototype% Object

%ArrayIteratorPrototype% nesnesi:

23.1.5.2.1 %ArrayIteratorPrototype%.next ( )
  1. iteratorObj be the this value.

  2. Eğer iteratorObj bir Nesne değilse, bir TypeError istisnası fırlat.

  3. Eğer iteratorObj, bir Dizi Yineleyici Örneğinin (23.1.5.3) tüm dahili yuvalarına sahip değilse, bir TypeError istisnası fırlat.

  4. array, iteratorObj.[[IteratedArrayLike]] olsun.

  5. Eğer array undefined ise, CreateIteratorResultObject(undefined, true) döndür.

  6. index, iteratorObj.[[ArrayLikeNextIndex]] olsun.

  7. kind, iteratorObj.[[ArrayLikeIterationKind]] olsun.

  8. Eğer array, bir [[TypedArrayName]] dahili yuvasına sahipse, o zaman

    1. taRecord, MakeTypedArrayWithBufferWitnessRecord(array, seq-cst) olsun.

    2. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

    3. length, TypedArrayLength(taRecord) olsun.

  9. Aksi takdirde,

    1. length, ? LengthOfArrayLike(array) olsun.
  10. Eğer indexlength ise, o zaman

    1. iteratorObj.[[IteratedArrayLike]] değerini undefined olarak ayarla.

    2. CreateIteratorResultObject(undefined, true) döndür.

  11. iteratorObj.[[ArrayLikeNextIndex]] değerini index + 1 olarak ayarla.

  12. indexNumber, 𝔽(index) olsun.

    1. Eğer kind key ise, o zaman

    2. result, indexNumber olsun.

  13. Aksi takdirde,

    1. elementKey, ! ToString(indexNumber) olsun.

    2. elementValue, ? Get(array, elementKey) olsun.

    3. Eğer kind value ise, o zaman

      1. result, elementValue olsun.
    4. Aksi takdirde,

      1. Assert: kind, key+value'dur.

      2. result, CreateArrayFromListindexNumber, elementValue ») olsun.

  14. CreateIteratorResultObject(result, false) döndür.

23.1.5.2.2 %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag% özelliğinin ilk değeri "Array Iterator" Karakter Dizisi (String) değeridir.

Bu özellik, { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

23.1.5.3 Properties of Array Iterator Instances

Dizi Yineleyici (Array Iterator) örnekleri, %ArrayIteratorPrototype% intrinsic nesnesinden özellikleri miras alan sıradan nesnelerdir (ordinary objects). Dizi Yineleyici (Array Iterator) örnekleri, başlangıçta Tablo 69 içinde listelenen dahili yuvalarla oluşturulur.

Tablo 69: Dizi Yineleyici (Array Iterator) Örneklerinin Dahili Yuvaları

Dahili Yuva Tür Açıklama
[[IteratedArrayLike]] bir Nesne veya undefined Yinelemekte olan dizi benzeri nesne.
[[ArrayLikeNextIndex]] negatif olmayan bir tamsayı Bu yineleyici tarafından incelenecek bir sonraki öğenin tamsayı dizini.
[[ArrayLikeIterationKind]] key+value, key, veya value Yinelemenin her bir öğesi için neyin döndürüleceğini belirleyen değer.

23.2 TypedArray Objects

Bir TypedArray, altta yatan bir ikili veri tamponunun (25.1) dizi benzeri bir görünümünü sunar. Bir TypedArray öğe türü, bir TypedArray örneğinin tüm öğelerinin sahip olduğu, altta yatan ikili skaler veri türüdür. Desteklenen her bir öğe türü için Tablo 70 içinde listelenen farklı bir TypedArray yapıcısı (constructor) vardır. Tablo 70 içindeki her bir yapıcının (constructor) karşılık gelen farklı bir prototip nesnesi vardır.

Tablo 70: TypedArray Yapıcıları (Constructors)

Yapıcı (Constructor) Adı ve Intrinsic Öğe Türü Öğe Boyutu Dönüştürme İşlemi Açıklama
Int8Array %Int8Array% int8 1 ToInt8 8-bit ikiye tümleyen işaretli tamsayı
Uint8Array %Uint8Array% uint8 1 ToUint8 8-bit işaretsiz tamsayı
Uint8ClampedArray %Uint8ClampedArray% uint8clamped 1 ToUint8Clamp 8-bit işaretsiz tamsayı (sınırlandırılmış dönüştürme)
Int16Array %Int16Array% int16 2 ToInt16 16-bit ikiye tümleyen işaretli tamsayı
Uint16Array %Uint16Array% uint16 2 ToUint16 16-bit işaretsiz tamsayı
Int32Array %Int32Array% int32 4 ToInt32 32-bit ikiye tümleyen işaretli tamsayı
Uint32Array %Uint32Array% uint32 4 ToUint32 32-bit işaretsiz tamsayı
BigInt64Array %BigInt64Array% bigint64 8 ToBigInt64 64-bit ikiye tümleyen işaretli tamsayı
BigUint64Array %BigUint64Array% biguint64 8 ToBigUint64 64-bit işaretsiz tamsayı
Float16Array %Float16Array% float16 2 16-bit IEEE kayan nokta
Float32Array %Float32Array% float32 4 32-bit IEEE kayan nokta
Float64Array %Float64Array% float64 8 64-bit IEEE kayan nokta

Aşağıdaki tanımlarda, TypedArray ifadeleri yukarıdaki tablodan uygun yapıcı (constructor) adı ile değiştirilmelidir.

23.2.1 The %TypedArray% Intrinsic Object

%TypedArray% intrinsic nesnesi:

23.2.1.1 %TypedArray% ( )

Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Bir TypeError istisnası fırlat.

Bu fonksiyonun "length" özelliği +0𝔽'dır.

23.2.2 Properties of the %TypedArray% Intrinsic Object

%TypedArray% intrinsic nesnesi:

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.

  • değeri "TypedArray" olan bir "name" özelliğine sahiptir.

  • aşağıdaki özelliklere sahiptir:

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ctor, this değeri olsun.

  2. Eğer IsConstructor(ctor) false ise, bir TypeError istisnası fırlat.

  3. Eğer mapper undefined ise, o zaman

    1. mapping, false olsun.
  4. Aksi takdirde,

    1. Eğer IsCallable(mapper) false ise, bir TypeError istisnası fırlat.

    2. mapping, true olsun.

  5. usingIterator, ? GetMethod(source, %Symbol.iterator%) olsun.

  6. Eğer usingIterator undefined değilse, o zaman

    1. values, ? IteratorToList(? GetIteratorFromMethod(source, usingIterator)) olsun.

    2. length, values içindeki öğelerin sayısı olsun.

    3. targetObj, ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») olsun.

    4. k, 0 olsun.

    5. k < length olduğu sürece tekrarla,

      1. propertyKey, ! ToString(𝔽(k)) olsun.

      2. kValue, values listesinin ilk öğesi olsun.

      3. values listesinden ilk öğeyi kaldır.

      4. Eğer mapping true ise, o zaman

         1. *mappedValue*, ? [Call](08_sec-abstract-operations.md#sec-call)(*mapper*, *thisArg*, « *kValue*, [𝔽](06_sec-notational-conventions.md#𝔽)(*k*) ») olsun.
      5. Aksi takdirde,

         1. *mappedValue*, *kValue* olsun.
      6. ? Set(targetObj, propertyKey, mappedValue, true) işlemini gerçekleştir.

      7. k değerini k + 1 olarak ayarla.

    6. Assert: values artık boş bir Listeden (List) ibarettir.

    7. targetObj döndür.

  7. NOTE: source yinelenebilir bir nesne (iterable object) değildir, bu yüzden zaten dizi benzeri bir nesne (array-like object) olduğu varsayılır.

  8. arrayLike, ! ToObject(source) olsun.

  9. length, ? LengthOfArrayLike(arrayLike) olsun.

  10. targetObj, ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») olsun.

  11. k, 0 olsun.

  12. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ? Get(arrayLike, propertyKey) olsun.

    3. Eğer mapping true ise, o zaman

      1. mappedValue, ? Call(mapper, thisArg, « kValue, 𝔽(k) ») olsun.
    4. Aksi takdirde,

      1. mappedValue, kValue olsun.
    5. ? Set(targetObj, propertyKey, mappedValue, true) işlemini gerçekleştir.

    6. k değerini k + 1 olarak ayarla.

  13. targetObj döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, items içindeki öğelerin sayısı olsun.

  2. ctor, this değeri olsun.

  3. Eğer IsConstructor(ctor) false ise, bir TypeError istisnası fırlat.

  4. newObj, ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») olsun.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla,

    1. kValue, items[k] olsun.

    2. propertyKey, ! ToString(𝔽(k)) olsun.

    3. ? Set(newObj, propertyKey, kValue, true) işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

  7. newObj döndür.

23.2.2.3 %TypedArray%.prototype

%TypedArray%.prototype özelliğinin ilk değeri %TypedArray% prototip nesnesidir.

Bu özellik, { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

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

%TypedArray%[%Symbol.species%] set erişici fonksiyonu (set accessor function) undefined olan bir erişim özelliğidir (accessor property). Get erişici fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. this değerini döndür.

Bu fonksiyonun "name" özelliğinin değeri "get [Symbol.species]" Karakter Dizisidir.

23.2.3 Properties of the %TypedArray% Prototype Object

%TypedArray% prototip nesnesi:

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.

  • %TypedArray.prototype%'dır.

  • bir sıradan nesnedir (ordinary object).

  • [[ViewedArrayBuffer]] dahili yuvasına veya TypedArray örnek nesnelerine özgü diğer dahili yuvalara sahip değildir.

23.2.3.1 %TypedArray%.prototype.at ( index )

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. relativeIndex, ? ToIntegerOrInfinity(index) olsun.

  5. Eğer relativeIndex ≥ 0 ise, o zaman

    1. k, relativeIndex olsun.
  6. Aksi takdirde,

    1. k, length + relativeIndex olsun.
  7. Eğer k < 0 veya klength ise, undefined döndür.

  8. ! Get(obj, ! ToString(𝔽(k))) döndür.

23.2.3.2 get %TypedArray%.prototype.buffer

%TypedArray%.prototype.buffer set erişici fonksiyonu undefined olan bir erişim özelliğidir (accessor property). Get erişici fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) işlemini gerçekleştir.

  3. Assert: obj nesnesinin bir [[ViewedArrayBuffer]] dahili yuvası vardır.

  4. buffer, obj.[[ViewedArrayBuffer]] olsun.

  5. buffer döndür.

23.2.3.3 get %TypedArray%.prototype.byteLength

%TypedArray%.prototype.byteLength set erişici fonksiyonu undefined olan bir erişim özelliğidir (accessor property). Get erişici fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) işlemini gerçekleştir.

  3. Assert: obj nesnesinin bir [[ViewedArrayBuffer]] dahili yuvası vardır.

  4. taRecord, MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) olsun.

  5. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, +0𝔽 döndür.

  6. size, TypedArrayByteLength(taRecord) olsun.

  7. 𝔽(size) döndür.

23.2.3.4 get %TypedArray%.prototype.byteOffset

%TypedArray%.prototype.byteOffset set erişici fonksiyonu undefined olan bir erişim özelliğidir (accessor property). Get erişici fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) işlemini gerçekleştir.

  3. Assert: obj nesnesinin bir [[ViewedArrayBuffer]] dahili yuvası vardır.

  4. taRecord, MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) olsun.

  5. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, +0𝔽 döndür.

  6. offset, obj.[[ByteOffset]] olsun.

  7. 𝔽(offset) döndür.

23.2.3.5 %TypedArray%.prototype.constructor

%TypedArray%.prototype.constructor özelliğinin ilk değeri %TypedArray% nesnesidir.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.4 içinde tanımlanan Array.prototype.copyWithin ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. relativeTarget, ? ToIntegerOrInfinity(target) olsun.

  5. Eğer relativeTarget = -∞ ise, targetIndex, 0 olsun.

  6. Aksi takdirde, eğer relativeTarget < 0 ise, targetIndex, max(length + relativeTarget, 0) olsun.

  7. Aksi takdirde, targetIndex, min(relativeTarget, length) olsun.

  8. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  9. Eğer relativeStart = -∞ ise, startIndex, 0 olsun.

  10. Aksi takdirde, eğer relativeStart < 0 ise, startIndex, max(length + relativeStart, 0) olsun.

  11. Aksi takdirde, startIndex, min(relativeStart, length) olsun.

  12. Eğer end undefined ise, relativeEnd, length olsun; aksi takdirde relativeEnd, ? ToIntegerOrInfinity(end) olsun.

  13. Eğer relativeEnd = -∞ ise, endIndex, 0 olsun.

  14. Aksi takdirde, eğer relativeEnd < 0 ise, endIndex, max(length + relativeEnd, 0) olsun.

  15. Aksi takdirde, endIndex, min(relativeEnd, length) olsun.

  16. count, min(endIndex - startIndex, length - targetIndex) olsun.

  17. Eğer count > 0 ise, o zaman

    1. NOTE: Kopyalama, kaynak verilerin bit düzeyinde kopyalamasını koruyacak şekilde gerçekleştirilmelidir.

    2. buffer, obj.[[ViewedArrayBuffer]] olsun.

    3. Set taRecord to MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst).

    4. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

    5. length değerini TypedArrayLength(taRecord) olarak ayarla.

    6. NOTE: Yukarıdaki adımların yan etkileri obj nesnesinin boyutunu azaltmış olabilir, bu durumda kopyalama hala geçerli olan en uzun önek ile devam etmelidir.

    7. count değerini min(count, length - startIndex, length - targetIndex) olarak ayarla.

    8. elementSize, TypedArrayElementSize(obj) olsun.

    9. byteOffset, obj.[[ByteOffset]] olsun.

    10. toByteIndex, (targetIndex × elementSize) + byteOffset olsun.

    11. fromByteIndex, (startIndex × elementSize) + byteOffset olsun.

    12. countBytes, count × elementSize olsun.

    13. Eğer fromByteIndex < toByteIndex ve toByteIndex < fromByteIndex + countBytes ise, o zaman

      1. direction, -1 olsun.

      2. fromByteIndex değerini fromByteIndex + countBytes - 1 olarak ayarla.

      3. toByteIndex değerini toByteIndex + countBytes - 1 olarak ayarla.

    14. Aksi takdirde,

      1. direction, 1 olsun.
    15. countBytes > 0 olduğu sürece tekrarla,

      1. value, GetValueFromBuffer(buffer, fromByteIndex, uint8, true, unordered) olsun.

      2. SetValueInBuffer(buffer, toByteIndex, uint8, value, true, unordered) işlemini gerçekleştir.

      3. fromByteIndex değerini fromByteIndex + direction olarak ayarla.

      4. toByteIndex değerini toByteIndex + direction olarak ayarla.

      5. countBytes değerini countBytes - 1 olarak ayarla.

  18. obj döndür.

23.2.3.7 %TypedArray%.prototype.entries ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? ValidateTypedArray(obj, seq-cst) işlemini gerçekleştir.

  3. CreateArrayIterator(obj, key+value) döndür.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.6 içinde tanımlanan Array.prototype.every ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ! Get(obj, propertyKey) olsun.

    3. testResult, ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) olsun.

    4. Eğer testResult false ise, false döndür.

    5. k değerini k + 1 olarak ayarla.

  7. true döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.7 içinde tanımlanan Array.prototype.fill ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer obj.[[ContentType]] bigint ise, value değerini ? ToBigInt(value) olarak ayarla.

  5. Aksi takdirde, value değerini ? ToNumber(value) olarak ayarla.

  6. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  7. Eğer relativeStart = -∞ ise, startIndex, 0 olsun.

  8. Aksi takdirde, eğer relativeStart < 0 ise, startIndex, max(length + relativeStart, 0) olsun.

  9. Aksi takdirde, startIndex, min(relativeStart, length) olsun.

  10. Eğer end undefined ise, relativeEnd, length olsun; aksi takdirde relativeEnd, ? ToIntegerOrInfinity(end) olsun.

  11. Eğer relativeEnd = -∞ ise, endIndex, 0 olsun.

  12. Aksi takdirde, eğer relativeEnd < 0 ise, endIndex, max(length + relativeEnd, 0) olsun.

  13. Aksi takdirde, endIndex, min(relativeEnd, length) olsun.

  14. Set taRecord to MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst).

  15. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

  16. length değerini TypedArrayLength(taRecord) olarak ayarla.

  17. endIndex değerini min(endIndex, length) olarak ayarla.

  18. k, startIndex olsun.

  19. k < endIndex olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. ! Set(obj, propertyKey, value, true) işlemini gerçekleştir.

    3. k değerini k + 1 olarak ayarla.

  20. obj döndür.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.8 içinde tanımlanan Array.prototype.filter ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  5. kept, yeni boş bir Liste (List) olsun.

  6. captured, 0 olsun.

  7. k, 0 olsun.

  8. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ! Get(obj, propertyKey) olsun.

    3. selected, ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) olsun.

    4. Eğer selected true ise, o zaman

      1. kValue değerini kept listesinin sonuna ekle.

      2. captured değerini captured + 1 olarak ayarla.

    5. k değerini k + 1 olarak ayarla.

  9. result, ? TypedArraySpeciesCreate(obj, « 𝔽(captured) ») olsun.

  10. n, 0 olsun.

  11. kept listesindeki her bir element öğesi için şunları yap:

    1. ! Set(result, ! ToString(𝔽(n)), element, true) işlemini gerçekleştir.

    2. n değerini n + 1 olarak ayarla.

  12. result döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.9 içinde tanımlanan Array.prototype.find ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. findRecord, ? FindViaPredicate(obj, length, ascending, predicate, thisArg) olsun.

  5. findRecord.[[Value]] döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.10 içinde tanımlanan Array.prototype.findIndex ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. findRecord, ? FindViaPredicate(obj, length, ascending, predicate, thisArg) olsun.

  5. findRecord.[[Index]] döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.11 içinde tanımlanan Array.prototype.findLast ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. findRecord, ? FindViaPredicate(obj, length, descending, predicate, thisArg) olsun.

  5. findRecord.[[Value]] döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.12 içinde tanımlanan Array.prototype.findLastIndex ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. findRecord, ? FindViaPredicate(obj, length, descending, predicate, thisArg) olsun.

  5. findRecord.[[Index]] döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.15 içinde tanımlanan Array.prototype.forEach ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ! Get(obj, propertyKey) olsun.

    3. ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

  7. undefined döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.16 içinde tanımlanan Array.prototype.includes ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer length = 0 ise, false döndür.

  5. n, ? ToIntegerOrInfinity(fromIndex) olsun.

  6. Assert: Eğer fromIndex undefined ise, n 0'dır.

  7. Eğer n = +∞ ise, false döndür.

  8. Eğer n = -∞ ise, n değerini 0 olarak ayarla.

  9. Eğer n ≥ 0 ise,

    1. k, n olsun.
  10. Değilse,

    1. k, length + n olsun.

    2. Eğer k < 0 ise, k değerini 0 olarak ayarla.

  11. k < length olduğu sürece tekrarla,

    1. elementK, ! Get(obj, ! ToString(𝔽(k))) olsun.

    2. Eğer SameValueZero(searchElement, elementK) true ise, true döndür.

    3. k değerini k + 1 olarak ayarla.

  12. false döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.17 içinde tanımlanan Array.prototype.indexOf ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer length = 0 ise, -1𝔽 döndür.

  5. n, ? ToIntegerOrInfinity(fromIndex) olsun.

  6. Assert: Eğer fromIndex undefined ise, n 0'dır.

  7. Eğer n = +∞ ise, -1𝔽 döndür.

  8. Eğer n = -∞ ise, n değerini 0 olarak ayarla.

  9. Eğer n ≥ 0 ise,

    1. k, n olsun.
  10. Değilse,

    1. k, length + n olsun.

    2. Eğer k < 0 ise, k değerini 0 olarak ayarla.

  11. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ! HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise,

      1. elementK, ! Get(obj, propertyKey) olsun.

      2. Eğer IsStrictlyEqual(searchElement, elementK) true ise, 𝔽(k) döndür.

    4. k değerini k + 1 olarak ayarla.

  12. -1𝔽 döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

23.2.3.18 %TypedArray%.prototype.join ( separator )

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.18 içinde tanımlanan Array.prototype.join ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer separator undefined ise, sep "," olsun.

  5. Değilse, sep, ? ToString(separator) olsun.

  6. result, boş Dize (String) olsun.

  7. k, 0 olsun.

  8. k < length olduğu sürece tekrarla,

    1. Eğer k > 0 ise, result değerini, result ve sep'in dize birleşimi (string-concatenation) olarak ayarla.

    2. element, ! Get(obj, ! ToString(𝔽(k))) olsun.

    3. Eğer element undefined değilse,

      1. elementString, ! ToString(element) olsun.

      2. result değerini, result ve elementString'in dize birleşimi (string-concatenation) olarak ayarla.

    4. k değerini k + 1 olarak ayarla.

  9. result döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

23.2.3.19 %TypedArray%.prototype.keys ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? ValidateTypedArray(obj, seq-cst) işlemini gerçekleştir.

  3. CreateArrayIterator(obj, key) döndür.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.20 içinde tanımlanan Array.prototype.lastIndexOf ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer length = 0 ise, -1𝔽 döndür.

  5. Eğer fromIndex mevcutsa, n, ? ToIntegerOrInfinity(fromIndex) olsun; değilse n, length - 1 olsun.

  6. Eğer n = -∞ ise, -1𝔽 döndür.

  7. Eğer n ≥ 0 ise,

    1. k, min(n, length - 1) olsun.
  8. Değilse,

    1. k, length + n olsun.
  9. k ≥ 0 olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kPresent, ! HasProperty(obj, propertyKey) olsun.

    3. Eğer kPresent true ise,

      1. elementK, ! Get(obj, propertyKey) olsun.

      2. Eğer IsStrictlyEqual(searchElement, elementK) true ise, 𝔽(k) döndür.

    4. k değerini k - 1 olarak ayarla.

  10. -1𝔽 döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

23.2.3.21 get %TypedArray%.prototype.length

%TypedArray%.prototype.length, set erişimci (accessor) fonksiyonu undefined olan bir erişimci özelliktir (accessor property). Get erişimci fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) işlemini gerçekleştir.

  3. Assert: obj, [[ViewedArrayBuffer]] ve [[ArrayLength]] dahili yuvalarına sahiptir.

  4. taRecord, MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) olsun.

  5. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, +0𝔽 döndür.

  6. length, TypedArrayLength(taRecord) olsun.

  7. 𝔽(length) döndür.

Bu fonksiyon genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.21 içinde tanımlanan Array.prototype.map ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  5. result, ? TypedArraySpeciesCreate(obj, « 𝔽(length) ») olsun.

  6. k, 0 olsun.

  7. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ! Get(obj, propertyKey) olsun.

    3. mappedValue, ? Call(callback, thisArg, « kValue, 𝔽(k), obj ») olsun.

    4. ? Set(result, propertyKey, mappedValue, true) işlemini gerçekleştir.

    5. k değerini k + 1 olarak ayarla.

  8. result döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.24 içinde tanımlanan Array.prototype.reduce ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  5. Eğer length = 0 ise ve initialValue mevcut değilse, bir TypeError istisnası fırlat.

  6. k, 0 olsun.

  7. accumulator, undefined olsun.

  8. Eğer initialValue mevcutsa, o zaman

    1. accumulator değerini initialValue olarak ayarla.
  9. Değilse,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. accumulator değerini ! Get(obj, propertyKey) olarak ayarla.

    3. k değerini k + 1 olarak ayarla.

  10. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ! Get(obj, propertyKey) olsun.

    3. accumulator değerini ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») olarak ayarla.

    4. k değerini k + 1 olarak ayarla.

  11. accumulator döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.25 içinde tanımlanan Array.prototype.reduceRight ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  5. Eğer length = 0 ise ve initialValue mevcut değilse, bir TypeError istisnası fırlat.

  6. k, length - 1 olsun.

  7. accumulator, undefined olsun.

  8. Eğer initialValue mevcutsa, o zaman

    1. accumulator değerini initialValue olarak ayarla.
  9. Değilse,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. accumulator değerini ! Get(obj, propertyKey) olarak ayarla.

    3. k değerini k - 1 olarak ayarla.

  10. k ≥ 0 olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ! Get(obj, propertyKey) olsun.

    3. accumulator değerini ? Call(callback, undefined, « accumulator, kValue, 𝔽(k), obj ») olarak ayarla.

    4. k değerini k - 1 olarak ayarla.

  11. accumulator döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

23.2.3.25 %TypedArray%.prototype.reverse ( )

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.26 içinde tanımlanan Array.prototype.reverse ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. middle, floor(length / 2) olsun.

  5. lower, 0 olsun.

  6. lowermiddle olduğu sürece tekrarla,

    1. upper, length - lower - 1 olsun.

    2. upperP, ! ToString(𝔽(upper)) olsun.

    3. lowerP, ! ToString(𝔽(lower)) olsun.

    4. lowerValue, ! Get(obj, lowerP) olsun.

    5. upperValue, ! Get(obj, upperP) olsun.

    6. ! Set(obj, lowerP, upperValue, true) işlemini gerçekleştir.

    7. ! Set(obj, upperP, lowerValue, true) işlemini gerçekleştir.

    8. lower değerini lower + 1 olarak ayarla.

  7. obj döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metot, değerleri source'dan okuyarak bu TypedArray içindeki birden fazla değeri ayarlar. Detaylar, source'un türüne göre değişiklik gösterir. İsteğe bağlı offset değeri, bu TypedArray içinde değerlerin yazılacağı ilk eleman dizinini belirtir. Belirtilmezse, 0 olduğu varsayılır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. target, this değeri olsun.

  2. ? RequireInternalSlot(target, [[TypedArrayName]]) işlemini gerçekleştir.

  3. Assert: target, [[ViewedArrayBuffer]] dahili yuvasına sahiptir.

  4. targetOffset, ? ToIntegerOrInfinity(offset) olsun.

  5. Eğer targetOffset < 0 ise, bir RangeError istisnası fırlat.

  6. Eğer source, [[TypedArrayName]] dahili yuvasına sahip bir Nesne (Object) ise,

    1. ? SetTypedArrayFromTypedArray(target, targetOffset, source) işlemini gerçekleştir.
  7. Değilse,

    1. ? SetTypedArrayFromArrayLike(target, targetOffset, source) işlemini gerçekleştir.
  8. undefined döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

23.2.3.26.1 SetTypedArrayFromArrayLike ( target, targetOffset, source )

SetTypedArrayFromArrayLike soyut işlemi, target (bir TypedArray), targetOffset (negatif olmayan bir tamsayı (integer) veya +∞) ve source (bir ECMAScript dil değeri fakat bir TypedArray değil) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. source'dan değerleri okuyarak, targetOffset dizininden başlayarak target içinde birden fazla değeri ayarlar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. targetRecord, MakeTypedArrayWithBufferWitnessRecord(target, seq-cst) olsun.

  2. Eğer IsTypedArrayOutOfBounds(targetRecord) true ise, bir TypeError istisnası fırlat.

  3. targetLength, TypedArrayLength(targetRecord) olsun.

  4. source değerini ? ToObject(source) olarak ayarla.

  5. sourceLength, ? LengthOfArrayLike(source) olsun.

  6. Eğer targetOffset = +∞ ise, bir RangeError istisnası fırlat.

  7. Eğer sourceLength + targetOffset > targetLength ise, bir RangeError istisnası fırlat.

  8. k, 0 olsun.

  9. k < sourceLength olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. value, ? Get(source, propertyKey) olsun.

    3. targetIndex, 𝔽(targetOffset + k) olsun.

    4. ? TypedArraySetElement(target, targetIndex, value) işlemini gerçekleştir.

    5. k değerini k + 1 olarak ayarla.

  10. unused döndür.

23.2.3.26.2 SetTypedArrayFromTypedArray ( target, targetOffset, source )

SetTypedArrayFromTypedArray soyut işlemi, target (bir TypedArray), targetOffset (negatif olmayan bir tamsayı (integer) veya +∞) ve source (bir TypedArray) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. source'dan değerleri okuyarak, targetOffset dizininden başlayarak target içinde birden fazla değeri ayarlar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. targetBuffer, target.[[ViewedArrayBuffer]] olsun.

  2. targetRecord, MakeTypedArrayWithBufferWitnessRecord(target, seq-cst) olsun.

  3. Eğer IsTypedArrayOutOfBounds(targetRecord) true ise, bir TypeError istisnası fırlat.

  4. targetLength, TypedArrayLength(targetRecord) olsun.

  5. sourceBuffer, source.[[ViewedArrayBuffer]] olsun.

  6. sourceRecord, MakeTypedArrayWithBufferWitnessRecord(source, seq-cst) olsun.

  7. Eğer IsTypedArrayOutOfBounds(sourceRecord) true ise, bir TypeError istisnası fırlat.

  8. sourceLength, TypedArrayLength(sourceRecord) olsun.

  9. targetType, TypedArrayElementType(target) olsun.

  10. targetElementSize, TypedArrayElementSize(target) olsun.

  11. targetByteOffset, target.[[ByteOffset]] olsun.

  12. sourceType, TypedArrayElementType(source) olsun.

  13. sourceElementSize, TypedArrayElementSize(source) olsun.

  14. sourceByteOffset, source.[[ByteOffset]] olsun.

  15. Eğer targetOffset = +∞ ise, bir RangeError istisnası fırlat.

  16. Eğer sourceLength + targetOffset > targetLength ise, bir RangeError istisnası fırlat.

  17. Eğer target.[[ContentType]] değeri source.[[ContentType]] değeri ile aynı değilse, bir TypeError istisnası fırlat.

  18. Eğer IsSharedArrayBuffer(sourceBuffer) true, IsSharedArrayBuffer(targetBuffer) true ve sourceBuffer.[[ArrayBufferData]] değeri targetBuffer.[[ArrayBufferData]] ile aynıysa, sameSharedArrayBuffer true olsun; değilse sameSharedArrayBuffer false olsun.

  19. Eğer SameValue(sourceBuffer, targetBuffer) true veya sameSharedArrayBuffer true ise, o zaman

    1. sourceByteLength, TypedArrayByteLength(sourceRecord) olsun.

    2. sourceBuffer değerini ? CloneArrayBuffer(sourceBuffer, sourceByteOffset, sourceByteLength) olarak ayarla.

    3. sourceByteIndex, 0 olsun.

  20. Değilse,

    1. sourceByteIndex, sourceByteOffset olsun.
  21. targetByteIndex, (targetOffset × targetElementSize) + targetByteOffset olsun.

  22. limit, targetByteIndex + (targetElementSize × sourceLength) olsun.

  23. Eğer sourceType değeri targetType ile aynıysa, o zaman

    1. NOTE: Aktarım, kaynak verinin bit düzeyindeki kodlamasını koruyacak şekilde gerçekleştirilmelidir.

    2. targetByteIndex < limit olduğu sürece tekrarla,

      1. value, GetValueFromBuffer(sourceBuffer, sourceByteIndex, uint8, true, unordered) olsun.

      2. SetValueInBuffer(targetBuffer, targetByteIndex, uint8, value, true, unordered) işlemini gerçekleştir.

      3. sourceByteIndex değerini sourceByteIndex + 1 olarak ayarla.

      4. targetByteIndex değerini targetByteIndex + 1 olarak ayarla.

  24. Değilse,

    1. targetByteIndex < limit olduğu sürece tekrarla,

      1. value, GetValueFromBuffer(sourceBuffer, sourceByteIndex, sourceType, true, unordered) olsun.

      2. SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, unordered) işlemini gerçekleştir.

      3. sourceByteIndex değerini sourceByteIndex + sourceElementSize olarak ayarla.

      4. targetByteIndex değerini targetByteIndex + targetElementSize olarak ayarla.

  25. unused döndür.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.28 içinde tanımlanan Array.prototype.slice ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. sourceArrayLength, TypedArrayLength(taRecord) olsun.

  4. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  5. Eğer relativeStart = -∞ ise, startIndex 0 olsun.

  6. Değilse eğer relativeStart < 0 ise, startIndex, max(sourceArrayLength + relativeStart, 0) olsun.

  7. Değilse, startIndex, min(relativeStart, sourceArrayLength) olsun.

  8. Eğer end undefined ise, relativeEnd, sourceArrayLength olsun; değilse relativeEnd, ? ToIntegerOrInfinity(end) olsun.

  9. Eğer relativeEnd = -∞ ise, endIndex 0 olsun.

  10. Değilse eğer relativeEnd < 0 ise, endIndex, max(sourceArrayLength + relativeEnd, 0) olsun.

  11. Değilse, endIndex, min(relativeEnd, sourceArrayLength) olsun.

  12. countBytes, max(endIndex - startIndex, 0) olsun.

  13. resultArray, ? TypedArraySpeciesCreate(obj, « 𝔽(countBytes) ») olsun.

  14. Eğer countBytes > 0 ise, o zaman

    1. taRecord değerini MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) olarak ayarla.

    2. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

    3. endIndex değerini min(endIndex, TypedArrayLength(taRecord)) olarak ayarla.

    4. countBytes değerini max(endIndex - startIndex, 0) olarak ayarla.

    5. sourceType, TypedArrayElementType(obj) olsun.

    6. targetType, TypedArrayElementType(resultArray) olsun.

    7. Eğer sourceType değeri targetType ile aynıysa, o zaman

      1. NOTE: Aktarım, kaynak verinin bit düzeyindeki kodlamasını koruyacak şekilde gerçekleştirilmelidir.

      2. sourceBuffer, obj.[[ViewedArrayBuffer]] olsun.

      3. targetBuffer, resultArray.[[ViewedArrayBuffer]] olsun.

      4. elementSize, TypedArrayElementSize(obj) olsun.

      5. sourceByteOffset, obj.[[ByteOffset]] olsun.

      6. sourceByteIndex, (startIndex × elementSize) + sourceByteOffset olsun.

      7. targetByteIndex, resultArray.[[ByteOffset]] olsun.

      8. endByteIndex, targetByteIndex + (countBytes × elementSize) olsun.

      9. targetByteIndex < endByteIndex olduğu sürece tekrarla,

         1. *value*, [GetValueFromBuffer](26_sec-structured-data.md#sec-getvaluefrombuffer)(*sourceBuffer*, *sourceByteIndex*, `uint8`, `true`, `unordered`) olsun.
        
         2. [SetValueInBuffer](26_sec-structured-data.md#sec-setvalueinbuffer)(*targetBuffer*, *targetByteIndex*, `uint8`, *value*, `true`, `unordered`) işlemini gerçekleştir.
        
         3. *sourceByteIndex* değerini *sourceByteIndex* + 1 olarak ayarla.
        
         4. *targetByteIndex* değerini *targetByteIndex* + 1 olarak ayarla.
    8. Değilse,

      1. n, 0 olsun.

      2. k, startIndex olsun.

      3. k < endIndex olduğu sürece tekrarla,

         1. *propertyKey*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*k*)) olsun.
        
         2. *kValue*, ! [Get](08_sec-abstract-operations.md#sec-get-o-p)(*obj*, *propertyKey*) olsun.
        
         3. ! [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*resultArray*, ! [ToString](08_sec-abstract-operations.md#sec-tostring)([𝔽](06_sec-notational-conventions.md#𝔽)(*n*)), *kValue*, `true`) işlemini gerçekleştir.
        
         4. *k* değerini *k* + 1 olarak ayarla.
        
         5. *n* değerini *n* + 1 olarak ayarla.
  15. resultArray döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu metodun argümanlarının yorumlanması ve kullanımı, 23.1.3.29 içinde tanımlanan Array.prototype.some ile aynıdır.

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. Eğer IsCallable(callback) false ise, bir TypeError istisnası fırlat.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ! Get(obj, propertyKey) olsun.

    3. testResult, ToBoolean(? Call(callback, thisArg, « kValue, 𝔽(k), obj »)) olsun.

    4. Eğer testResult true ise, true döndür.

    5. k değerini k + 1 olarak ayarla.

  7. false döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

23.2.3.29 %TypedArray%.prototype.sort ( comparator )

Bu, aşağıda açıklananlar hariç, 23.1.3.30 içinde tanımlanan Array.prototype.sort ile aynı gereksinimleri uygulayan ayrı bir metottur. Bu metodun uygulanması, this değerinin sabit bir uzunluğa sahip olan ve tamsayı dizinli (integer-indexed) özellikleri seyrek (sparse) olmayan bir nesne olduğu bilgisiyle optimize edilebilir.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer comparator undefined değilse ve IsCallable(comparator) false ise, bir TypeError istisnası fırlat.

  2. obj, this değeri olsun.

  3. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  4. length, TypedArrayLength(taRecord) olsun.

  5. NOTE: Aşağıdaki kapatma (closure), 23.1.3.30 içinde kullanılan dize karşılaştırması yerine sayısal bir karşılaştırma gerçekleştirir.

  6. sortCompare, comparator değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, (x, y) parametrelerine sahip yeni bir Soyut Kapatma (Abstract Closure) olsun:

    1. ? CompareTypedArrayElements(x, y, comparator) döndür.
  7. sortedList, ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) olsun.

  8. j, 0 olsun.

  9. j < length olduğu sürece tekrarla,

    1. ! Set(obj, ! ToString(𝔽(j)), sortedList[j], true) işlemini gerçekleştir.

    2. j değerini j + 1 olarak ayarla.

  10. obj döndür.

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

Bu metot, eleman türü bu TypedArray'in eleman türü olan ve ArrayBuffer'ı bu TypedArray'in ArrayBuffer'ı olan, start (dahil) ile end (hariç) arasındaki aralıktaki (interval) elemanlara başvuran yeni bir TypedArray döndürür. start veya end değerlerinden biri negatifse, başlangıç yerine dizinin sonundan itibaren bir dizine atıfta bulunur.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? RequireInternalSlot(obj, [[TypedArrayName]]) işlemini gerçekleştir.

  3. Assert: obj, [[ViewedArrayBuffer]] dahili yuvasına sahiptir.

  4. buffer, obj.[[ViewedArrayBuffer]] olsun.

  5. sourceRecord, MakeTypedArrayWithBufferWitnessRecord(obj, seq-cst) olsun.

  6. Eğer IsTypedArrayOutOfBounds(sourceRecord) true ise, o zaman

    1. sourceLength, 0 olsun.
  7. Değilse,

    1. sourceLength, TypedArrayLength(sourceRecord) olsun.
  8. relativeStart, ? ToIntegerOrInfinity(start) olsun.

  9. Eğer relativeStart = -∞ ise, startIndex 0 olsun.

  10. Değilse eğer relativeStart < 0 ise, startIndex, max(sourceLength + relativeStart, 0) olsun.

  11. Değilse, startIndex, min(relativeStart, sourceLength) olsun.

  12. elementSize, TypedArrayElementSize(obj) olsun.

  13. sourceByteOffset, obj.[[ByteOffset]] olsun.

  14. beginByteOffset, sourceByteOffset + (startIndex × elementSize) olsun.

  15. Eğer obj.[[ArrayLength]] değeri auto ise ve end undefined ise, o zaman

    1. argList, « buffer, 𝔽(beginByteOffset) » olsun.
  16. Değilse,

    1. Eğer end undefined ise, relativeEnd, sourceLength olsun; değilse relativeEnd, ? ToIntegerOrInfinity(end) olsun.

    2. Eğer relativeEnd = -∞ ise, endIndex 0 olsun.

    3. Değilse eğer relativeEnd < 0 ise, endIndex, max(sourceLength + relativeEnd, 0) olsun.

    4. Değilse, endIndex, min(relativeEnd, sourceLength) olsun.

    5. newLength, max(endIndex - startIndex, 0) olsun.

    6. argList, « buffer, 𝔽(beginByteOffset), 𝔽(newLength) » olsun.

  17. ? TypedArraySpeciesCreate(obj, argList) döndür.

Bu metot genel (generic) değildir. this değeri, [[TypedArrayName]] dahili yuvasına sahip bir nesne olmalıdır.

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

Bu, "length" özelliğinin bir [[Get]] işlemini gerçekleştirmek yerine TypedArrayLength çağrılması hariç, 23.1.3.32 içinde tanımlanan Array.prototype.toLocaleString ile aynı algoritmayı uygulayan ayrı bir metottur. Algoritmanın uygulanması, alttaki arabellek (buffer) yeniden boyutlandırılamaz olduğunda this değerinin sabit bir uzunluğa sahip olduğu ve tamsayı dizinli (integer-indexed) özelliklerinin seyrek (sparse) olmadığı bilgisiyle optimize edilebilir. Ancak bu tür bir optimizasyon, algoritmanın belirtilen davranışında gözlemlenebilir herhangi bir değişikliğe yol açmamalıdır.

Bu metot genel (generic) değildir. Algoritma değerlendirilmeden önce, this değeri ve seq-cst argüman olarak verilerek ValidateTypedArray çağrılır. Eğer sonuç bir ani sonlanma (abrupt completion) ise, algoritmayı değerlendirmek yerine bu istisna fırlatılır.

23.2.3.32 %TypedArray%.prototype.toReversed ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  3. length, TypedArrayLength(taRecord) olsun.

  4. resultArray, ? TypedArrayCreateSameType(obj, length) olsun.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla,

    1. from, ! ToString(𝔽(length - k - 1)) olsun.

    2. propertyKey, ! ToString(𝔽(k)) olsun.

    3. fromValue, ! Get(obj, from) olsun.

    4. ! Set(resultArray, propertyKey, fromValue, true) işlemini gerçekleştir.

    5. k değerini k + 1 olarak ayarla.

  7. resultArray döndür.

23.2.3.33 %TypedArray%.prototype.toSorted ( comparator )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer comparator undefined değilse ve IsCallable(comparator) false ise, bir TypeError istisnası fırlat.

  2. obj, this değeri olsun.

  3. taRecord, ? ValidateTypedArray(obj, seq-cst) olsun.

  4. length, TypedArrayLength(taRecord) olsun.

  5. resultArray, ? TypedArrayCreateSameType(obj, length) olsun.

  6. NOTE: Aşağıdaki kapatma (closure), 23.1.3.34 içinde kullanılan dize karşılaştırması yerine sayısal bir karşılaştırma gerçekleştirir.

  7. sortCompare, comparator değerini yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, (x, y) parametrelerine sahip yeni bir Soyut Kapatma (Abstract Closure) olsun:

    1. ? CompareTypedArrayElements(x, y, comparator) döndür.
  8. sortedList, ? SortIndexedProperties(obj, length, sortCompare, read-through-holes) olsun.

  9. j, 0 olsun.

  10. j < length olduğu sürece tekrarla,

    1. ! Set(resultArray, ! ToString(𝔽(j)), sortedList[j], true) işlemini gerçekleştir.

    2. j değerini j + 1 olarak ayarla.

  11. resultArray döndür.

23.2.3.34 %TypedArray%.prototype.toString ( )

"toString" özelliğinin ilk değeri, 23.1.3.36 içinde tanımlanan %Array.prototype.toString% değeridir.

23.2.3.35 %TypedArray%.prototype.values ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. ? ValidateTypedArray(obj, seq-cst) işlemini gerçekleştir.

  3. CreateArrayIterator(obj, value) döndür.

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

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. taRecord, ? ValidateTypedArray(obj, seq-cst).

  3. length, TypedArrayLength(taRecord) olsun.

  4. relativeIndex, ? ToIntegerOrInfinity(index) olsun.

  5. Eğer relativeIndex ≥ 0 ise, actualIndex, relativeIndex olsun.

  6. Değilse, actualIndex, length + relativeIndex olsun.

  7. Eğer obj.[[ContentType]] değeri bigint ise, numericValue, ? ToBigInt(value) olsun.

  8. Değilse, numericValue, ? ToNumber(value) olsun.

  9. Eğer IsValidIntegerIndex(obj, 𝔽(actualIndex)) false ise, bir RangeError istisnası fırlat.

  10. resultArray, ? TypedArrayCreateSameType(obj, length) olsun.

  11. k, 0 olsun.

  12. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. Eğer k = actualIndex ise, fromValue, numericValue olsun.

    3. Değilse, fromValue, ! Get(obj, propertyKey) olsun.

    4. ! Set(resultArray, propertyKey, fromValue, true) işlemini gerçekleştir.

    5. k değerini k + 1 olarak ayarla.

  13. resultArray döndür.

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

%Symbol.iterator% özelliğinin ilk değeri, 23.2.3.35 içinde tanımlanan %TypedArray.prototype.values% değeridir.

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

%TypedArray%.prototype[%Symbol.toStringTag%], set erişimci (accessor) fonksiyonu undefined olan bir erişimci özelliktir (accessor property). Get erişimci fonksiyonu çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. Eğer obj bir Nesne değilse (is not an Object), undefined döndür.

  3. Eğer obj, [[TypedArrayName]] dahili yuvasına sahip değilse, undefined döndür.

  4. name, obj.[[TypedArrayName]] olsun.

  5. Assert: name, bir Dizedir (is a String).

  6. name döndür.

Bu özellik { [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

Bu fonksiyonun "name" özelliğinin ilk değeri "get [Symbol.toStringTag]" şeklindedir.

23.2.4 TypedArray Nesneleri İçin Soyut İşlemler

23.2.4.1 TypedArrayCreateFromConstructor ( ctor, argList )

TypedArrayCreateFromConstructor soyut işlemi, ctor (bir yapıcı (constructor)) ve argList (bir ECMAScript dil değerleri Listesi (List)) argümanlarını alır ve bir TypedArray içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Bir yapıcı (constructor) fonksiyonu kullanılarak yeni bir TypedArray oluşturulmasını belirtmek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ta, ? Construct(ctor, argList) olsun.

  2. taRecord, ? ValidateTypedArray(ta, seq-cst) olsun.

  3. Assert: ta, TypedArray Örneklerinin Özellikleri bölümünde belirtilen tüm dahili yuvalara sahiptir.

  4. Eğer argList içindeki eleman sayısı 1 ise ve argList[0], bir Sayı ise (is a Number), o zaman

    1. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

    2. length, TypedArrayLength(taRecord) olsun.

    3. Eğer length < (argList[0]) ise, bir TypeError istisnası fırlat.

  5. ta döndür.

23.2.4.2 TypedArrayCreateSameType ( exemplar, length )

TypedArrayCreateSameType soyut işlemi, exemplar (bir TypedArray) ve length (negatif olmayan bir tamsayı (integer)) argümanlarını alır ve bir TypedArray içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. exemplar nesnesinden türetilen bir yapıcı (constructor) fonksiyonu kullanarak yeni bir TypedArray oluşturulmasını belirtmek için kullanılır. %Symbol.species% kullanımı aracılığıyla özel TypedArray alt sınıfları oluşturabilen TypedArraySpeciesCreate işleminin aksine, bu işlem her zaman yerleşik TypedArray yapıcılarından (constructors) birini kullanır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ctor, Tablo 70 içindeki exemplar.[[TypedArrayName]] yapıcı adıyla ilişkili yerleşik nesne olsun.

  2. result, ? TypedArrayCreateFromConstructor(ctor, « 𝔽(length) ») olsun.

  3. Assert: result, [[TypedArrayName]] ve [[ContentType]] dahili yuvalarına sahiptir.

  4. Assert: result.[[ContentType]] değeri exemplar.[[ContentType]] ile aynıdır.

  5. result döndür.

23.2.4.3 TypedArraySpeciesCreate ( exemplar, argList )

TypedArraySpeciesCreate soyut işlemi, exemplar (bir TypedArray) ve argList (bir ECMAScript dil değerleri Listesi (List)) argümanlarını alır ve bir TypedArray içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. exemplar nesnesinden türetilen bir yapıcı (constructor) fonksiyonu kullanarak yeni bir TypedArray oluşturulmasını belirtmek için kullanılır. %Symbol.species% kullanımıyla Dizi (Array) olmayan nesneler oluşturabilen ArraySpeciesCreate işleminin aksine, bu işlem yapıcı (constructor) fonksiyonunun gerçek bir TypedArray oluşturmasını zorunlu kılar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. defaultCtor, Tablo 70 içindeki exemplar.[[TypedArrayName]] yapıcı adıyla ilişkili yerleşik nesne olsun.

  2. ctor, ? SpeciesConstructor(exemplar, defaultCtor) olsun.

  3. result, ? TypedArrayCreateFromConstructor(ctor, argList) olsun.

  4. Eğer result.[[ContentType]] değeri exemplar.[[ContentType]] ile aynı değilse, bir TypeError istisnası fırlat.

  5. result döndür.

23.2.4.4 ValidateTypedArray ( obj, order )

ValidateTypedArray soyut işlemi, obj (bir ECMAScript dil değeri) ve order (seq-cst veya unordered) argümanlarını alır ve bir TypedArray With Buffer Witness Record içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? RequireInternalSlot(obj, [[TypedArrayName]]) işlemini gerçekleştir.

  2. Assert: obj, [[ViewedArrayBuffer]] dahili yuvasına sahiptir.

  3. taRecord, MakeTypedArrayWithBufferWitnessRecord(obj, order) olsun.

  4. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

  5. taRecord döndür.

23.2.4.5 TypedArrayElementSize ( obj )

TypedArrayElementSize soyut işlemi, obj (bir TypedArray) argümanını alır ve negatif olmayan bir tamsayı (integer) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Tablo 70 içinde obj.[[TypedArrayName]] için belirtilen Eleman Boyutu (Element Size) değerini döndür.

23.2.4.6 TypedArrayElementType ( obj )

TypedArrayElementType soyut işlemi, obj (bir TypedArray) argümanını alır ve bir TypedArray eleman türü (TypedArray element type) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Tablo 70 içinde obj.[[TypedArrayName]] için belirtilen Eleman Türü (Element Type) değerini döndür.

23.2.4.7 CompareTypedArrayElements ( x, y, comparator )

CompareTypedArrayElements soyut işlemi, x (bir Sayı veya BigInt), y (bir Sayı veya BigInt) ve comparator (bir fonksiyon nesnesi (function object) veya undefined) argümanlarını alır ve bir Sayı içeren olağan tamamlanma (normal completion containing) ya da bir ani sonlanma (abrupt completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: x bir Sayıdır (is a Number) ve y bir Sayıdır (is a Number), ya da x bir BigInt'tir (is a BigInt) ve y bir BigInt'tir (is a BigInt).

  2. Eğer comparator undefined değilse, o zaman

    1. result, ? ToNumber(? Call(comparator, undefined, « x, y »)) olsun.

    2. Eğer result NaN ise, +0𝔽 döndür.

    3. result döndür.

  3. Eğer x NaN ve y NaN ise, +0𝔽 döndür.

  4. Eğer x NaN ise, 1𝔽 döndür.

  5. Eğer y NaN ise, -1𝔽 döndür.

  6. Eğer x < y ise, -1𝔽 döndür.

  7. Eğer x > y ise, 1𝔽 döndür.

  8. Eğer x -0𝔽 ve y +0𝔽 ise, -1𝔽 döndür.

  9. Eğer x +0𝔽 ve y -0𝔽 ise, 1𝔽 döndür.

  10. +0𝔽 döndür.

23.2.5 TypedArray Yapıcıları

Her TypedArray yapıcısı (constructor):

  • aksi belirtilmedikçe, Tablo 70 içinde TypedArray yerine yapıcı adı olarak kullanılan isim hariç, aşağıda açıklanan yapıya sahip yerleşik bir nesnedir.

  • davranışları, argümanlarının sayısına ve türlerine göre farklılık gösteren bir fonksiyondur. Bir TypedArray çağrısının gerçek davranışı, ona geçirilen argümanların sayısına ve türüne bağlıdır.

  • fonksiyon olarak çağrılması amaçlanmamıştır ve bu şekilde çağrıldığında bir istisna fırlatır.

  • bir sınıf tanımının extends ifadesinin değeri olarak kullanılabilir. Belirtilen TypedArray davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors) alt sınıf örneğini oluşturmak ve başlatmak için TypedArray yapıcısına (constructor) bir super çağrısı içermelidir.

23.2.5.1 TypedArray ( ...args )

Her TypedArray yapıcısı (constructor) çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, bir TypeError istisnası fırlat.

  2. ctorName, bu TypedArray yapıcısı (constructor) için Tablo 70 içinde belirtilen Yapıcı Adı (Constructor Name) değerinin Dize (String) değeri olsun.

  3. proto, "%*TypedArray*.prototype%" olsun.

  4. numberOfArgs, args içindeki eleman sayısı olsun.

  5. Eğer numberOfArgs = 0 ise, ? AllocateTypedArray(ctorName, NewTarget, proto, 0) döndür.

  6. firstArg, args[0] olsun.

  7. Eğer firstArg bir Nesne ise (is an Object), o zaman

    1. obj, ? AllocateTypedArray(ctorName, NewTarget, proto) olsun.

    2. Eğer firstArg, [[TypedArrayName]] dahili yuvasına sahipse, o zaman

      1. ? InitializeTypedArrayFromTypedArray(obj, firstArg) işlemini gerçekleştir.
    3. Değilse eğer firstArg, [[ArrayBufferData]] dahili yuvasına sahipse, o zaman

      1. Eğer numberOfArgs > 1 ise, byteOffset, args[1] olsun; değilse byteOffset, undefined olsun.

      2. Eğer numberOfArgs > 2 ise, length, args[2] olsun; değilse length, undefined olsun.

      3. ? InitializeTypedArrayFromArrayBuffer(obj, firstArg, byteOffset, length) işlemini gerçekleştir.

    4. Değilse,

      1. Assert: firstArg bir Nesnedir (is an Object) ve firstArg, [[TypedArrayName]] veya [[ArrayBufferData]] dahili yuvalarından hiçbirine sahip değildir.

      2. usingIterator, ? GetMethod(firstArg, %Symbol.iterator%) olsun.

      3. Eğer usingIterator undefined değilse, o zaman

         1. *values*, ? [IteratorToList](08_sec-abstract-operations.md#sec-iteratortolist)(? [GetIteratorFromMethod](08_sec-abstract-operations.md#sec-getiteratorfrommethod)(*firstArg*, *usingIterator*)) olsun.
        
         2. ? [InitializeTypedArrayFromList](#sec-initializetypedarrayfromlist)(*obj*, *values*) işlemini gerçekleştir.
      4. Değilse,

         1. [NOTE](06_sec-notational-conventions.md#note-step): *firstArg* [yinelenebilir bir nesne (iterable object)](28_sec-control-abstraction-objects.md#sec-iterable-interface) değildir, bu nedenle zaten [dizi benzeri bir nesne (array-like object)](08_sec-abstract-operations.md#sec-lengthofarraylike) olduğunu varsay.
        
         2. ? [InitializeTypedArrayFromArrayLike](#sec-initializetypedarrayfromarraylike)(*obj*, *firstArg*) işlemini gerçekleştir.
    5. obj döndür.

  8. Assert: firstArg bir Nesne değildir (is not an Object).

  9. elementLength, ? ToIndex(firstArg) olsun.

  10. ? AllocateTypedArray(ctorName, NewTarget, proto, elementLength) döndür.

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

AllocateTypedArray soyut işlemi, ctorName (bir String, Tablo 70 içindeki bir TypedArray yapıcı (constructor) adı), newTarget (bir yapıcı (constructor)) ve defaultProto (bir String) argümanlarını ve isteğe bağlı length (negatif olmayan bir tamsayı (integer)) argümanını alır ve bir TypedArray içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Bir TypedArray yapıcısının (constructor) bir örneğini doğrulamak ve oluşturmak için kullanılır. Eğer length argümanı geçirilirse, bu uzunlukta bir ArrayBuffer da tahsis edilir (allocated) ve yeni TypedArray örneğiyle ilişkilendirilir. AllocateTypedArray, TypedArray tarafından kullanılan ortak semantikleri sağlar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. proto, ? GetPrototypeFromConstructor(newTarget, defaultProto) olsun.

  2. obj, TypedArrayCreate(proto) olsun.

  3. Assert: obj.[[ViewedArrayBuffer]] değeri undefined'dır.

  4. obj.[[TypedArrayName]] değerini ctorName olarak ayarla.

  5. Eğer ctorName, "BigInt64Array" veya "BigUint64Array" ise, obj.[[ContentType]] değerini bigint olarak ayarla.

  6. Değilse, obj.[[ContentType]] değerini number olarak ayarla.

  7. Eğer length mevcut değilse, o zaman

    1. obj.[[ByteLength]] değerini 0 olarak ayarla.

    2. obj.[[ByteOffset]] değerini 0 olarak ayarla.

    3. obj.[[ArrayLength]] değerini 0 olarak ayarla.

  8. Değilse,

    1. ? AllocateTypedArrayBuffer(obj, length) işlemini gerçekleştir.
  9. obj döndür.

23.2.5.1.2 InitializeTypedArrayFromTypedArray ( obj, sourceArray )

InitializeTypedArrayFromTypedArray soyut işlemi, obj (bir TypedArray) ve sourceArray (bir TypedArray) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. sourceData, sourceArray.[[ViewedArrayBuffer]] olsun.

  2. elementType, TypedArrayElementType(obj) olsun.

  3. elementSize, TypedArrayElementSize(obj) olsun.

  4. sourceType, TypedArrayElementType(sourceArray) olsun.

  5. sourceElementSize, TypedArrayElementSize(sourceArray) olsun.

  6. sourceByteOffset, sourceArray.[[ByteOffset]] olsun.

  7. sourceRecord, MakeTypedArrayWithBufferWitnessRecord(sourceArray, seq-cst) olsun.

  8. Eğer IsTypedArrayOutOfBounds(sourceRecord) true ise, bir TypeError istisnası fırlat.

  9. elementLength, TypedArrayLength(sourceRecord) olsun.

  10. byteLength, elementSize × elementLength olsun.

  11. Eğer elementType değeri sourceType ile aynıysa, o zaman

    1. data, ? CloneArrayBuffer(sourceData, sourceByteOffset, byteLength) olsun.
  12. Değilse,

    1. data, ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) olsun.

    2. Eğer sourceArray.[[ContentType]] değeri obj.[[ContentType]] değeriyle aynı değilse, bir TypeError istisnası fırlat.

    3. sourceByteIndex, sourceByteOffset olsun.

    4. targetByteIndex, 0 olsun.

    5. count, elementLength olsun.

    6. count > 0 olduğu sürece tekrarla,

      1. value, GetValueFromBuffer(sourceData, sourceByteIndex, sourceType, true, unordered) olsun.

      2. SetValueInBuffer(data, targetByteIndex, elementType, value, true, unordered) işlemini gerçekleştir.

      3. sourceByteIndex değerini sourceByteIndex + sourceElementSize olarak ayarla.

      4. targetByteIndex değerini targetByteIndex + elementSize olarak ayarla.

      5. count değerini count - 1 olarak ayarla.

  13. obj.[[ViewedArrayBuffer]] değerini data olarak ayarla.

  14. obj.[[ByteLength]] değerini byteLength olarak ayarla.

  15. obj.[[ByteOffset]] değerini 0 olarak ayarla.

  16. obj.[[ArrayLength]] değerini elementLength olarak ayarla.

  17. unused döndür.

23.2.5.1.3 InitializeTypedArrayFromArrayBuffer ( obj, buffer, byteOffset, length )

InitializeTypedArrayFromArrayBuffer soyut işlemi, obj (bir TypedArray), buffer (bir ArrayBuffer veya SharedArrayBuffer), byteOffset (bir ECMAScript dil değeri) ve length (bir ECMAScript dil değeri) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. elementSize, TypedArrayElementSize(obj) olsun.

  2. offset, ? ToIndex(byteOffset).

  3. Eğer offset modulo elementSize ≠ 0 ise, bir RangeError istisnası fırlat.

  4. bufferIsFixedLength, IsFixedLengthArrayBuffer(buffer) olsun.

  5. Eğer length undefined değilse, o zaman

    1. newLength, ? ToIndex(length) olsun.
  6. Eğer IsDetachedBuffer(buffer) true ise, bir TypeError istisnası fırlat.

  7. bufferByteLength, ArrayBufferByteLength(buffer, seq-cst) olsun.

  8. Eğer length undefined ise ve bufferIsFixedLength false ise, o zaman

    1. Eğer offset > bufferByteLength ise, bir RangeError istisnası fırlat.

    2. obj.[[ByteLength]] değerini auto olarak ayarla.

    3. obj.[[ArrayLength]] değerini auto olarak ayarla.

  9. Değilse,

    1. Eğer length undefined ise, o zaman

      1. Eğer bufferByteLength modulo elementSize ≠ 0 ise, bir RangeError istisnası fırlat.

      2. newByteLength, bufferByteLength - offset olsun.

      3. Eğer newByteLength < 0 ise, bir RangeError istisnası fırlat.

    2. Değilse,

      1. newByteLength, newLength × elementSize olsun.

      2. Eğer offset + newByteLength > bufferByteLength ise, bir RangeError istisnası fırlat.

    3. obj.[[ByteLength]] değerini newByteLength olarak ayarla.

    4. obj.[[ArrayLength]] değerini newByteLength / elementSize olarak ayarla.

  10. obj.[[ViewedArrayBuffer]] değerini buffer olarak ayarla.

  11. obj.[[ByteOffset]] değerini offset olarak ayarla.

  12. unused döndür.

23.2.5.1.4 InitializeTypedArrayFromList ( obj, values )

InitializeTypedArrayFromList soyut işlemi, obj (bir TypedArray) ve values (bir ECMAScript dil değerleri Listesi (List)) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, values içindeki eleman sayısı olsun.

  2. ? AllocateTypedArrayBuffer(obj, length) işlemini gerçekleştir.

  3. k, 0 olsun.

  4. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, values listesinin ilk elemanı olsun.

    3. values listesinin ilk elemanını kaldır.

    4. ? Set(obj, propertyKey, kValue, true) işlemini gerçekleştir.

    5. k değerini k + 1 olarak ayarla.

  5. Assert: values artık boş bir Liste (List)'dir.

  6. unused döndür.

23.2.5.1.5 InitializeTypedArrayFromArrayLike ( obj, arrayLike )

InitializeTypedArrayFromArrayLike soyut işlemi, obj (bir TypedArray) ve arrayLike (bir Nesne (Object) fakat bir TypedArray veya ArrayBuffer değil) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, ? LengthOfArrayLike(arrayLike) olsun.

  2. ? AllocateTypedArrayBuffer(obj, length) işlemini gerçekleştir.

  3. k, 0 olsun.

  4. k < length olduğu sürece tekrarla,

    1. propertyKey, ! ToString(𝔽(k)) olsun.

    2. kValue, ? Get(arrayLike, propertyKey) olsun.

    3. ? Set(obj, propertyKey, kValue, true) işlemini gerçekleştir.

    4. k değerini k + 1 olarak ayarla.

  5. unused döndür.

23.2.5.1.6 AllocateTypedArrayBuffer ( obj, length )

AllocateTypedArrayBuffer soyut işlemi, obj (bir TypedArray) ve length (negatif olmayan bir tamsayı (integer)) argümanlarını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. obj ile bir ArrayBuffer tahsis eder (allocates) ve ilişkilendirir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: obj.[[ViewedArrayBuffer]] değeri undefined'dır.

  2. elementSize, TypedArrayElementSize(obj) olsun.

  3. byteLength, elementSize × length olsun.

  4. data, ? AllocateArrayBuffer(%ArrayBuffer%, byteLength) olsun.

  5. obj.[[ViewedArrayBuffer]] değerini data olarak ayarla.

  6. obj.[[ByteLength]] değerini byteLength olarak ayarla.

  7. obj.[[ByteOffset]] değerini 0 olarak ayarla.

  8. obj.[[ArrayLength]] değerini length olarak ayarla.

  9. unused döndür.

23.2.6 TypedArray Yapıcılarının Özellikleri

Her TypedArray yapıcısı (constructor):

  • değeri %TypedArray% olan bir [[Prototype]] dahili yuvasına sahiptir.

  • değeri 3𝔽 olan bir "length" özelliğine sahiptir.

  • değeri, Tablo 70 içinde kendisi için belirtilen yapıcı (constructor) adının Dize (String) değeri olan bir "name" özelliğine sahiptir.

  • aşağıdaki özelliklere sahiptir:

23.2.6.1 TypedArray.BYTES_PER_ELEMENT

TypedArray.BYTES_PER_ELEMENT değeri, Tablo 70 içinde TypedArray için belirtilen Eleman Boyutu (Element Size) değeridir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

23.2.6.2 TypedArray.prototype

TypedArray.prototype özelliğinin ilk değeri, karşılık gelen TypedArray prototip yerleşik nesnesidir (23.2.7).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

23.2.7 TypedArray Prototip Nesnelerinin Özellikleri

Her TypedArray prototip nesnesi:

23.2.7.1 TypedArray.prototype.BYTES_PER_ELEMENT

TypedArray.prototype.BYTES_PER_ELEMENT değeri, Tablo 70 içinde TypedArray için belirtilen Eleman Boyutu (Element Size) değeridir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

23.2.7.2 TypedArray.prototype.constructor

Verilen bir TypedArray yapıcısının (constructor) prototipinin "constructor" özelliğinin ilk değeri yapıcının kendisidir.

23.2.8 TypedArray Örneklerinin Özellikleri

TypedArray örnekleri TypedArray nesneleridir (TypedArrays). Her TypedArray örneği, karşılık gelen TypedArray prototip nesnesinden özellikleri miras alır. Her TypedArray örneği aşağıdaki dahili yuvalara sahiptir: [[ViewedArrayBuffer]], [[TypedArrayName]], [[ContentType]], [[ByteLength]], [[ByteOffset]] ve [[ArrayLength]].

23.3 Uint8Array Nesneleri

Bir Uint8Array, yukarıda açıklandığı gibi belirli bir TypedArray türüdür. Ek olarak, Uint8Array yapıcısı (constructor) (23.3.1) ve Uint8Array prototip nesnesi (23.3.2) üzerinde ek metotlar bulunmaktadır.

23.3.1 Uint8Array Yapıcısının Ek Özellikleri

23.3.1.1 Uint8Array.fromBase64 ( string [ , options ] )

  1. Eğer string bir Dize değilse (is not a String), bir TypeError istisnası fırlat.

  2. opts, ? GetOptionsObject(options) olsun.

  3. alphabet, ? Get(opts, "alphabet") olsun.

  4. Eğer alphabet undefined ise, alphabet değerini "base64" olarak ayarla.

  5. Eğer alphabet ne "base64" ne de "base64url" ise, bir TypeError istisnası fırlat.

  6. lastChunkHandling, ? Get(opts, "lastChunkHandling") olsun.

  7. Eğer lastChunkHandling undefined ise, lastChunkHandling değerini "loose" olarak ayarla.

  8. Eğer lastChunkHandling; "loose", "strict" veya "stop-before-partial" değerlerinden biri değilse, bir TypeError istisnası fırlat.

  9. result, FromBase64(string, alphabet, lastChunkHandling) olsun.

  10. Eğer result.[[Error]] değeri none değilse, o zaman

    1. result.[[Error]] istisnasını fırlat.
  11. resultLength, result.[[Bytes]] içindeki eleman sayısı olsun.

  12. ta, ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) olsun.

  13. Assert: ta.[[ViewedArrayBuffer]].[[ArrayBufferByteLength]] değeri result.[[Bytes]] içindeki eleman sayısıdır.

  14. ta.[[ViewedArrayBuffer]].[[ArrayBufferData]] içindeki her bir dizindeki değeri, result.[[Bytes]] içindeki karşılık gelen dizindeki değer olarak ayarla.

  15. ta döndür.

23.3.1.2 Uint8Array.fromHex ( string )

  1. Eğer string bir Dize değilse (is not a String), bir TypeError istisnası fırlat.

  2. result, FromHex(string) olsun.

  3. Eğer result.[[Error]] değeri none değilse, o zaman

    1. result.[[Error]] istisnasını fırlat.
  4. resultLength, result.[[Bytes]] içindeki eleman sayısı olsun.

  5. ta, ? AllocateTypedArray("Uint8Array", %Uint8Array%, "%Uint8Array.prototype%", resultLength) olsun.

  6. Assert: ta.[[ViewedArrayBuffer]].[[ArrayBufferByteLength]] değeri result.[[Bytes]] içindeki eleman sayısıdır.

  7. ta.[[ViewedArrayBuffer]].[[ArrayBufferData]] içindeki her bir dizindeki değeri, result.[[Bytes]] içindeki karşılık gelen dizindeki değer olarak ayarla.

  8. ta döndür.

23.3.2 Uint8Array Prototip Nesnesinin Ek Özellikleri

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

  1. into, this değeri olsun.

  2. ? ValidateUint8Array(into) işlemini gerçekleştir.

  3. Eğer string bir Dize değilse (is not a String), bir TypeError istisnası fırlat.

  4. opts, ? GetOptionsObject(options) olsun.

  5. alphabet, ? Get(opts, "alphabet") olsun.

  6. Eğer alphabet undefined ise, alphabet değerini "base64" olarak ayarla.

  7. Eğer alphabet ne "base64" ne de "base64url" ise, bir TypeError istisnası fırlat.

  8. lastChunkHandling, ? Get(opts, "lastChunkHandling") olsun.

  9. Eğer lastChunkHandling undefined ise, lastChunkHandling değerini "loose" olarak ayarla.

  10. Eğer lastChunkHandling; "loose", "strict" veya "stop-before-partial" değerlerinden biri değilse, bir TypeError istisnası fırlat.

  11. taRecord, MakeTypedArrayWithBufferWitnessRecord(into, seq-cst) olsun.

  12. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

  13. byteLength, TypedArrayLength(taRecord) olsun.

  14. result, FromBase64(string, alphabet, lastChunkHandling, byteLength) olsun.

  15. bytes, result.[[Bytes]] olsun.

  16. written, bytes içindeki eleman sayısı olsun.

  17. NOTE: FromBase64 herhangi bir kullanıcı kodunu çağırmaz, bu nedenle into nesnesini destekleyen ArrayBuffer ayrılmış (detached) veya küçültülmüş olamaz.

  18. Assert: writtenbyteLength.

  19. SetUint8ArrayBytes(into, bytes) işlemini gerçekleştir.

  20. Eğer result.[[Error]] değeri none değilse, o zaman

    1. result.[[Error]] istisnasını fırlat.
  21. resultObj, OrdinaryObjectCreate(%Object.prototype%) olsun.

  22. ! CreateDataPropertyOrThrow(resultObj, "read", 𝔽(result.[[Read]])) işlemini gerçekleştir.

  23. ! CreateDataPropertyOrThrow(resultObj, "written", 𝔽(written)) işlemini gerçekleştir.

  24. resultObj döndür.

23.3.2.2 Uint8Array.prototype.setFromHex ( string )

  1. into, this değeri olsun.

  2. ? ValidateUint8Array(into) işlemini gerçekleştir.

  3. Eğer string bir Dize değilse (is not a String), bir TypeError istisnası fırlat.

  4. taRecord, MakeTypedArrayWithBufferWitnessRecord(into, seq-cst) olsun.

  5. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

  6. byteLength, TypedArrayLength(taRecord) olsun.

  7. result, FromHex(string, byteLength) olsun.

  8. bytes, result.[[Bytes]] olsun.

  9. written, bytes içindeki eleman sayısı olsun.

  10. NOTE: FromHex herhangi bir kullanıcı kodunu çağırmaz, bu nedenle into nesnesini destekleyen ArrayBuffer ayrılmış (detached) veya küçültülmüş olamaz.

  11. Assert: writtenbyteLength.

  12. SetUint8ArrayBytes(into, bytes) işlemini gerçekleştir.

  13. Eğer result.[[Error]] değeri none değilse, o zaman

    1. result.[[Error]] istisnasını fırlat.
  14. resultObj, OrdinaryObjectCreate(%Object.prototype%) olsun.

  15. ! CreateDataPropertyOrThrow(resultObj, "read", 𝔽(result.[[Read]])) işlemini gerçekleştir.

  16. ! CreateDataPropertyOrThrow(resultObj, "written", 𝔽(written)) işlemini gerçekleştir.

  17. resultObj döndür.

23.3.2.3 Uint8Array.prototype.toBase64 ( [ options ] )

  1. obj, this değeri olsun.

  2. ? ValidateUint8Array(obj) işlemini gerçekleştir.

  3. opts, ? GetOptionsObject(options) olsun.

  4. alphabet, ? Get(opts, "alphabet") olsun.

  5. Eğer alphabet undefined ise, alphabet değerini "base64" olarak ayarla.

  6. Eğer alphabet ne "base64" ne de "base64url" ise, bir TypeError istisnası fırlat.

  7. omitPadding, ToBoolean(? Get(opts, "omitPadding")) olsun.

  8. toEncode, ? GetUint8ArrayBytes(obj) olsun.

  9. Eğer alphabet "base64" ise, o zaman

    1. outAscii, toEncode verisinin RFC 4648'in 4. bölümünde belirtilen base64 kodlamasına göre kodlanmasıyla elde edilen kod noktaları dizisi olsun. Dolgu (padding), yalnızca ve ancak omitPadding false ise dahil edilir.
  10. Değilse,

    1. Assert: alphabet, "base64url" değeridir.

    2. outAscii, toEncode verisinin RFC 4648'in 5. bölümünde belirtilen base64url kodlamasına göre kodlanmasıyla elde edilen kod noktaları dizisi olsun. Dolgu (padding), yalnızca ve ancak omitPadding false ise dahil edilir.

  11. CodePointsToString(outAscii) döndür.

23.3.2.4 Uint8Array.prototype.toHex ( )

  1. obj, this değeri olsun.

  2. ? ValidateUint8Array(obj) işlemini gerçekleştir.

  3. toEncode, ? GetUint8ArrayBytes(obj) olsun.

  4. out, boş Dize (String) olsun.

  5. toEncode içindeki her byte baytı için, sırayla şunu yap:

    1. hex, Number::toString(𝔽(byte), 16) olsun.

    2. hex değerini StringPad(hex, 2, "0", start) olarak ayarla.

    3. out değerini, out ve hex'in dize birleşimi (string-concatenation) olarak ayarla.

  6. out döndür.

23.3.3 Uint8Array Nesneleri İçin Soyut İşlemler

23.3.3.1 ValidateUint8Array ( ta )

ValidateUint8Array soyut işlemi, ta (bir ECMAScript dil değeri) argümanını alır ve unused içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? RequireInternalSlot(ta, [[TypedArrayName]]) işlemini gerçekleştir.

  2. Eğer ta.[[TypedArrayName]] "Uint8Array" değilse, bir TypeError istisnası fırlat.

  3. unused döndür.

23.3.3.2 GetUint8ArrayBytes ( ta )

GetUint8ArrayBytes soyut işlemi, ta (bir Uint8Array) argümanını alır ve bayt değerleri Listesi (List) içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. buffer, ta.[[ViewedArrayBuffer]] olsun.

  2. taRecord, MakeTypedArrayWithBufferWitnessRecord(ta, seq-cst) olsun.

  3. Eğer IsTypedArrayOutOfBounds(taRecord) true ise, bir TypeError istisnası fırlat.

  4. length, TypedArrayLength(taRecord) olsun.

  5. byteOffset, ta.[[ByteOffset]] olsun.

  6. bytes, yeni boş bir Liste (List) olsun.

  7. index, 0 olsun.

  8. index < length olduğu sürece tekrarla,

    1. byteIndex, byteOffset + index olsun.

    2. byte, (GetValueFromBuffer(buffer, byteIndex, uint8, true, unordered)) olsun.

    3. byte değerini bytes listesine ekle.

    4. index değerini index + 1 olarak ayarla.

  9. bytes döndür.

23.3.3.3 SetUint8ArrayBytes ( into, bytes )

SetUint8ArrayBytes soyut işlemi, into (bir Uint8Array) ve bytes (bayt değerleri Listesi (List)) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. offset, into.[[ByteOffset]] olsun.

  2. length, bytes içindeki eleman sayısı olsun.

  3. index, 0 olsun.

  4. index < length olduğu sürece tekrarla,

    1. byte, bytes[index] olsun.

    2. byteIndexInBuffer, index + offset olsun.

    3. SetValueInBuffer(into.[[ViewedArrayBuffer]], byteIndexInBuffer, uint8, 𝔽(byte), true, unordered) işlemini gerçekleştir.

    4. index değerini index + 1 olarak ayarla.

  5. unused döndür.

23.3.3.4 SkipAsciiWhitespace ( string, index )

SkipAsciiWhitespace soyut işlemi, string (bir String) ve index (negatif olmayan bir tamsayı (integer)) argümanlarını alır ve negatif olmayan bir tamsayı (integer) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, string uzunluğu olsun.

  2. index < length olduğu sürece tekrarla,

    1. char, string içinde index dizinindeki kod birimi (code unit) olsun.

    2. Eğer char; 0x0009 (TAB), 0x000A (LF), 0x000C (FF), 0x000D (CR) veya 0x0020 (SPACE) değerlerinden biri değilse, o zaman

      1. index döndür.
    3. index değerini index + 1 olarak ayarla.

  3. index döndür.

23.3.3.5 DecodeFinalBase64Chunk ( chunk, throwOnExtraBits )

DecodeFinalBase64Chunk soyut işlemi, chunk (uzunluğu 2 veya 3 olan bir String) ve throwOnExtraBits (bir Boolean) argümanlarını alır ve bayt değerleri Listesi (List) içeren bir olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. chunkLength, chunk uzunluğu olsun.

  2. Eğer chunkLength = 2 ise, o zaman

    1. chunk değerini, chunk ve "AA"'nın dize birleşimi (string-concatenation) olarak ayarla.
  3. Değilse,

    1. Assert: chunkLength, 3'tür.

    2. chunk değerini, chunk ve "A"'nın dize birleşimi (string-concatenation) olarak ayarla.

  4. bytes, DecodeFullLengthBase64Chunk(chunk) olsun.

  5. Eğer chunkLength = 2 ise, o zaman

    1. Eğer throwOnExtraBits true ise ve bytes[1] ≠ 0 ise, bir SyntaxError istisnası fırlat.

    2. « bytes[0] » döndür.

  6. Eğer throwOnExtraBits true ise ve bytes[2] ≠ 0 ise, bir SyntaxError istisnası fırlat.

  7. « bytes[0], bytes[1] » döndür.

23.3.3.6 DecodeFullLengthBase64Chunk ( chunk )

DecodeFullLengthBase64Chunk soyut işlemi, chunk (uzunluğu 4 olan bir String) argümanını alır ve uzunluğu 3 olan bayt değerleri Listesi (List) döndürür.

Standart base64 alfabesi "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" şeklindedir, yani elemanları Unicode Basic Latin bloğundaki her harf ve sayıya karşılık gelen kod birimleri olan ve bunlara ek olarak "+" ve "/" karakterlerini içeren String'dir.

  1. byteSequence, chunk kodunun base64 olarak çözülmesiyle (decoding) elde edilen benzersiz 3 baytlık dizi olsun (yani, byteSequence verisine RFC 4648'in 4. bölümünde belirtilen base64 kodlamasının uygulanması chunk sonucunu üretecek şekildeki dizi).

  2. Elemanları sırasıyla byteSequence elemanları olan bir Liste (List) döndür.

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

FromBase64 soyut işlemi, string (bir String), alphabet ("base64" veya "base64url") ve lastChunkHandling ("loose", "strict" veya "stop-before-partial") argümanlarını ve isteğe bağlı maxLength (negatif olmayan bir tamsayı (integer)) argümanını alır ve [[Read]] (bir tamsayı (integer)), [[Bytes]] (bayt değerleri Listesi (List)) ve [[Error]] (bir SyntaxError nesnesi veya none) alanlarına sahip bir Kayıt (Record) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer maxLength mevcut değilse, o zaman

    1. maxLength değerini 253 - 1 olarak ayarla.

    2. NOTE: Girdi bir Dize olduğundan (is a String), Dizelerin (Strings) uzunluğu 253 - 1 karakter ile sınırlıdır ve çıktı girdi karakterlerinden daha fazla bayt gerektirmediğinden, bu sınıra asla ulaşılamaz. Ancak maxLength için sonlu (finite) bir değer kullanmak editöryal açıdan kolaylık sağlar.

  2. NOTE: Aşağıdaki algoritmada doğrulama ve kod çözme sırası gözlemlenebilir değildir. Uygulamaların bunları en verimli olan herhangi bir sırada gerçekleştirmesi, muhtemelen doğrulama ile kod çözme işlemlerini iç içe yürütmesi teşvik edilir.

  3. Eğer maxLength = 0 ise, o zaman

    1. { [[Read]]: 0, [[Bytes]]: « », [[Error]]: none } Kaydını (Record) döndür.
  4. read, 0 olsun.

  5. bytes, yeni boş bir Liste (List) olsun.

  6. chunk, boş Dize (String) olsun.

  7. chunkLength, 0 olsun.

  8. index, 0 olsun.

  9. length, string uzunluğu olsun.

  10. Tekrarla,

    1. Assert: bytes listesindeki eleman sayısı 3 ile kalansız bölünebilir.

    2. index değerini SkipAsciiWhitespace(string, index) olarak ayarla.

    3. Eğer index = length ise, o zaman

      1. Eğer chunkLength > 0 ise, o zaman

         1. Eğer *lastChunkHandling* `"stop-before-partial"` ise, o zaman
        
                   1. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: `none` } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
        
         2. Eğer *lastChunkHandling* `"strict"` ise, o zaman
        
                   1. *error*, yeni oluşturulmuş bir `SyntaxError` nesnesi olsun.
        
                   2. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: *error* } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
        
         3. [Assert](06_sec-notational-conventions.md#assert): *lastChunkHandling*, `"loose"` değeridir.
        
         4. Eğer *chunkLength* = 1 ise, o zaman
        
                   1. *error*, yeni oluşturulmuş bir `SyntaxError` nesnesi olsun.
        
                   2. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: *error* } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
        
         5. *bytes* değerini, *bytes* ve ! [DecodeFinalBase64Chunk](#sec-decodefinalbase64chunk)(*chunk*, `false`) listelerinin [liste birleşimi (list-concatenation)](07_sec-ecmascript-data-types-and-values.md#list-concatenation) olarak ayarla.
      2. { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none } Kaydını (Record) döndür.

    4. char, string içindeki index dizininden index + 1 dizinine kadar olan alt dize (substring) olsun.

    5. index değerini index + 1 olarak ayarla.

    6. Eğer char "=" ise, o zaman

      1. Eğer chunkLength < 2 ise, o zaman

         1. *error*, yeni oluşturulmuş bir `SyntaxError` nesnesi olsun.
        
         2. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: *error* } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
      2. index değerini SkipAsciiWhitespace(string, index) olarak ayarla.

      3. Eğer chunkLength = 2 ise, o zaman

         1. Eğer *index* = *length* ise, o zaman
        
                   1. Eğer *lastChunkHandling* `"stop-before-partial"` ise, o zaman
        
                             1. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: `none` } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
        
                   2. *error*, yeni oluşturulmuş bir `SyntaxError` nesnesi olsun.
        
                   3. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: *error* } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
        
         2. *char*, *string* içindeki *index* dizininden *index* + 1 dizinine kadar olan [alt dize (substring)](07_sec-ecmascript-data-types-and-values.md#substring) olsun.
        
         3. Eğer *char* `"="` ise, o zaman
        
                   1. *index* değerini [SkipAsciiWhitespace](#sec-skipasciiwhitespace)(*string*, *index + 1*) olarak ayarla.
      4. Eğer index < length ise, o zaman

         1. *error*, yeni oluşturulmuş bir `SyntaxError` nesnesi olsun.
        
         2. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: *error* } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
      5. Eğer lastChunkHandling "strict" ise, throwOnExtraBits true olsun; değilse throwOnExtraBits false olsun.

      6. decodeResult, Completion(DecodeFinalBase64Chunk(chunk, throwOnExtraBits)) olsun.

      7. Eğer decodeResult bir ani sonlanma (abrupt completion) ise, o zaman

         1. *error*, *decodeResult*.*[[Value]]* olsun.
        
         2. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: *error* } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
      8. bytes değerini, bytes ve ! decodeResult listelerinin liste birleşimi (list-concatenation) olarak ayarla.

      9. { [[Read]]: length, [[Bytes]]: bytes, [[Error]]: none } Kaydını (Record) döndür.

    7. Eğer alphabet "base64url" ise, o zaman

      1. Eğer char; "+" veya "/" değerlerinden biriyse, o zaman

         1. *error*, yeni oluşturulmuş bir `SyntaxError` nesnesi olsun.
        
         2. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: *error* } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.
      2. Değilse eğer char "-" ise, o zaman

         1. *char* değerini `"+"` olarak ayarla.
      3. Değilse eğer char "_" ise, o zaman

         1. *char* değerini `"/"` olarak ayarla.
    8. Eğer char'ın yegane kod birimi standart base64 alfabesinin (standard base64 alphabet) bir elemanı değilse, o zaman

      1. error, yeni oluşturulmuş bir SyntaxError nesnesi olsun.

      2. { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } Kaydını (Record) döndür.

    9. remaining, maxLength - bytes listesindeki eleman sayısı olsun.

    10. Eğer remaining = 1 ve chunkLength = 2 ise, veya remaining = 2 ve chunkLength = 3 ise, o zaman

      1. { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } Kaydını (Record) döndür.
    11. chunk değerini, chunk ve char'ın dize birleşimi (string-concatenation) olarak ayarla.

    12. chunkLength, chunk uzunluğu olsun.

    13. Eğer chunkLength = 4 ise, o zaman

      1. bytes değerini, bytes ve DecodeFullLengthBase64Chunk(chunk) listelerinin liste birleşimi (list-concatenation) olarak ayarla.

      2. chunk değerini boş Dize (String) olarak ayarla.

      3. chunkLength değerini 0 olarak ayarla.

      4. read, index olsun.

      5. Eğer bytes listesindeki eleman sayısı = maxLength ise, o zaman

         1. { *[[Read]]*: *read*, *[[Bytes]]*: *bytes*, *[[Error]]*: `none` } [Kaydını (Record)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) döndür.

23.3.3.8 FromHex ( string [ , maxLength ] )

FromHex soyut işlemi, string (bir String) argümanını ve isteğe bağlı maxLength (negatif olmayan bir tamsayı (integer)) argümanını alır ve [[Read]] (bir tamsayı (integer)), [[Bytes]] (bayt değerleri Listesi (List)) ve [[Error]] (bir SyntaxError nesnesi veya none) alanlarına sahip bir Kayıt (Record) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer maxLength mevcut değilse, maxLength değerini 253 - 1 olarak ayarla.

  2. length, string uzunluğu olsun.

  3. bytes, yeni boş bir Liste (List) olsun.

  4. read, 0 olsun.

  5. Eğer length modulo 2 ≠ 0 ise, o zaman

    1. error, yeni oluşturulmuş bir SyntaxError nesnesi olsun.

    2. { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } Kaydını (Record) döndür.

  6. read < length olduğu ve bytes listesindeki eleman sayısı < maxLength olduğu sürece tekrarla,

    1. hexits, string içindeki read dizininden read + 2 dizinine kadar olan alt dize (substring) olsun.

    2. Eğer hexits, "0123456789abcdefABCDEF" içinde olmayan herhangi bir kod birimini içeriyorsa, o zaman

      1. error, yeni oluşturulmuş bir SyntaxError nesnesi olsun.

      2. { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: error } Kaydını (Record) döndür.

    3. read değerini read + 2 olarak ayarla.

    4. byte, hexits tarafından 16 tabanındaki gösterimle temsil edilen tamsayı (integer) değeri olsun; bu gösterimde 10 ile 15 değerlerindeki basamaklar için sırasıyla A ile F ve a ile f harfleri kullanılır.

    5. byte değerini bytes listesine ekle.

  7. { [[Read]]: read, [[Bytes]]: bytes, [[Error]]: none } Kaydını (Record) döndür.