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

Soyut İşlemler

Bu işlemler ECMAScript dilinin bir parçası değildir; burada yalnızca ECMAScript dilinin anlambiliminin belirtimine yardımcı olmak amacıyla tanımlanmıştır. Daha özel diğer soyut işlemler bu belirtimin genelinde tanımlanmıştır.

7.1 Tür Dönüşümü

ECMAScript dili gerektiğinde örtük olarak otomatik tür dönüşümü gerçekleştirir. Belirli yapıların anlambilimini netleştirmek için bir dizi dönüşüm soyut işlemi tanımlamak yararlıdır. Dönüşüm soyut işlemleri çok biçimlidir; herhangi bir ECMAScript dil türünde bir değer kabul edebilirler. Ancak bu işlemlerle başka hiçbir belirtim türü kullanılmaz.

BigInt türünün ECMAScript dilinde örtük dönüşümleri yoktur; programcılar diğer türlerden değer dönüştürmek için BigInt'i açıkça çağırmalıdır.

7.1.1 ToPrimitive ( input [ , preferredType ] )

Soyut işlem ToPrimitive, input (bir ECMAScript dil değeri) argümanını ve isteğe bağlı preferredType (string veya number) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. input argümanını Object türü olmayan bir değere dönüştürür. Bir nesne birden fazla ilkel türe dönüşebiliyorsa, bu türü tercih etmek için isteğe bağlı ipucu preferredType'ı kullanabilir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer input bir Object ise, o zaman

    1. exoticToPrimitive = ? GetMethod(input, %Symbol.toPrimitive%) olsun.

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

      1. Eğer preferredType mevcut değilse,

         1. *hint* = `"default"` olsun.
      2. Değilse, eğer preferredType string ise,

         1. *hint* = `"string"` olsun.
      3. Değilse,

         1. [Assert](06_sec-notational-conventions.md#assert): *preferredType* `number`'dır.
        
         2. *hint* = `"number"` olsun.
      4. result = ? Call(exoticToPrimitive, input, « hint ») olsun.

      5. Eğer result bir Object değilse, result döndür.

      6. Bir TypeError kuraldışı durumu fırlat.

    3. Eğer preferredType mevcut değilse, preferredTypenumber olarak ayarla.

    4. ? OrdinaryToPrimitive(input, preferredType) döndür.

  2. input döndür.

7.1.1.1 OrdinaryToPrimitive ( obj, hint )

Soyut işlem OrdinaryToPrimitive, obj (bir Object) ve hint (string veya number) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer hint string ise,

    1. methodNames = « "toString", "valueOf" » olsun.
  2. Değilse,

    1. methodNames = « "valueOf", "toString" » olsun.
  3. methodNames'ın her bir name öğesi için,

    1. method = ? Get(obj, name) olsun.

    2. Eğer IsCallable(method) true ise, o zaman

      1. result = ? Call(method, obj) olsun.

      2. Eğer result bir Object değilse, result döndür.

  4. Bir TypeError kuraldışı durumu fırlat.

7.1.2 ToBoolean ( arg )

Soyut işlem ToBoolean, arg (bir ECMAScript dil değeri) argümanını alır ve bir Boolean döndürür. arg'ı Boolean türünde bir değere dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Boolean ise, arg döndür.

  2. Eğer arg undefined, null, +0𝔽, -0𝔽, NaN, 0 veya boş String'ten biriyse, false döndür.

  3. Normative OptionalEğer konak bir web tarayıcısı ise veya [[[IsHTMLDDA]] İç Yuvasını](32_sec-additional-ecmascript-features-for-web-browsers.md#sec-IsHTMLDDA-internal-slot) başka şekilde destekliyorsa, o zaman

    1. Eğer arg bir Object ise ve arg bir [[IsHTMLDDA]] iç yuvasına sahipse, false döndür.
  4. true döndür.

7.1.3 ToNumeric ( arg )

Soyut işlem ToNumeric, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir Number veya bir BigInt içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ın bir Number veya BigInt'ye dönüştürülmüş halini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. primitiveValue = ? ToPrimitive(arg, number) olsun.

  2. Eğer primitiveValue bir BigInt ise, primitiveValue döndür.

  3. ? ToNumber(primitiveValue) döndür.

7.1.4 ToNumber ( arg )

Soyut işlem ToNumber, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı Number türünde bir değere dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Number ise, arg döndür.

  2. Eğer arg bir Symbol veya bir BigInt ise, bir TypeError kuraldışı durumu fırlat.

  3. Eğer arg undefined ise, NaN döndür.

  4. Eğer arg null veya false ise, +0𝔽 döndür.

  5. Eğer arg true ise, 1𝔽 döndür.

  6. Eğer arg bir String ise, StringToNumber(arg) döndür.

  7. Assert: arg bir Object'tir.

  8. primitiveValue = ? ToPrimitive(arg, number) olsun.

  9. Assert: primitiveValue bir Object değildir.

  10. ? ToNumber(primitiveValue) döndür.

7.1.4.1 String Türüne Uygulanan ToNumber

Soyut işlem StringToNumber, aşağıdaki dilbilgisini kullanarak bir String değerinin bir Number değerine nasıl dönüştürüleceğini belirtir.

Sözdizimi

StringNumericLiteral StringNumericLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt

StrWhiteSpace StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpaceopt

StrWhiteSpaceChar StrWhiteSpaceChar ::: WhiteSpace LineTerminator

StrNumericLiteral StrNumericLiteral ::: StrDecimalLiteral NonDecimalIntegerLiteral[~Sep]

StrDecimalLiteral StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral

StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: Infinity DecimalDigits[~Sep] . DecimalDigits[~Sep]opt ExponentPart[~Sep]opt . DecimalDigits[~Sep] ExponentPart[~Sep]opt DecimalDigits[~Sep] ExponentPart[~Sep]opt

Yukarıda açıkça tanımlanmayan tüm dilbilgisi sembolleri, sayısal değişmezler için Sözcüksel Dilbilgisi'nde (12.9.3) kullanılan tanımlara sahiptir.

7.1.4.1.1 StringToNumber ( string )

Soyut işlem StringToNumber, string (bir String) argümanını alır ve bir Number döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. literal = ParseText(string, StringNumericLiteral) olsun.

  2. Eğer literal bir hatalar Listesi ise, NaN döndür.

  3. literal'ın StringNumericValue değerini döndür.

7.1.4.1.2 Çalışma Zamanı Anlambilimi: StringNumericValue

Sözdizimi yönelimli işlem StringNumericValue hiçbir argüman almaz ve bir Number döndürür.

Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

StringNumericLiteral StringNumericLiteral ::: StrWhiteSpaceopt

  1. +0𝔽 döndür.

StringNumericLiteral StringNumericLiteral ::: StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt

  1. StrNumericLiteral'ın StringNumericValue değerini döndür.

StrNumericLiteral StrNumericLiteral ::: NonDecimalIntegerLiteral

  1. 𝔽(NonDecimalIntegerLiteral'ın MV'si) döndür.

StrDecimalLiteral StrDecimalLiteral ::: - StrUnsignedDecimalLiteral

  1. a, StrUnsignedDecimalLiteral'ın StringNumericValue değeri olsun.

  2. Eğer a +0𝔽 ise, -0𝔽 döndür.

  3. -a döndür.

StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: Infinity

  1. +∞𝔽 döndür.

StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: DecimalDigits . DecimalDigitsopt ExponentPartopt

  1. a, ilk DecimalDigits'in MV'si olsun.

  2. Eğer ikinci DecimalDigits mevcutsa, o zaman

    1. b, ikinci DecimalDigits'in MV'si olsun.

    2. n, ikinci DecimalDigits içindeki kod noktalarının sayısı olsun.

  3. Değilse,

    1. b 0 olsun.

    2. n 0 olsun.

  4. Eğer ExponentPart mevcutsa, e, ExponentPart'ın MV'si olsun; değilse e 0 olsun.

  5. RoundMVResult((a + (b × 10-n)) × 10e) döndür.

StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: . DecimalDigits ExponentPartopt

  1. b, DecimalDigits'in MV'si olsun.

  2. Eğer ExponentPart mevcutsa, e, ExponentPart'ın MV'si olsun; değilse e 0 olsun.

  3. n, DecimalDigits içindeki kod noktalarının sayısı olsun.

  4. RoundMVResult(b × 10e - n) döndür.

StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: DecimalDigits ExponentPartopt

  1. a, DecimalDigits'in MV'si olsun.

  2. Eğer ExponentPart mevcutsa, e, ExponentPart'ın MV'si olsun; değilse e 0 olsun.

  3. RoundMVResult(a × 10e) döndür.

7.1.4.1.3 RoundMVResult ( n )

Soyut işlem RoundMVResult, n (bir matematiksel değer) argümanını alır ve bir Number döndürür. n'i gerçekleştirim tanımlı bir şekilde bir Number'a dönüştürür. Bu soyut işlemin amaçları bakımından, bir basamak, sıfır değilse veya solunda sıfır olmayan bir basamak varsa ve sağında sıfır olmayan bir basamak varsa anlamlıdır. Bu soyut işlemin amaçları bakımından, bir matematiksel değerin bir gösteriminin “ifade ettiği matematiksel değer”, bir matematiksel değerin “ondalık gösterimi”nin tersidir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer n'in ondalık gösterimi 20 veya daha az anlamlı basamağa sahipse, 𝔽(n) döndür.

  2. option1, n'in ondalık gösteriminde 20nci basamaktan sonraki her anlamlı basamağın 0 basamağı ile değiştirilmesi sonucu ifade edilen matematiksel değer olsun.

  3. option2, n'in ondalık gösteriminde 20nci basamaktan sonraki her anlamlı basamağın 0 basamağı ile değiştirilmesi ve ardından 20nci konumda (gerektiğinde elde ile) bir artırılması sonucu ifade edilen matematiksel değer olsun.

  4. chosen, option1 veya option2'nin gerçekleştirim tanımlı bir seçimi olsun.

  5. 𝔽(chosen) döndür.

7.1.5 ToIntegerOrInfinity ( arg )

Soyut işlem ToIntegerOrInfinity, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tamsayı, +∞ veya -∞ içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, kesirli kısmı kesilmiş Number değerini temsil eden bir tamsayıya veya bu Number değeri sonsuz olduğunda +∞ veya -∞'a dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. number = ? ToNumber(arg) olsun.

  2. Eğer number, NaN, +0𝔽 veya -0𝔽'tan biriyse, 0 döndür.

  3. Eğer number +∞𝔽 ise, +∞ döndür.

  4. Eğer number -∞𝔽 ise, -∞ döndür.

  5. truncate((number)) döndür.

7.1.6 ToFixedSizeInteger ( int, signed, bitWidth )

Soyut işlem ToFixedSizeInteger, int (bir tamsayı, +∞ veya -∞), signed (unsigned veya signed) ve bitWidth (pozitif bir tamsayı) argümanlarını alır ve bir tamsayı döndürür. int'i, signed unsigned ise 0'dan 2bitWidth - 1'e (dahil) veya signed signed ise -2bitWidth - 1'den 2bitWidth - 1 - 1'e (dahil) dahil aralığındaki 2bitWidth tamsayıdan birine eşler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer int = +∞ veya int = -∞ ise, 0 döndür.

  2. fixedInt = int modulo 2bitWidth olsun.

  3. NOTE: Aşağıdaki adım, fixedInt'in ikiye tümleyen gösterimini değiştirmez.

  4. Eğer signed signed ise ve fixedInt ≥ 2bitWidth - 1 ise, fixedInt'i fixedInt - 2bitWidth olarak ayarla.

  5. fixedInt döndür.

7.1.7 ToInt32 ( arg )

Soyut işlem ToInt32, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, 𝔽(-231) ile 𝔽(231 - 1) arasındaki dahil aralıktaki ve -0𝔽 hariç 232 tam sayı Number değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = ? ToIntegerOrInfinity(arg) olsun.

  2. 𝔽(ToFixedSizeInteger(int, signed, 32)) döndür.

7.1.8 ToUint32 ( arg )

Soyut işlem ToUint32, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, +0𝔽 ile 𝔽(232 - 1) arasındaki dahil aralıktaki 232 tam sayı Number değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = ? ToIntegerOrInfinity(arg) olsun.

  2. 𝔽(ToFixedSizeInteger(int, unsigned, 32)) döndür.

7.1.9 ToInt16 ( arg )

Soyut işlem ToInt16, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, 𝔽(-215) ile 𝔽(215 - 1) arasındaki dahil aralıktaki ve -0𝔽 hariç 216 tam sayı Number değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = ? ToIntegerOrInfinity(arg) olsun.

  2. 𝔽(ToFixedSizeInteger(int, signed, 16)) döndür.

7.1.10 ToUint16 ( arg )

Soyut işlem ToUint16, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, +0𝔽 ile 𝔽(216 - 1) arasındaki dahil aralıktaki 216 tam sayı Number değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = ? ToIntegerOrInfinity(arg) olsun.

  2. 𝔽(ToFixedSizeInteger(int, unsigned, 16)) döndür.

7.1.11 ToInt8 ( arg )

Soyut işlem ToInt8, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, -128𝔽 ile 127𝔽 arasındaki dahil aralıktaki ve -0𝔽 hariç 28 tam sayı Number değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = ? ToIntegerOrInfinity(arg) olsun.

  2. 𝔽(ToFixedSizeInteger(int, signed, 8)) döndür.

7.1.12 ToUint8 ( arg )

Soyut işlem ToUint8, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, +0𝔽 ile 255𝔽 arasındaki dahil aralıktaki 28 tam sayı Number değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = ? ToIntegerOrInfinity(arg) olsun.

  2. 𝔽(ToFixedSizeInteger(int, unsigned, 8)) döndür.

7.1.13 ToUint8Clamp ( arg )

Soyut işlem ToUint8Clamp, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, +0𝔽 ile 255𝔽 arasındaki dahil aralıktaki 28 tam sayı Number değerinden birine sıkıştırır ve yuvarlar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. number = ? ToNumber(arg) olsun.

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

  3. mv, number'ın genişletilmiş matematiksel değeri olsun.

  4. clamped, mv'nin 0 ile 255 arasında sıkıştırılmasının sonucu olsun.

  5. f = floor(clamped) olsun.

  6. Eğer clamped < f + 0.5 ise, 𝔽(f) döndür.

  7. Eğer clamped > f + 0.5 ise, 𝔽(f + 1) döndür.

  8. Eğer f çift ise, 𝔽(f) döndür.

  9. 𝔽(f + 1) döndür.

7.1.14 ToBigInt ( arg )

Soyut işlem ToBigInt, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir BigInt içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı bir BigInt değerine dönüştürür veya Number'dan örtük bir dönüşüm gerekmesi durumunda fırlatır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. primitive = ? ToPrimitive(arg, number) olsun.

  2. primitive'in Tablo 12'de karşılık geldiği değeri döndür.

Tablo 12: BigInt Dönüşümleri

Argüman Türü Sonuç
Undefined Bir TypeError kuraldışı durumu fırlat.
Null Bir TypeError kuraldışı durumu fırlat.
Boolean primitive true ise 1n, primitive false ise 0n döndür.
BigInt primitive döndür.
Number Bir TypeError kuraldışı durumu fırlat.
String 1. n = StringToBigInt(primitive) olsun. 2. Eğer n undefined ise, bir SyntaxError kuraldışı durumu fırlat. 3. n döndür.
Symbol Bir TypeError kuraldışı durumu fırlat.

7.1.15 StringToBigInt ( string )

Soyut işlem StringToBigInt, string (bir String) argümanını alır ve bir BigInt veya undefined döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. literal = ParseText(string, StringIntegerLiteral) olsun.

  2. Eğer literal bir hatalar Listesi ise, undefined döndür.

  3. mv, literal'ın MV'si olsun.

  4. Assert: mv bir tamsayıdır.

  5. (mv) döndür.

7.1.15.1 StringIntegerLiteral Dilbilgisi

StringToBigInt aşağıdaki dilbilgisini kullanır.

Sözdizimi

StringIntegerLiteral StringIntegerLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrIntegerLiteral StrWhiteSpaceopt

StrIntegerLiteral StrIntegerLiteral ::: SignedInteger[~Sep] NonDecimalIntegerLiteral[~Sep]

7.1.15.2 Çalışma Zamanı Anlambilimi: MV

-

StringIntegerLiteral StringIntegerLiteral ::: StrWhiteSpaceopt

üretiminin MV'si 0'dır.

-

StringIntegerLiteral StringIntegerLiteral ::: StrWhiteSpaceopt StrIntegerLiteral StrWhiteSpaceopt

üretiminin MV'si, StrIntegerLiteral'ın MV'sidir.

7.1.16 ToBigInt64 ( arg )

Soyut işlem ToBigInt64, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir BigInt içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, (-263) ile (263 - 1) arasındaki dahil aralıktaki 264 BigInt değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = (? ToBigInt(arg)) olsun.

  2. (ToFixedSizeInteger(int, signed, 64)) döndür.

7.1.17 ToBigUint64 ( arg )

Soyut işlem ToBigUint64, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir BigInt içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, 0 ile (264 - 1) arasındaki dahil aralıktaki 264 BigInt değerinden birine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = (? ToBigInt(arg)) olsun.

  2. (ToFixedSizeInteger(int, unsigned, 64)) döndür.

7.1.18 ToString ( arg )

Soyut işlem ToString, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir String içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı String türünde bir değere dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir String ise, arg döndür.

  2. Eğer arg bir Symbol ise, bir TypeError kuraldışı durumu fırlat.

  3. Eğer arg undefined ise, "undefined" döndür.

  4. Eğer arg null ise, "null" döndür.

  5. Eğer arg true ise, "true" döndür.

  6. Eğer arg false ise, "false" döndür.

  7. Eğer arg bir Number ise, Number::toString(arg, 10) döndür.

  8. Eğer arg bir BigInt ise, BigInt::toString(arg, 10) döndür.

  9. Assert: arg bir Object'tir.

  10. primitiveValue = ? ToPrimitive(arg, string) olsun.

  11. Assert: primitiveValue bir Object değildir.

  12. ? ToString(primitiveValue) döndür.

7.1.19 ToObject ( arg )

Soyut işlem ToObject, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir Object içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı Object türünde bir değere dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg undefined veya null ise, bir TypeError kuraldışı durumu fırlat.

  2. Eğer arg bir Boolean ise, [[BooleanData]] iç yuvası arg olarak ayarlanmış yeni bir Boolean nesnesi döndür. Boolean nesnelerinin açıklaması için bkz. 20.3.

  3. Eğer arg bir Number ise, [[NumberData]] iç yuvası arg olarak ayarlanmış yeni bir Number nesnesi döndür. Number nesnelerinin açıklaması için bkz. 21.1.

  4. Eğer arg bir String ise, [[StringData]] iç yuvası arg olarak ayarlanmış yeni bir String nesnesi döndür. String nesnelerinin açıklaması için bkz. 22.1.

  5. Eğer arg bir Symbol ise, [[SymbolData]] iç yuvası arg olarak ayarlanmış yeni bir Symbol nesnesi döndür. Symbol nesnelerinin açıklaması için bkz. 20.4.

  6. Eğer arg bir BigInt ise, [[BigIntData]] iç yuvası arg olarak ayarlanmış yeni bir BigInt nesnesi döndür. BigInt nesnelerinin açıklaması için bkz. 21.2.

  7. Assert: arg bir Object'tir.

  8. arg döndür.

7.1.20 ToPropertyKey ( arg )

Soyut işlem ToPropertyKey, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir özellik anahtarı içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, bir özellik anahtarı olarak kullanılabilecek bir değere dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. key = ? ToPrimitive(arg, string) olsun.

  2. Eğer key bir Symbol ise, o zaman

    1. key döndür.
  3. ! ToString(key) döndür.

7.1.21 ToLength ( arg )

Soyut işlem ToLength, arg (bir ECMAScript dil değeri) argümanını alır ve ya negatif olmayan bir tam sayı Number içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı, dizi benzeri bir nesnenin uzunluğu olarak kullanılmaya uygun, negatif olmayan bir tam sayı Number'a sıkıştırır ve keser. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length = ? ToIntegerOrInfinity(arg) olsun.

  2. Eğer length ≤ 0 ise, +0𝔽 döndür.

  3. 𝔽(min(length, 253 - 1)) döndür.

7.1.22 CanonicalNumericIndexString ( arg )

Soyut işlem CanonicalNumericIndexString, arg (bir String) argümanını alır ve bir Number veya undefined döndürür. Eğer arg, "-0" ise veya bir n Number değeri için tam olarak ToString(n) ile eşleşiyorsa, ilgili Number değerini döndürür. Aksi takdirde undefined döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg "-0" ise, -0𝔽 döndür.

  2. n = ! ToNumber(arg) olsun.

  3. Eğer ! ToString(n) arg ise, n döndür.

  4. undefined döndür.

Bir kanonik sayısal dizgi, CanonicalNumericIndexString soyut işleminin undefined döndürmediği herhangi bir String'tir.

7.1.23 ToIndex ( arg )

Soyut işlem ToIndex, arg (bir ECMAScript dil değeri) argümanını alır ve ya negatif olmayan bir tamsayı içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg'ı bir tamsayıya dönüştürür ve eğer bu tamsayı negatif değilse ve bir tamsayı indisine karşılık geliyorsa onu döndürür. Aksi takdirde bir kuraldışı durum fırlatır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. int = ? ToIntegerOrInfinity(arg) olsun.

  2. Eğer int, 0 ile 253 - 1 dahil aralığında değilse, bir RangeError kuraldışı durumu fırlat.

  3. int döndür.

7.2 Sınama ve Karşılaştırma İşlemleri

7.2.1 RequireObjectCoercible ( arg )

Soyut işlem RequireObjectCoercible, arg (bir ECMAScript dil değeri) argümanını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. arg, ToObject kullanılarak bir Object'e dönüştürülemeyen bir değerse bir hata fırlatır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg undefined veya null ise, bir TypeError kuraldışı durumu fırlat.

  2. unused döndür.

7.2.2 IsArray ( arg )

Soyut işlem IsArray, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Object değilse, false döndür.

  2. Eğer arg bir Array egzotik nesnesi ise, true döndür.

  3. Eğer arg bir Proxy egzotik nesnesi ise, o zaman

    1. ? ValidateNonRevokedProxy(arg) işlemini gerçekleştir.

    2. proxyTarget = arg.[[ProxyTarget]] olsun.

    3. ? IsArray(proxyTarget) döndür.

  4. false döndür.

7.2.3 IsCallable ( arg )

Soyut işlem IsCallable, arg (bir ECMAScript dil değeri) argümanını alır ve bir Boolean döndürür. arg'ın bir [[Call]] iç yöntemine sahip çağrılabilir bir işlev olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Object değilse, false döndür.

  2. Eğer arg bir [[Call]] iç yöntemine sahipse, true döndür.

  3. false döndür.

7.2.4 IsConstructor ( arg )

Soyut işlem IsConstructor, arg (bir ECMAScript dil değeri) argümanını alır ve bir Boolean döndürür. arg'ın bir [[Construct]] iç yöntemine sahip bir işlev nesnesi olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Object değilse, false döndür.

  2. Eğer arg bir [[Construct]] iç yöntemine sahipse, true döndür.

  3. false döndür.

7.2.5 IsExtensible ( obj )

Soyut işlem IsExtensible, obj (bir Object) argümanını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. obj'ye ek özellikler eklenip eklenemeyeceğini belirlemek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? obj.[[IsExtensible]]() döndür.

7.2.6 IsRegExp ( arg )

Soyut işlem IsRegExp, arg (bir ECMAScript dil değeri) argümanını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Object değilse, false döndür.

  2. matcher = ? Get(arg, %Symbol.match%) olsun.

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

  4. Eğer arg bir [[RegExpMatcher]] iç yuvasına sahipse, true döndür.

  5. false döndür.

7.2.7 Statik Anlambilim: IsStringWellFormedUnicode ( string )

Soyut işlem IsStringWellFormedUnicode, string (bir String) argümanını alır ve bir Boolean döndürür. string'i, 6.1.4'te açıklandığı gibi UTF-16 kodlanmış kod noktaları dizisi olarak yorumlar ve bunun iyi biçimlendirilmiş bir UTF-16 dizisi olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, string'in uzunluğu olsun.

  2. k 0 olsun.

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

    1. codePoint = CodePointAt(string, k) olsun.

    2. Eğer codePoint.[[IsUnpairedSurrogate]] true ise, false döndür.

    3. k'yi k + codePoint.[[CodeUnitCount]] olarak ayarla.

  4. true döndür.

7.2.8 SameType ( x, y )

Soyut işlem SameType, x (bir ECMAScript dil değeri) ve y (bir ECMAScript dil değeri) argümanlarını alır ve bir Boolean döndürür. İki argümanın aynı türde olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer x undefined ve y undefined ise, true döndür.

  2. Eğer x null ve y null ise, true döndür.

  3. Eğer x bir Boolean ve y bir Boolean ise, true döndür.

  4. Eğer x bir Number ve y bir Number ise, true döndür.

  5. Eğer x bir BigInt ve y bir BigInt ise, true döndür.

  6. Eğer x bir Symbol ve y bir Symbol ise, true döndür.

  7. Eğer x bir String ve y bir String ise, true döndür.

  8. Eğer x bir Object ve y bir Object ise, true döndür.

  9. false döndür.

7.2.9 SameValue ( x, y )

Soyut işlem SameValue, x (bir ECMAScript dil değeri) ve y (bir ECMAScript dil değeri) argümanlarını alır ve bir Boolean döndürür. İki argümanın aynı değer olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer SameType(x, y) false ise, false döndür.

  2. Eğer x bir Number ise, o zaman

    1. Number::sameValue(x, y) döndür.
  3. SameValueNonNumber(x, y) döndür.

7.2.10 SameValueZero ( x, y )

Soyut işlem SameValueZero, x (bir ECMAScript dil değeri) ve y (bir ECMAScript dil değeri) argümanlarını alır ve bir Boolean döndürür. İki argümanın (+0𝔽 ile -0𝔽 arasındaki farkı yok sayarak) aynı değer olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer SameType(x, y) false ise, false döndür.

  2. Eğer x bir Number ise, o zaman

    1. Number::sameValueZero(x, y) döndür.
  3. SameValueNonNumber(x, y) döndür.

7.2.11 SameValueNonNumber ( x, y )

Soyut işlem SameValueNonNumber, x (bir ECMAScript dil değeri, ancak Number değil) ve y (bir ECMAScript dil değeri, ancak Number değil) argümanlarını alır ve bir Boolean döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: SameType(x, y) true'dur.

  2. Eğer x undefined veya null ise, true döndür.

  3. Eğer x bir BigInt ise, o zaman

    1. BigInt::equal(x, y) döndür.
  4. Eğer x bir String ise, o zaman

    1. Eğer x ve y aynı uzunluğa ve aynı konumlarda aynı kod birimlerine sahipse, true döndür.

    2. false döndür.

  5. Eğer x bir Boolean ise, o zaman

    1. Eğer x true ve y true ise, true döndür.

    2. Eğer x false ve y false ise, true döndür.

    3. false döndür.

  6. NOTE: Diğer tüm ECMAScript dil değerleri kimlik ile karşılaştırılır.

  7. Eğer x, y ise, true döndür.

  8. false döndür.

7.2.12 IsLessThan ( x, y, leftFirst )

Soyut işlem IsLessThan, x (bir ECMAScript dil değeri), y (bir ECMAScript dil değeri) ve leftFirst (bir Boolean) argümanlarını alır ve ya bir Boolean veya undefined içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. x < y karşılaştırması için anlambilimi sağlar; true, false veya undefined (işlenenlerin aynı sayısal türün karşılaştırılabilir değerlerine zorlanamadığını belirtir) döndürür. leftFirst bayrağı, x ve y üzerinde potansiyel olarak görünür yan etkilere sahip işlemlerin gerçekleştirilme sırasını denetlemek için kullanılır. Bu gereklidir çünkü ECMAScript, ifadelerin soldan sağa değerlendirilmesini belirtir. leftFirst true ise, x parametresi, y parametresinin karşılık gelen ifadesinin solunda yer alan bir ifadeye karşılık gelir. leftFirst false ise, bunun tersi söz konusudur ve işlemler x'ten önce y üzerinde gerçekleştirilmelidir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer leftFirst true ise, o zaman

    1. px = ? ToPrimitive(x, number) olsun.

    2. py = ? ToPrimitive(y, number) olsun.

  2. Değilse,

    1. NOTE: Değerlendirme sırasının, soldan sağa değerlendirmeyi koruyacak şekilde tersine çevrilmesi gerekir.

    2. py = ? ToPrimitive(y, number) olsun.

    3. px = ? ToPrimitive(x, number) olsun.

  3. Eğer px bir String ve py bir String ise, o zaman

    1. lx, px'in uzunluğu olsun.

    2. ly, py'nin uzunluğu olsun.

    3. 0 ≤ i < min(lx, ly) olacak şekildeki her tamsayı i için, artan sırada,

      1. cx, px içinde i indisindeki kod biriminin sayısal değeri olsun.

      2. cy, py içinde i indisindeki kod biriminin sayısal değeri olsun.

      3. Eğer cx < cy ise, true döndür.

      4. Eğer cx > cy ise, false döndür.

    4. Eğer lx < ly ise, true döndür.

    5. false döndür.

  4. Eğer px bir BigInt ve py bir String ise, o zaman

    1. ny = StringToBigInt(py) olsun.

    2. Eğer ny undefined ise, undefined döndür.

    3. BigInt::lessThan(px, ny) döndür.

  5. Eğer px bir String ve py bir BigInt ise, o zaman

    1. nx = StringToBigInt(px) olsun.

    2. Eğer nx undefined ise, undefined döndür.

    3. BigInt::lessThan(nx, py) döndür.

  6. NOTE: px ve py ilkel değerler olduğundan, değerlendirme sırası önemli değildir.

  7. nx = ? ToNumeric(px) olsun.

  8. ny = ? ToNumeric(py) olsun.

  9. Eğer SameType(nx, ny) true ise, o zaman

    1. Eğer nx bir Number ise, Number::lessThan(nx, ny) döndür.

    2. Assert: nx bir BigInt'tir.

    3. BigInt::lessThan(nx, ny) döndür.

  10. Assert: nx bir BigInt ve ny bir Number, veya nx bir Number ve ny bir BigInt'tir.

  11. Eğer nx NaN veya ny NaN ise, undefined döndür.

  12. Eğer nx -∞𝔽 veya ny +∞𝔽 ise, true döndür.

  13. Eğer nx +∞𝔽 veya ny -∞𝔽 ise, false döndür.

  14. Eğer (nx) < (ny) ise, true döndür.

  15. false döndür.

7.2.13 IsLooselyEqual ( x, y )

Soyut işlem IsLooselyEqual, x (bir ECMAScript dil değeri) ve y (bir ECMAScript dil değeri) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. == işleci için anlambilimi sağlar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer SameType(x, y) true ise, o zaman

    1. IsStrictlyEqual(x, y) döndür.
  2. Eğer x null ve y undefined ise, true döndür.

  3. Eğer x undefined ve y null ise, true döndür.

  4. Normative OptionalEğer konak bir web tarayıcısı ise veya [[[IsHTMLDDA]] İç Yuvasını](32_sec-additional-ecmascript-features-for-web-browsers.md#sec-IsHTMLDDA-internal-slot) başka şekilde destekliyorsa, o zaman

    1. Eğer x bir Object ise, x bir [[IsHTMLDDA]] iç yuvasına sahipse ve y undefined veya null ise, true döndür.

    2. Eğer x undefined veya null ise, y bir Object ise ve y bir [[IsHTMLDDA]] iç yuvasına sahipse, true döndür.

  5. Eğer x bir Number ve y bir String ise, ! IsLooselyEqual(x, ! ToNumber(y)) döndür.

  6. Eğer x bir String ve y bir Number ise, ! IsLooselyEqual(! ToNumber(x), y) döndür.

  7. Eğer x bir BigInt ve y bir String ise, o zaman

    1. n = StringToBigInt(y) olsun.

    2. Eğer n undefined ise, false döndür.

    3. ! IsLooselyEqual(x, n) döndür.

  8. Eğer x bir String ve y bir BigInt ise, ! IsLooselyEqual(y, x) döndür.

  9. Eğer x bir Boolean ise, ! IsLooselyEqual(! ToNumber(x), y) döndür.

  10. Eğer y bir Boolean ise, ! IsLooselyEqual(x, ! ToNumber(y)) döndür.

  11. Eğer x bir String, bir Number, bir BigInt veya bir Symbol ise ve y bir Object ise, ! IsLooselyEqual(x, ? ToPrimitive(y)) döndür.

  12. Eğer x bir Object ve y bir String, bir Number, bir BigInt veya bir Symbol ise, ! IsLooselyEqual(? ToPrimitive(x), y) döndür.

  13. Eğer x bir BigInt ve y bir Number ise, veya x bir Number ve y bir BigInt ise, o zaman

    1. Eğer x sonlu değilse veya y sonlu değilse, false döndür.

    2. Eğer (x) = (y) ise, true döndür.

    3. false döndür.

  14. false döndür.

7.2.14 IsStrictlyEqual ( x, y )

Soyut işlem IsStrictlyEqual, x (bir ECMAScript dil değeri) ve y (bir ECMAScript dil değeri) argümanlarını alır ve bir Boolean döndürür. === işleci için anlambilimi sağlar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer SameType(x, y) false ise, false döndür.

  2. Eğer x bir Number ise, o zaman

    1. Number::equal(x, y) döndür.
  3. SameValueNonNumber(x, y) döndür.

7.3 Nesneler Üzerindeki İşlemler

7.3.1 MakeBasicObject ( internalSlotsList )

Soyut işlem MakeBasicObject, internalSlotsList (iç yuva adlarından oluşan bir Liste) argümanını alır ve bir Object döndürür. Hem sıradan nesneler hem de egzotik nesneler dahil olmak üzere, algoritmik olarak oluşturulan tüm ECMAScript nesnelerinin kaynağıdır. Tüm nesnelerin oluşturulmasında kullanılan ortak adımları ayırır ve nesne oluşturmayı merkezileştirir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. internalSlotsList'i, internalSlotsList ile « [[PrivateElements]] »'in liste birleştirmesi olarak ayarla.

  2. obj, internalSlotsList'teki her ad için bir iç yuvaya sahip yeni oluşturulmuş bir nesne olsun.

  3. NOTE: Object Internal Methods and Internal Slots'ta açıklandığı gibi, aksi belirtilmedikçe bu tür her iç yuvanın başlangıç değeri undefined'dır.

  4. obj.[[PrivateElements]]'i yeni bir boş Liste olarak ayarla.

  5. obj'nin temel iç yöntemlerini, 10.1'de belirtilen varsayılan sıradan nesne tanımlarına ayarla.

  6. Assert: Eğer çağıran, obj'nin hem [[GetPrototypeOf]] hem de [[SetPrototypeOf]] temel iç yöntemlerini geçersiz kılmayacaksa, internalSlotsList [[Prototype]]'ı içerir.

  7. Assert: Eğer çağıran, obj'nin [[SetPrototypeOf]], [[IsExtensible]] ve [[PreventExtensions]] temel iç yöntemlerinin tümünü geçersiz kılmayacaksa, internalSlotsList [[Extensible]]'ı içerir.

  8. Eğer internalSlotsList [[Extensible]] içeriyorsa, obj.[[Extensible]]true olarak ayarla.

  9. obj döndür.

7.3.2 Get ( obj, propertyKey )

Soyut işlem Get, obj (bir Object) ve propertyKey (bir özellik anahtarı) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin belirli bir özelliğinin değerini almak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? obj.[[Get]](propertyKey, obj) döndür.

7.3.3 GetV ( value, propertyKey )

Soyut işlem GetV, value (bir ECMAScript dil değeri) ve propertyKey (bir özellik anahtarı) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir ECMAScript dil değerinin belirli bir özelliğinin değerini almak için kullanılır. Değer bir nesne değilse, özellik araması, değerin türüne uygun bir sarmalayıcı nesne kullanılarak gerçekleştirilir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj = ? ToObject(value) olsun.

  2. ? obj.[[Get]](propertyKey, value) döndür.

7.3.4 Set ( obj, propertyKey, value, throw )

Soyut işlem Set, obj (bir Object), propertyKey (bir özellik anahtarı), value (bir ECMAScript dil değeri) ve throw (bir Boolean) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin belirli bir özelliğinin değerini ayarlamak için kullanılır. value, özellik için yeni değerdir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. success = ? obj.[[Set]](propertyKey, value, obj) olsun.

  2. Eğer success false ise ve throw true ise, bir TypeError kuraldışı durumu fırlat.

  3. unused döndür.

7.3.5 CreateDataProperty ( obj, propertyKey, value )

Soyut işlem CreateDataProperty, obj (bir Object), propertyKey (bir özellik anahtarı) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin yeni bir kendi özelliğini oluşturmak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. newDesc, PropertyDescriptor { [[Value]]: value, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true } olsun.

  2. ? obj.[[DefineOwnProperty]](propertyKey, newDesc) döndür.

7.3.6 CreateDataPropertyOrThrow ( obj, propertyKey, value )

Soyut işlem CreateDataPropertyOrThrow, obj (bir Object), propertyKey (bir özellik anahtarı) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin yeni bir kendi özelliğini oluşturmak için kullanılır. İstenen özellik güncellemesi gerçekleştirilemezse bir TypeError kuraldışı durumu fırlatır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. success = ? CreateDataProperty(obj, propertyKey, value) olsun.

  2. Eğer success false ise, bir TypeError kuraldışı durumu fırlat.

  3. unused döndür.

7.3.7 CreateNonEnumerableDataPropertyOrThrow ( obj, propertyKey, value )

Soyut işlem CreateNonEnumerableDataPropertyOrThrow, obj (bir Object), propertyKey (bir özellik anahtarı) ve value (bir ECMAScript dil değeri) argümanlarını alır ve unused döndürür. Bir sıradan nesnenin numaralandırılamaz yeni bir kendi özelliğini oluşturmak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: obj, yapılandırılamaz özellikleri olmayan, sıradan, genişletilebilir bir nesnedir.

  2. newDesc, PropertyDescriptor { [[Value]]: value, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } olsun.

  3. ! DefinePropertyOrThrow(obj, propertyKey, newDesc) işlemini gerçekleştir.

  4. unused döndür.

7.3.8 DefinePropertyOrThrow ( obj, propertyKey, propertyDesc )

Soyut işlem DefinePropertyOrThrow, obj (bir Object), propertyKey (bir özellik anahtarı) ve propertyDesc (bir Property Descriptor) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin [[DefineOwnProperty]] iç yöntemini, istenen özellik güncellemesi gerçekleştirilemezse bir TypeError kuraldışı durumu fırlatacak şekilde çağırmak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. success = ? obj.[[DefineOwnProperty]](propertyKey, propertyDesc) olsun.

  2. Eğer success false ise, bir TypeError kuraldışı durumu fırlat.

  3. unused döndür.

7.3.9 DeletePropertyOrThrow ( obj, propertyKey )

Soyut işlem DeletePropertyOrThrow, obj (bir Object) ve propertyKey (bir özellik anahtarı) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin belirli bir kendi özelliğini kaldırmak için kullanılır. Özellik yapılandırılabilir değilse bir kuraldışı durum fırlatır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. success = ? obj.[[Delete]](propertyKey) olsun.

  2. Eğer success false ise, bir TypeError kuraldışı durumu fırlat.

  3. unused döndür.

7.3.10 GetMethod ( value, propertyKey )

Soyut işlem GetMethod, value (bir ECMAScript dil değeri) ve propertyKey (bir özellik anahtarı) argümanlarını alır ve ya bir işlev nesnesi veya undefined içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir ECMAScript dil değerinin belirli bir özelliğinin değerinin bir işlev olması beklendiğinde, bu özelliğin değerini almak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. func = ? GetV(value, propertyKey) olsun.

  2. Eğer func undefined veya null ise, undefined döndür.

  3. Eğer IsCallable(func) false ise, bir TypeError kuraldışı durumu fırlat.

  4. func döndür.

7.3.11 HasProperty ( obj, propertyKey )

Soyut işlem HasProperty, obj (bir Object) ve propertyKey (bir özellik anahtarı) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin, belirtilen özellik anahtarına sahip bir özelliğinin olup olmadığını belirlemek için kullanılır. Özellik, kendi özelliği veya kalıtılan özellik olabilir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? obj.[[HasProperty]](propertyKey) döndür.

7.3.12 HasOwnProperty ( obj, propertyKey )

Soyut işlem HasOwnProperty, obj (bir Object) ve propertyKey (bir özellik anahtarı) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin, belirtilen özellik anahtarına sahip bir kendi özelliğinin olup olmadığını belirlemek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. propertyDesc = ? obj.[[GetOwnProperty]](propertyKey) olsun.

  2. Eğer propertyDesc undefined ise, false döndür.

  3. true döndür.

7.3.13 Call ( func, thisValue [ , argList ] )

Soyut işlem Call, func (bir ECMAScript dil değeri) ve thisValue (bir ECMAScript dil değeri) argümanlarını ve isteğe bağlı argList (ECMAScript dil değerlerinden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir işlev nesnesinin [[Call]] iç yöntemini çağırmak için kullanılır. func, işlev nesnesidir; thisValue, [[Call]]'ın this değeri olan bir ECMAScript dil değeridir; argList ise iç yöntemin ilgili argümanına geçirilen değerdir. argList mevcut değilse, değeri olarak yeni bir boş Liste kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer argList mevcut değilse, argList'i yeni bir boş Liste olarak ayarla.

  2. Eğer IsCallable(func) false ise, bir TypeError kuraldışı durumu fırlat.

  3. ? func.[[Call]](thisValue, argList) döndür.

7.3.14 Construct ( ctor [ , argList [ , newTarget ] ] )

Soyut işlem Construct, ctor (bir oluşturucu) argümanını ve isteğe bağlı argList (ECMAScript dil değerlerinden oluşan bir Liste) ve newTarget (bir oluşturucu) argümanlarını alır ve ya bir Object içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir işlev nesnesinin [[Construct]] iç yöntemini çağırmak için kullanılır. argList ve newTarget, iç yöntemin ilgili argümanları olarak geçirilecek değerlerdir. argList mevcut değilse, değeri olarak yeni bir boş Liste kullanılır. newTarget mevcut değilse, değeri olarak ctor kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer newTarget mevcut değilse, newTargetctor olarak ayarla.

  2. Eğer argList mevcut değilse, argList'i yeni bir boş Liste olarak ayarla.

  3. ? ctor.[[Construct]](argList, newTarget) döndür.

7.3.15 SetIntegrityLevel ( obj, level )

Soyut işlem SetIntegrityLevel, obj (bir Object) ve level (sealed veya frozen) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin kendi özelliklerinin kümesini sabitlemek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. status = ? obj.[[PreventExtensions]]() olsun.

  2. Eğer status false ise, false döndür.

  3. keys = ? obj.[[OwnPropertyKeys]]() olsun.

  4. Eğer level sealed ise, o zaman

    1. keys'in her bir key öğesi için,

      1. ? DefinePropertyOrThrow(obj, key, PropertyDescriptor { [[Configurable]]: false }) işlemini gerçekleştir.
  5. Değilse,

    1. Assert: level frozen'dır.

    2. keys'in her bir key öğesi için,

      1. currentDesc = ? obj.[[GetOwnProperty]](key) olsun.

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

         1. Eğer [IsAccessorDescriptor](07_sec-ecmascript-data-types-and-values.md#sec-isaccessordescriptor)(*currentDesc*) `true` ise, o zaman
           
                   1. *propertyDesc*, PropertyDescriptor { *[[Configurable]]*: `false` } olsun.
        
         2. Değilse,
           
                   1. *propertyDesc*, PropertyDescriptor { *[[Configurable]]*: `false`, *[[Writable]]*: `false` } olsun.
        
         3. ? [DefinePropertyOrThrow](#sec-definepropertyorthrow)(*obj*, *key*, *propertyDesc*) işlemini gerçekleştir.
  6. true döndür.

7.3.16 TestIntegrityLevel ( obj, level )

Soyut işlem TestIntegrityLevel, obj (bir Object) ve level (sealed veya frozen) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir nesnenin kendi özelliklerinin kümesinin sabitlenip sabitlenmediğini belirlemek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. extensible = ? IsExtensible(obj) olsun.

  2. Eğer extensible true ise, false döndür.

  3. NOTE: Nesne genişletilebilir ise, özelliklerinin hiçbiri incelenmez.

  4. keys = ? obj.[[OwnPropertyKeys]]() olsun.

  5. keys'in her bir key öğesi için,

    1. currentDesc = ? obj.[[GetOwnProperty]](key) olsun.

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

      1. Eğer currentDesc.[[Configurable]] true ise, false döndür.

      2. Eğer level frozen ise ve IsDataDescriptor(currentDesc) true ise, o zaman

         1. Eğer *currentDesc*.*[[Writable]]* `true` ise, `false` döndür.
  6. true döndür.

7.3.17 CreateArrayFromList ( elements )

Soyut işlem CreateArrayFromList, elements (ECMAScript dil değerlerinden oluşan bir Liste) argümanını alır ve bir Array döndürür. Öğeleri elements tarafından sağlanan bir Array oluşturmak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. array = ! ArrayCreate(0) olsun.

  2. n 0 olsun.

  3. elements'in her bir element öğesi için,

    1. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(n)), element) işlemini gerçekleştir.

    2. n'yi n + 1 olarak ayarla.

  4. array döndür.

7.3.18 LengthOfArrayLike ( obj )

Soyut işlem LengthOfArrayLike, obj (bir Object) argümanını alır ve ya negatif olmayan bir tamsayı içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Dizi benzeri bir nesnenin "length" özelliğinin değerini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. (? ToLength(? Get(obj, "length"))) döndür.

Dizi benzeri bir nesne, bu işlemin bir normal tamamlanma döndürdüğü herhangi bir nesnedir.

7.3.19 CreateListFromArrayLike ( obj [ , validElementTypes ] )

Soyut işlem CreateListFromArrayLike, obj (bir ECMAScript dil değeri) argümanını ve isteğe bağlı validElementTypes (all veya property-key) argümanını alır ve ya ECMAScript dil değerlerinden oluşan bir Liste içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Öğeleri, obj'nin indisli özellikleri tarafından sağlanan bir Liste değeri oluşturmak için kullanılır. validElementTypes, öğe olarak izin verilen değer türlerini belirtir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer validElementTypes mevcut değilse, validElementTypesall olarak ayarla.

  2. Eğer obj bir Object değilse, bir TypeError kuraldışı durumu fırlat.

  3. length = ? LengthOfArrayLike(obj) olsun.

  4. list, yeni bir boş Liste olsun.

  5. index 0 olsun.

  6. index < length olduğu sürece tekrar et,

    1. indexName = ! ToString(𝔽(index)) olsun.

    2. next = ? Get(obj, indexName) olsun.

    3. Eğer validElementTypes property-key ise ve next bir özellik anahtarı değilse, bir TypeError kuraldışı durumu fırlat.

    4. next'i list'e ekle.

    5. index'i index + 1 olarak ayarla.

  7. list döndür.

7.3.20 Invoke ( value, propertyKey [ , argList ] )

Soyut işlem Invoke, value (bir ECMAScript dil değeri) ve propertyKey (bir özellik anahtarı) argümanlarını ve isteğe bağlı argList (ECMAScript dil değerlerinden oluşan bir Liste) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir ECMAScript dil değerinin bir yöntem özelliğini çağırmak için kullanılır. value, hem özellik için arama noktası hem de çağrının this değeri olarak hizmet eder. argList, yönteme geçirilen argüman değerlerinin listesidir. argList mevcut değilse, değeri olarak yeni bir boş Liste kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer argList mevcut değilse, argList'i yeni bir boş Liste olarak ayarla.

  2. func = ? GetV(value, propertyKey) olsun.

  3. ? Call(func, value, argList) döndür.

7.3.21 OrdinaryHasInstance ( ctor, instance )

Soyut işlem OrdinaryHasInstance, ctor (bir ECMAScript dil değeri) ve instance (bir ECMAScript dil değeri) argümanlarını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. instance'ın, ctor tarafından sağlanan örnek nesne kalıtım yolundan miras alıp almadığını belirlemek için varsayılan algoritmayı uygular. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer IsCallable(ctor) false ise, false döndür.

  2. Eğer ctor'ın bir [[BoundTargetFunction]] iç yuvası varsa, o zaman

    1. boundCtor = ctor.[[BoundTargetFunction]] olsun.

    2. ? InstanceofOperator(instance, boundCtor) döndür.

  3. Eğer instance bir Object değilse, false döndür.

  4. proto = ? Get(ctor, "prototype") olsun.

  5. Eğer proto bir Object değilse, bir TypeError kuraldışı durumu fırlat.

  6. Tekrar et,

    1. instance'ı ? instance.[[GetPrototypeOf]]() olarak ayarla.

    2. Eğer instance null ise, false döndür.

    3. Eğer SameValue(proto, instance) true ise, true döndür.

7.3.22 SpeciesConstructor ( obj, defaultCtor )

Soyut işlem SpeciesConstructor, obj (bir Object) ve defaultCtor (bir oluşturucu) argümanlarını alır ve ya bir oluşturucu içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. obj'den türetilen yeni nesneler oluşturmak için kullanılması gereken oluşturucuyu almak için kullanılır. defaultCtor, obj'den başlayarak bir oluşturucu %Symbol.species% özelliği bulunamazsa kullanılacak oluşturucudur. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ctor = ? Get(obj, "constructor") olsun.

  2. Eğer ctor undefined ise, defaultCtor döndür.

  3. Eğer ctor bir Object değilse, bir TypeError kuraldışı durumu fırlat.

  4. species = ? Get(ctor, %Symbol.species%) olsun.

  5. Eğer species undefined veya null ise, defaultCtor döndür.

  6. Eğer IsConstructor(species) true ise, species döndür.

  7. Bir TypeError kuraldışı durumu fırlat.

7.3.23 EnumerableOwnProperties ( obj, kind )

Soyut işlem EnumerableOwnProperties, obj (bir Object) ve kind (key, value veya key+value) argümanlarını alır ve ya ECMAScript dil değerlerinden oluşan bir Liste içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ownKeys = ? obj.[[OwnPropertyKeys]]() olsun.

  2. results, yeni bir boş Liste olsun.

  3. ownKeys'in her bir key öğesi için,

    1. Eğer key bir String ise, o zaman

      1. propertyDesc = ? obj.[[GetOwnProperty]](key) olsun.

      2. Eğer propertyDesc undefined değilse ve propertyDesc.[[Enumerable]] true ise, o zaman

         1. Eğer *kind* `key` ise, o zaman
           
                   1. *key*'i *results*'a ekle.
        
         2. Değilse,
           
                   1. *value* = ? [Get](#sec-get-o-p)(*obj*, *key*) olsun.
           
                   2. Eğer *kind* `value` ise, o zaman
                     
                               1. *value*'yu *results*'a ekle.
           
                   3. Değilse,
                     
                               1. [Assert](06_sec-notational-conventions.md#assert): *kind* `key+value`'dur.
                     
                               2. *entry* = [CreateArrayFromList](#sec-createarrayfromlist)(« *key*, *value* ») olsun.
                     
                               3. *entry*'yi *results*'a ekle.
  4. results döndür.

7.3.24 GetFunctionRealm ( func )

Soyut işlem GetFunctionRealm, func (bir işlev nesnesi) argümanını alır ve ya bir Realm Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer func bir [[Realm]] iç yuvasına sahipse, o zaman

    1. func.[[Realm]] döndür.
  2. Eğer func bir bound function egzotik nesnesi ise, o zaman

    1. boundTargetFunc = func.[[BoundTargetFunction]] olsun.

    2. ? GetFunctionRealm(boundTargetFunc) döndür.

  3. Eğer func bir Proxy egzotik nesnesi ise, o zaman

    1. ? ValidateNonRevokedProxy(func) işlemini gerçekleştir.

    2. proxyTarget = func.[[ProxyTarget]] olsun.

    3. Assert: proxyTarget bir işlev nesnesidir.

    4. ? GetFunctionRealm(proxyTarget) döndür.

  4. Geçerli Realm Record'u döndür.

7.3.25 CopyDataProperties ( target, source, excludedItems )

Soyut işlem CopyDataProperties, target (bir Object), source (bir ECMAScript dil değeri) ve excludedItems (özellik anahtarlarından oluşan bir Liste) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer source undefined veya null ise, unused döndür.

  2. from = ! ToObject(source) olsun.

  3. keys = ? from.[[OwnPropertyKeys]]() olsun.

  4. keys'in her bir nextKey öğesi için,

    1. excluded = false olsun.

    2. excludedItems'in her bir element öğesi için,

      1. Eğer SameValue(element, nextKey) true ise, o zaman

         1. *excluded*'ı `true` olarak ayarla.
    3. Eğer excluded false ise, o zaman

      1. propertyDesc = ? from.[[GetOwnProperty]](nextKey) olsun.

      2. Eğer propertyDesc undefined değilse ve propertyDesc.[[Enumerable]] true ise, o zaman

         1. *propertyValue* = ? [Get](#sec-get-o-p)(*from*, *nextKey*) olsun.
        
         2. ! [CreateDataPropertyOrThrow](#sec-createdatapropertyorthrow)(*target*, *nextKey*, *propertyValue*) işlemini gerçekleştir.
  5. unused döndür.

7.3.26 PrivateElementFind ( obj, privateName )

Soyut işlem PrivateElementFind, obj (bir Object) ve privateName (bir Private Name) argümanlarını alır ve bir PrivateElement veya empty döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj.[[PrivateElements]], pe.[[Key]]'i privateName olan bir PrivateElement pe içeriyorsa, o zaman

    1. pe döndür.
  2. empty döndür.

7.3.27 PrivateFieldAdd ( obj, privateName, value )

Soyut işlem PrivateFieldAdd, obj (bir Object), privateName (bir Private Name) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer konak bir web tarayıcısı ise, o zaman

    1. ? HostEnsureCanAddPrivateElement(obj) işlemini gerçekleştir.
  2. entry = PrivateElementFind(obj, privateName) olsun.

  3. Eğer entry empty değilse, bir TypeError kuraldışı durumu fırlat.

  4. obj.[[PrivateElements]]'e PrivateElement { [[Key]]: privateName, [[Kind]]: field, [[Value]]: value } ekle.

  5. unused döndür.

7.3.28 PrivateMethodOrAccessorAdd ( obj, method )

Soyut işlem PrivateMethodOrAccessorAdd, obj (bir Object) ve method (bir PrivateElement) argümanlarını alır ve ya unused içeren normal 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: method.[[Kind]] ya method ya da accessor'dır.

  2. Eğer konak bir web tarayıcısı ise, o zaman

    1. ? HostEnsureCanAddPrivateElement(obj) işlemini gerçekleştir.
  3. entry = PrivateElementFind(obj, method.[[Key]]) olsun.

  4. Eğer entry empty değilse, bir TypeError kuraldışı durumu fırlat.

  5. method'u obj.[[PrivateElements]]'e ekle.

  6. unused döndür.

7.3.29 HostEnsureCanAddPrivateElement ( obj )

Konak tanımlı soyut işlem HostEnsureCanAddPrivateElement, obj (bir Object) argümanını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Konak ortamlarının, belirli konak tanımlı egzotik nesnelere özel öğelerin eklenmesini engellemesine izin verir.

HostEnsureCanAddPrivateElement'ın bir gerçekleştirimi aşağıdaki gerekliliklere uymak zorundadır:

HostEnsureCanAddPrivateElement'ın varsayılan gerçekleştirimi, NormalCompletion(unused) döndürmektir.

Bu soyut işlem, yalnızca web tarayıcısı olan ECMAScript konakları tarafından çağrılır.

7.3.30 PrivateGet ( obj, privateName )

Soyut işlem PrivateGet, obj (bir Object) ve privateName (bir Private Name) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. entry = PrivateElementFind(obj, privateName) olsun.

  2. Eğer entry empty ise, bir TypeError kuraldışı durumu fırlat.

  3. Eğer entry.[[Kind]] field veya method ise, o zaman

    1. entry.[[Value]] döndür.
  4. Assert: entry.[[Kind]] accessor'dır.

  5. Eğer entry.[[Get]] undefined ise, bir TypeError kuraldışı durumu fırlat.

  6. getter = entry.[[Get]] olsun.

  7. ? Call(getter, obj) döndür.

7.3.31 PrivateSet ( obj, privateName, value )

Soyut işlem PrivateSet, obj (bir Object), privateName (bir Private Name) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. entry = PrivateElementFind(obj, privateName) olsun.

  2. Eğer entry empty ise, bir TypeError kuraldışı durumu fırlat.

  3. Eğer entry.[[Kind]] method ise, bir TypeError kuraldışı durumu fırlat.

  4. Eğer entry.[[Kind]] field ise, o zaman

    1. entry.[[Value]]value olarak ayarla.
  5. Değilse,

    1. Assert: entry.[[Kind]] accessor'dır.

    2. Eğer entry.[[Set]] undefined ise, bir TypeError kuraldışı durumu fırlat.

    3. setter = entry.[[Set]] olsun.

    4. ? Call(setter, obj, « value ») işlemini gerçekleştir.

  6. unused döndür.

7.3.32 DefineField ( receiver, fieldRecord )

Soyut işlem DefineField, receiver (bir Object) ve fieldRecord (bir ClassFieldDefinition Record) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. fieldName = fieldRecord.[[Name]] olsun.

  2. initializer = fieldRecord.[[Initializer]] olsun.

  3. Eğer initializer empty değilse, o zaman

    1. initValue = ? Call(initializer, receiver) olsun.
  4. Değilse,

    1. initValue = undefined olsun.
  5. Eğer fieldName bir Private Name ise, o zaman

    1. ? PrivateFieldAdd(receiver, fieldName, initValue) işlemini gerçekleştir.
  6. Değilse,

    1. Assert: fieldName bir özellik anahtarıdır.

    2. ? CreateDataPropertyOrThrow(receiver, fieldName, initValue) işlemini gerçekleştir.

  7. unused döndür.

7.3.33 InitializeInstanceElements ( obj, ctor )

Soyut işlem InitializeInstanceElements, obj (bir Object) ve ctor (bir ECMAScript işlev nesnesi veya yerleşik bir işlev nesnesi) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. methods = ctor.[[PrivateMethods]] olsun.

  2. methods'ın her bir PrivateElement method öğesi için,

    1. ? PrivateMethodOrAccessorAdd(obj, method) işlemini gerçekleştir.
  3. fields = ctor.[[Fields]] olsun.

  4. fields'ın her bir fieldRecord öğesi için,

    1. ? DefineField(obj, fieldRecord) işlemini gerçekleştir.
  5. unused döndür.

7.3.34 AddValueToKeyedGroup ( groups, key, value )

Soyut işlem AddValueToKeyedGroup, groups ([[Key]] (bir ECMAScript dil değeri) ve [[Elements]] (ECMAScript dil değerlerinden oluşan bir Liste) alanlarına sahip Record'lardan oluşan bir Liste), key (bir ECMAScript dil değeri) ve value (bir ECMAScript dil değeri) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. groups'un her bir { [[Key]], [[Elements]] } group Record'u için,

    1. Eğer SameValue(group.[[Key]], key) true ise, o zaman

      1. Assert: groups'un tam olarak bir öğesi bu ölçütü karşılar.

      2. value'yu group.[[Elements]]'e ekle.

      3. unused döndür.

  2. group, Record { [[Key]]: key, [[Elements]]: « value » } olsun.

  3. group'u groups'a ekle.

  4. unused döndür.

7.3.35 GroupBy ( items, callback, keyCoercion )

Soyut işlem GroupBy, items (bir ECMAScript dil değeri), callback (bir ECMAScript dil değeri) ve keyCoercion (property veya collection) argümanlarını alır ve ya [[Key]] (bir ECMAScript dil değeri) ve [[Elements]] (ECMAScript dil değerlerinden oluşan bir Liste) alanlarına sahip Record'lardan oluşan bir Liste içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? RequireObjectCoercible(items) işlemini gerçekleştir.

  2. Eğer IsCallable(callback) false ise, bir TypeError kuraldışı durumu fırlat.

  3. groups, yeni bir boş Liste olsun.

  4. iteratorRecord = ? GetIterator(items, sync) olsun.

  5. k 0 olsun.

  6. Tekrar et,

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

      1. error = ThrowCompletion(yeni oluşturulmuş bir TypeError nesnesi) olsun.

      2. ? IteratorClose(iteratorRecord, error) döndür.

    2. next = ? IteratorStepValue(iteratorRecord) olsun.

    3. Eğer next done ise, o zaman

      1. groups döndür.
    4. value = next olsun.

    5. key = Completion(Call(callback, undefined, « value, 𝔽(k) »)) olsun.

    6. IfAbruptCloseIterator(key, iteratorRecord).

    7. Eğer keyCoercion property ise, o zaman

      1. key = Completion(ToPropertyKey(key)) olarak ayarla.

      2. IfAbruptCloseIterator(key, iteratorRecord).

    8. Değilse,

      1. Assert: keyCoercion collection'dır.

      2. key = CanonicalizeKeyedCollectionKey(key) olarak ayarla.

    9. AddValueToKeyedGroup(groups, key, value) işlemini gerçekleştir.

    10. k'yi k + 1 olarak ayarla.

7.3.36 GetOptionsObject ( options )

Soyut işlem GetOptionsObject, options (bir ECMAScript dil değeri) argümanını alır ve ya bir Object içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer options undefined ise, o zaman

    1. OrdinaryObjectCreate(null) döndür.
  2. Eğer options bir Object ise, o zaman

    1. options döndür.
  3. Bir TypeError kuraldışı durumu fırlat.

7.3.37 SetterThatIgnoresPrototypeProperties ( thisValue, home, propertyKey, value )

Soyut işlem SetterThatIgnoresPrototypeProperties, thisValue (bir ECMAScript dil değeri), home (bir Object), propertyKey (bir özellik anahtarı) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer thisValue bir Object değilse, o zaman

    1. Bir TypeError kuraldışı durumu fırlat.
  2. Eğer SameValue(thisValue, home) true ise, o zaman

    1. NOTE: Burada fırlatmak, katı kip kodunda home nesnesi üzerindeki yazılamaz bir veri özelliğine atama yapmayı taklit eder.

    2. Bir TypeError kuraldışı durumu fırlat.

  3. propertyDesc = ? thisValue.[[GetOwnProperty]](propertyKey) olsun.

  4. Eğer propertyDesc undefined ise, o zaman

    1. ? CreateDataPropertyOrThrow(thisValue, propertyKey, value) işlemini gerçekleştir.
  5. Değilse,

    1. ? Set(thisValue, propertyKey, value, true) işlemini gerçekleştir.
  6. unused döndür.

7.4 Yineleyici Nesneleri Üzerindeki İşlemler

Bkz. Ortak Yineleme Arayüzleri (27.1).

7.4.1 Yineleyici Kayıtları

Bir Iterator Record, bir iterator veya async iterator ile birlikte next yöntemini kapsüllemek için kullanılan bir Record değeridir.

Iterator Record'ları, Tablo 13'te listelenen alanlara sahiptir.

Tablo 13: Iterator Record Alanları

Alan Adı Değer Anlamı
[[Iterator]] bir Object Iterator arayüzüne veya async iterator arayüzüne uyan bir nesne.
[[NextMethod]] bir ECMAScript dil değeri [[Iterator]] nesnesinin next yöntemi.
[[Done]] bir Boolean Iterator'ün tamamlanıp tamamlanmadığı veya kapatılıp kapatılmadığı.

7.4.2 GetIteratorDirect ( obj )

Soyut işlem GetIteratorDirect, obj (bir Object) argümanını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. nextMethod = ? Get(obj, "next") olsun.

  2. iteratorRecord, Iterator Record { [[Iterator]]: obj, [[NextMethod]]: nextMethod, [[Done]]: false } olsun.

  3. iteratorRecord döndür.

7.4.3 GetIteratorFromMethod ( obj, method )

Soyut işlem GetIteratorFromMethod, obj (bir ECMAScript dil değeri) ve method (bir işlev nesnesi) argümanlarını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. iterator = ? Call(method, obj) olsun.

  2. Eğer iterator bir Object değilse, bir TypeError kuraldışı durumu fırlat.

  3. ? GetIteratorDirect(iterator) döndür.

7.4.4 GetIterator ( obj, kind )

Soyut işlem GetIterator, obj (bir ECMAScript dil değeri) ve kind (sync veya async) argümanlarını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer kind async ise, o zaman

    1. method = ? GetMethod(obj, %Symbol.asyncIterator%) olsun.

    2. Eğer method undefined ise, o zaman

      1. syncMethod = ? GetMethod(obj, %Symbol.iterator%) olsun.

      2. Eğer syncMethod undefined ise, bir TypeError kuraldışı durumu fırlat.

      3. syncIteratorRecord = ? GetIteratorFromMethod(obj, syncMethod) olsun.

      4. CreateAsyncFromSyncIterator(syncIteratorRecord) döndür.

  2. Değilse,

    1. method = ? GetMethod(obj, %Symbol.iterator%) olsun.
  3. Eğer method undefined ise, bir TypeError kuraldışı durumu fırlat.

  4. ? GetIteratorFromMethod(obj, method) döndür.

7.4.5 GetIteratorFlattenable ( obj, primitiveHandling )

Soyut işlem GetIteratorFlattenable, obj (bir ECMAScript dil değeri) ve primitiveHandling (iterate-string-primitives veya reject-primitives) argümanlarını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Object değilse, o zaman

    1. Eğer primitiveHandling reject-primitives ise, bir TypeError kuraldışı durumu fırlat.

    2. Assert: primitiveHandling iterate-string-primitives'tir.

    3. Eğer obj bir String değilse, bir TypeError kuraldışı durumu fırlat.

  2. method = ? GetMethod(obj, %Symbol.iterator%) olsun.

  3. Eğer method undefined ise, o zaman

    1. iterator = obj olsun.
  4. Değilse,

    1. iterator = ? Call(method, obj) olsun.
  5. Eğer iterator bir Object değilse, bir TypeError kuraldışı durumu fırlat.

  6. ? GetIteratorDirect(iterator) döndür.

7.4.6 IteratorNext ( iteratorRecord [ , value ] )

Soyut işlem IteratorNext, iteratorRecord (bir Iterator Record) argümanını ve isteğe bağlı value (bir ECMAScript dil değeri) argümanını alır ve ya bir Object içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer value mevcut değilse, o zaman

    1. result = Completion(Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]])) olsun.
  2. Değilse,

    1. result = Completion(Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]], « value »)) olsun.
  3. Eğer result bir throw tamamlanması ise, o zaman

    1. iteratorRecord.[[Done]]'u true olarak ayarla.

    2. ? result döndür.

  4. result'ı ! result olarak ayarla.

  5. Eğer result bir Object değilse, o zaman

    1. iteratorRecord.[[Done]]'u true olarak ayarla.

    2. Bir TypeError kuraldışı durumu fırlat.

  6. result döndür.

7.4.7 IteratorComplete ( iteratorResult )

Soyut işlem IteratorComplete, iteratorResult (bir Object) argümanını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ToBoolean(? Get(iteratorResult, "done")) döndür.

7.4.8 IteratorValue ( iteratorResult )

Soyut işlem IteratorValue, iteratorResult (bir Object) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? Get(iteratorResult, "value") döndür.

7.4.9 IteratorStep ( iteratorRecord )

Soyut işlem IteratorStep, iteratorRecord (bir Iterator Record) argümanını alır ve ya bir Object veya done içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. iteratorRecord.[[Iterator]]'dan bir sonraki değeri, iteratorRecord.[[NextMethod]]'u çağırarak ister ve iterator'ün sonuna ulaştığını belirten done veya bir sonraki değer mevcutsa IteratorResult nesnesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. result = ? IteratorNext(iteratorRecord) olsun.

  2. done = Completion(IteratorComplete(result)) olsun.

  3. Eğer done bir throw tamamlanması ise, o zaman

    1. iteratorRecord.[[Done]]'u true olarak ayarla.

    2. ? done döndür.

  4. done'ı ! done olarak ayarla.

  5. Eğer done true ise, o zaman

    1. iteratorRecord.[[Done]]'u true olarak ayarla.

    2. done döndür.

  6. result döndür.

7.4.10 IteratorStepValue ( iteratorRecord )

Soyut işlem IteratorStepValue, iteratorRecord (bir Iterator Record) argümanını alır ve ya bir ECMAScript dil değeri veya done içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. iteratorRecord.[[Iterator]]'dan bir sonraki değeri, iteratorRecord.[[NextMethod]]'u çağırarak ister ve iterator'ün sonuna ulaştığını belirten done veya bir sonraki değer mevcutsa IteratorResult nesnesinden değeri döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. result = ? IteratorStep(iteratorRecord) olsun.

  2. Eğer result done ise, o zaman

    1. done döndür.
  3. value = Completion(IteratorValue(result)) olsun.

  4. Eğer value bir throw tamamlanması ise, o zaman

    1. iteratorRecord.[[Done]]'u true olarak ayarla.
  5. ? value döndür.

7.4.11 IteratorClose ( iteratorRecord, completion )

Soyut işlem IteratorClose, iteratorRecord (bir Iterator Record) ve completion (bir Completion Record) argümanlarını alır ve bir Completion Record döndürür. Bir iterator'e, tamamlanmış durumuna ulaştığında normalde gerçekleştireceği eylemleri gerçekleştirmesi gerektiğini bildirmek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: iteratorRecord.[[Iterator]] bir Object'tir.

  2. iterator = iteratorRecord.[[Iterator]] olsun.

  3. innerResult = Completion(GetMethod(iterator, "return")) olsun.

  4. Eğer innerResult bir normal tamamlanma ise, o zaman

    1. return = innerResult.[[Value]] olsun.

    2. Eğer return undefined ise, ? completion döndür.

    3. innerResult = Completion(Call(return, iterator)) olarak ayarla.

  5. Eğer completion bir throw tamamlanması ise, ? completion döndür.

  6. Eğer innerResult bir throw tamamlanması ise, ? innerResult döndür.

  7. Eğer innerResult.[[Value]] bir Object değilse, bir TypeError kuraldışı durumu fırlat.

  8. ? completion döndür.

7.4.12 IteratorCloseAll ( iterators, completion )

Soyut işlem IteratorCloseAll, iterators (Iterator Record'larından oluşan bir Liste) ve completion (bir Completion Record) argümanlarını alır ve bir Completion Record döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. iterators'ın her bir iterator öğesi için, ters Liste sırasında,

    1. completion = Completion(IteratorClose(iterator, completion)) olarak ayarla.
  2. ? completion döndür.

7.4.13 IfAbruptCloseIterator ( value, iteratorRecord )

IfAbruptCloseIterator, bir Iterator Record kullanan bir dizi algoritma adımı için bir kısayoldur. Şu biçimdeki bir algoritma adımı:

  1. IfAbruptCloseIterator(value, iteratorRecord).

şununla aynı anlama gelir:

  1. Assert: value bir Completion Record'dır.

  2. Eğer value bir ani tamamlanma ise, ? IteratorClose(iteratorRecord, value) döndür.

  3. value'yu ! value olarak ayarla.

7.4.14 IfAbruptCloseIterators ( value, iteratorRecords )

IfAbruptCloseIterators, bir Iterator Record'ları listesi kullanan bir dizi algoritma adımı için bir kısayoldur. Şu biçimdeki bir algoritma adımı:

  1. IfAbruptCloseIterators(value, iteratorRecords).

şununla aynı anlama gelir:

  1. Assert: value bir Completion Record'dır.

  2. Eğer value bir ani tamamlanma ise, ? IteratorCloseAll(iteratorRecords, value) döndür.

  3. value'yu ! value olarak ayarla.

7.4.15 AsyncIteratorClose ( iteratorRecord, completion )

Soyut işlem AsyncIteratorClose, iteratorRecord (bir Iterator Record) ve completion (bir Completion Record) argümanlarını alır ve bir Completion Record döndürür. Bir async iterator'e, tamamlanmış durumuna ulaştığında normalde gerçekleştireceği eylemleri gerçekleştirmesi gerektiğini bildirmek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: iteratorRecord.[[Iterator]] bir Object'tir.

  2. iterator = iteratorRecord.[[Iterator]] olsun.

  3. innerResult = Completion(GetMethod(iterator, "return")) olsun.

  4. Eğer innerResult bir normal tamamlanma ise, o zaman

    1. return = innerResult.[[Value]] olsun.

    2. Eğer return undefined ise, ? completion döndür.

    3. innerResult = Completion(Call(return, iterator)) olarak ayarla.

    4. Eğer innerResult bir normal tamamlanma ise, innerResult = Completion(Await(innerResult.[[Value]])) olarak ayarla.

  5. Eğer completion bir throw tamamlanması ise, ? completion döndür.

  6. Eğer innerResult bir throw tamamlanması ise, ? innerResult döndür.

  7. Eğer innerResult.[[Value]] bir Object değilse, bir TypeError kuraldışı durumu fırlat.

  8. ? completion döndür.

7.4.16 IfAbruptCloseAsyncIterator ( value, iteratorRecord )

IfAbruptCloseAsyncIterator, bir Iterator Record kullanan bir dizi algoritma adımı için bir kısayoldur. Şu biçimdeki bir algoritma adımı:

  1. IfAbruptCloseAsyncIterator(value, iteratorRecord).

şununla aynı anlama gelir:

  1. Assert: value bir Completion Record'dır.

  2. Eğer value bir ani tamamlanma ise, ? AsyncIteratorClose(iteratorRecord, value) döndür.

  3. value'yu ! value olarak ayarla.

7.4.17 CreateIteratorResultObject ( value, done )

Soyut işlem CreateIteratorResultObject, value (bir ECMAScript dil değeri) ve done (bir Boolean) argümanlarını alır ve IteratorResult arayüzüne uyan bir Object döndürür. IteratorResult arayüzüne uyan bir nesne oluşturur. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj = OrdinaryObjectCreate(%Object.prototype%) olsun.

  2. ! CreateDataPropertyOrThrow(obj, "value", value) işlemini gerçekleştir.

  3. ! CreateDataPropertyOrThrow(obj, "done", done) işlemini gerçekleştir.

  4. obj döndür.

7.4.18 CreateListIteratorRecord ( list )

Soyut işlem CreateListIteratorRecord, list (ECMAScript dil değerlerinden oluşan bir Liste) argümanını alır ve bir Iterator Record döndürür. [[NextMethod]]'u list'in ardışık öğelerini döndüren bir Iterator Record oluşturur. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. closure, list'i yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, parametresiz yeni bir Abstract Closure olsun:

    1. list'in her bir value öğesi için,

      1. ? GeneratorYield(CreateIteratorResultObject(value, false)) işlemini gerçekleştir.
    2. NormalCompletion(undefined) döndür.

  2. iterator = CreateIteratorFromClosure(closure, empty, %Iterator.prototype%) olsun.

  3. Iterator Record { [[Iterator]]: iterator, [[NextMethod]]: %GeneratorPrototype.next%, [[Done]]: false } döndür.

7.4.19 IteratorToList ( iteratorRecord )

Soyut işlem IteratorToList, iteratorRecord (bir Iterator Record) argümanını alır ve ya ECMAScript dil değerlerinden oluşan bir Liste içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. values, yeni bir boş Liste olsun.

  2. Tekrar et,

    1. next = ? IteratorStepValue(iteratorRecord) olsun.

    2. Eğer next done ise, o zaman

      1. values döndür.
    3. next'i values'a ekle.