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

ECMAScript Dili: İfadeler

13.1 Tanımlayıcılar

Sözdizimi

IdentifierReference IdentifierReference[Yield, Await] : Identifier [~Yield] yield [~Await] await

BindingIdentifier BindingIdentifier[Yield, Await] : Identifier yield await

LabelIdentifier LabelIdentifier[Yield, Await] : Identifier [~Yield] yield [~Await] await

Identifier Identifier : IdentifierName but not ReservedWord

13.1.1 Statik Anlambilim: Erken Hatalar

BindingIdentifier BindingIdentifier : Identifier

IdentifierReference IdentifierReference : yield

BindingIdentifier BindingIdentifier : yield

LabelIdentifier LabelIdentifier : yield

  • Eğer IsStrict(bu üretim) true ise, bu bir Sözdizimi Hatasıdır.

IdentifierReference IdentifierReference : await

BindingIdentifier BindingIdentifier : await

LabelIdentifier LabelIdentifier : await

BindingIdentifier BindingIdentifier[Yield, Await] : yield

  • Eğer bu üretim bir [Yield] parametresine sahipse, bu bir Sözdizimi Hatasıdır.

BindingIdentifier BindingIdentifier[Yield, Await] : await

  • Eğer bu üretim bir [Await] parametresine sahipse, bu bir Sözdizimi Hatasıdır.

IdentifierReference IdentifierReference[Yield, Await] : Identifier

BindingIdentifier BindingIdentifier[Yield, Await] : Identifier

LabelIdentifier LabelIdentifier[Yield, Await] : Identifier

  • Eğer bu üretim bir [Yield] parametresine sahipse ve Identifier'ın StringValue değeri "yield" ise, bu bir Sözdizimi Hatasıdır.

  • Eğer bu üretim bir [Await] parametresine sahipse ve Identifier'ın StringValue değeri "await" ise, bu bir Sözdizimi Hatasıdır.

Identifier Identifier : IdentifierName but not ReservedWord

13.1.2 Statik Anlambilim: StringValue

Sözdizimi yönelimli işlem StringValue hiçbir argüman almaz ve bir String döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

IdentifierName IdentifierName :: IdentifierStart IdentifierName IdentifierPart

  1. idTextUnescaped, IdentifierName'in IdentifierCodePoints değeri olsun.

  2. CodePointsToString(idTextUnescaped) döndür.

IdentifierReference IdentifierReference : yield

BindingIdentifier BindingIdentifier : yield

LabelIdentifier LabelIdentifier : yield

  1. "yield" döndür.

IdentifierReference IdentifierReference : await

BindingIdentifier BindingIdentifier : await

LabelIdentifier LabelIdentifier : await

  1. "await" döndür.

Identifier Identifier : IdentifierName but not ReservedWord

  1. IdentifierName'in StringValue değerini döndür.

PrivateIdentifier PrivateIdentifier :: # IdentifierName

  1. 0x0023 (NUMBER SIGN) ile IdentifierName'in StringValue değerinin dizgi birleştirmesini döndür.

ModuleExportName ModuleExportName : StringLiteral

  1. StringLiteral'ın SV değerini döndür.

13.1.3 Çalışma Zamanı Anlambilimi: Değerlendirme

IdentifierReference IdentifierReference : Identifier

  1. ? ResolveBinding(Identifier'ın StringValue değeri) döndür.

IdentifierReference IdentifierReference : yield

  1. ? ResolveBinding("yield") döndür.

IdentifierReference IdentifierReference : await

  1. ? ResolveBinding("await") döndür.

13.2 Birincil İfade

Sözdizimi

PrimaryExpression PrimaryExpression[Yield, Await] : this IdentifierReference[?Yield, ?Await] Literal ArrayLiteral[?Yield, ?Await] ObjectLiteral[?Yield, ?Await] FunctionExpression ClassExpression[?Yield, ?Await] GeneratorExpression AsyncFunctionExpression AsyncGeneratorExpression RegularExpressionLiteral TemplateLiteral[?Yield, ?Await, ~Tagged] CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]

CoverParenthesizedExpressionAndArrowParameterList CoverParenthesizedExpressionAndArrowParameterList[Yield, Await] : ( Expression[+In, ?Yield, ?Await] ) ( Expression[+In, ?Yield, ?Await] , ) ( ) ( ... BindingIdentifier[?Yield, ?Await] ) ( ... BindingPattern[?Yield, ?Await] ) ( Expression[+In, ?Yield, ?Await] , ... BindingIdentifier[?Yield, ?Await] ) ( Expression[+In, ?Yield, ?Await] , ... BindingPattern[?Yield, ?Await] )

Tamamlayıcı Sözdizimi

Şu üretimin bir örneği işlenirken

PrimaryExpression PrimaryExpression[Yield, Await] : CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]

CoverParenthesizedExpressionAndArrowParameterList yorumu, aşağıdaki dilbilgisi kullanılarak iyileştirilir:

ParenthesizedExpression ParenthesizedExpression[Yield, Await] : ( Expression[+In, ?Yield, ?Await] )

13.2.1 this Anahtar Sözcüğü

13.2.1.1 Çalışma Zamanı Anlambilimi: Değerlendirme

PrimaryExpression PrimaryExpression : this

  1. ? ResolveThisBinding() döndür.

13.2.2 Tanımlayıcı Başvurusu

IdentifierReference için bkz. 13.1.

13.2.3 Değişmezler

Sözdizimi

Literal Literal : NullLiteral BooleanLiteral NumericLiteral StringLiteral

13.2.3.1 Çalışma Zamanı Anlambilimi: Değerlendirme

Literal Literal : NullLiteral

  1. null döndür.

Literal Literal : BooleanLiteral

  1. Eğer BooleanLiteral belirteci false ise, false döndür.

  2. Eğer BooleanLiteral belirteci true ise, true döndür.

Literal Literal : NumericLiteral

  1. NumericLiteral'ın 12.9.3'te tanımlanan NumericValue değerini döndür.

Literal Literal : StringLiteral

  1. StringLiteral'ın 12.9.4.2'de tanımlanan SV değerini döndür.

13.2.4 Dizi İlklendiricisi

Dizi öğeleri, öğe listesinin başında, ortasında veya sonunda atlanabilir. Öğe listesindeki bir virgülden önce bir AssignmentExpression gelmediğinde (yani, başlangıçta veya başka bir virgülden sonraki bir virgül), eksik dizi öğesi Dizinin uzunluğuna katkıda bulunur ve sonraki öğelerin indisini artırır. Atlanmış dizi öğeleri tanımlanmaz. Bir öğe bir dizinin sonunda atlanırsa, bu öğe Dizinin uzunluğuna katkıda bulunmaz.

Sözdizimi

ArrayLiteral ArrayLiteral[Yield, Await] : [ Elisionopt ] [ ElementList[?Yield, ?Await] ] [ ElementList[?Yield, ?Await] , Elisionopt ]

ElementList ElementList[Yield, Await] : Elisionopt AssignmentExpression[+In, ?Yield, ?Await] Elisionopt SpreadElement[?Yield, ?Await] ElementList[?Yield, ?Await] , Elisionopt AssignmentExpression[+In, ?Yield, ?Await] ElementList[?Yield, ?Await] , Elisionopt SpreadElement[?Yield, ?Await]

Elision Elision : , Elision ,

SpreadElement SpreadElement[Yield, Await] : ... AssignmentExpression[+In, ?Yield, ?Await]

13.2.4.1 Çalışma Zamanı Anlambilimi: ArrayAccumulation

Sözdizimi yönelimli işlem ArrayAccumulation, array (bir Array) ve nextIndex (bir tamsayı) argümanlarını alır ve ya bir tamsayı içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

Elision Elision : ,

  1. length = nextIndex + 1 olsun.

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

  3. NOTE: Yukarıdaki adım, length 232 - 1'i aşarsa fırlatır.

  4. length döndür.

Elision Elision : Elision ,

  1. ? Elision'ın array ve (nextIndex + 1) argümanlarıyla ArrayAccumulation değerini döndür.

ElementList ElementList : Elisionopt AssignmentExpression

  1. Eğer Elision mevcutsa, o zaman

    1. nextIndex = ? Elision'ın array ve nextIndex argümanlarıyla ArrayAccumulation değeri olarak ayarla.
  2. initResult = ? AssignmentExpression'in Evaluation değeri olsun.

  3. initValue = ? GetValue(initResult) olsun.

  4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), initValue) işlemini gerçekleştir.

  5. nextIndex + 1 döndür.

ElementList ElementList : Elisionopt SpreadElement

  1. Eğer Elision mevcutsa, o zaman

    1. nextIndex = ? Elision'ın array ve nextIndex argümanlarıyla ArrayAccumulation değeri olarak ayarla.
  2. ? SpreadElement'in array ve nextIndex argümanlarıyla ArrayAccumulation değerini döndür.

ElementList ElementList : ElementList , Elisionopt AssignmentExpression

  1. nextIndex = ? türetilen ElementList'in array ve nextIndex argümanlarıyla ArrayAccumulation değeri olarak ayarla.

  2. Eğer Elision mevcutsa, o zaman

    1. nextIndex = ? Elision'ın array ve nextIndex argümanlarıyla ArrayAccumulation değeri olarak ayarla.
  3. initResult = ? AssignmentExpression'in Evaluation değeri olsun.

  4. initValue = ? GetValue(initResult) olsun.

  5. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(nextIndex)), initValue) işlemini gerçekleştir.

  6. nextIndex + 1 döndür.

ElementList ElementList : ElementList , Elisionopt SpreadElement

  1. nextIndex = ? türetilen ElementList'in array ve nextIndex argümanlarıyla ArrayAccumulation değeri olarak ayarla.

  2. Eğer Elision mevcutsa, o zaman

    1. nextIndex = ? Elision'ın array ve nextIndex argümanlarıyla ArrayAccumulation değeri olarak ayarla.
  3. ? SpreadElement'in array ve nextIndex argümanlarıyla ArrayAccumulation değerini döndür.

SpreadElement SpreadElement : ... AssignmentExpression

  1. spreadRef = ? AssignmentExpression'in Evaluation değeri olsun.

  2. spreadObj = ? GetValue(spreadRef) olsun.

  3. iteratorRecord = ? GetIterator(spreadObj, sync) olsun.

  4. Tekrar et,

    1. next = ? IteratorStepValue(iteratorRecord) olsun.

    2. Eğer next done ise, nextIndex döndür.

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

    4. nextIndex = nextIndex + 1 olarak ayarla.

13.2.4.2 Çalışma Zamanı Anlambilimi: Değerlendirme

ArrayLiteral ArrayLiteral : [ Elisionopt ]

  1. array = ! ArrayCreate(0) olsun.

  2. Eğer Elision mevcutsa, o zaman

    1. ? Elision'ın array ve 0 argümanlarıyla ArrayAccumulation işlemini gerçekleştir.
  3. array döndür.

ArrayLiteral ArrayLiteral : [ ElementList ]

  1. array = ! ArrayCreate(0) olsun.

  2. ? ElementList'in array ve 0 argümanlarıyla ArrayAccumulation işlemini gerçekleştir.

  3. array döndür.

ArrayLiteral ArrayLiteral : [ ElementList , Elisionopt ]

  1. array = ! ArrayCreate(0) olsun.

  2. nextIndex = ? ElementList'in array ve 0 argümanlarıyla ArrayAccumulation değeri olsun.

  3. Eğer Elision mevcutsa, o zaman

    1. ? Elision'ın array ve nextIndex argümanlarıyla ArrayAccumulation işlemini gerçekleştir.
  4. array döndür.

13.2.5 Nesne İlklendiricisi

Sözdizimi

ObjectLiteral ObjectLiteral[Yield, Await] : { } { PropertyDefinitionList[?Yield, ?Await] } { PropertyDefinitionList[?Yield, ?Await] , }

PropertyDefinitionList PropertyDefinitionList[Yield, Await] : PropertyDefinition[?Yield, ?Await] PropertyDefinitionList[?Yield, ?Await] , PropertyDefinition[?Yield, ?Await]

PropertyDefinition PropertyDefinition[Yield, Await] : IdentifierReference[?Yield, ?Await] CoverInitializedName[?Yield, ?Await] PropertyName[?Yield, ?Await] : AssignmentExpression[+In, ?Yield, ?Await] MethodDefinition[?Yield, ?Await] ... AssignmentExpression[+In, ?Yield, ?Await]

PropertyName PropertyName[Yield, Await] : LiteralPropertyName ComputedPropertyName[?Yield, ?Await]

LiteralPropertyName LiteralPropertyName : IdentifierName StringLiteral NumericLiteral

ComputedPropertyName ComputedPropertyName[Yield, Await] : [ AssignmentExpression[+In, ?Yield, ?Await] ]

CoverInitializedName CoverInitializedName[Yield, Await] : IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]

Initializer Initializer[In, Yield, Await] : = AssignmentExpression[?In, ?Yield, ?Await]

13.2.5.1 Statik Anlambilim: Erken Hatalar

PropertyDefinition PropertyDefinition : MethodDefinition

Gerçek bir nesne ilklendiricisini tanımlamanın yanı sıra, ObjectLiteral üretimleri aynı zamanda ObjectAssignmentPattern için bir örtü dilbilgisi olarak kullanılır ve bir CoverParenthesizedExpressionAndArrowParameterList'in parçası olarak tanınabilir. ObjectLiteral, ObjectAssignmentPattern'in gerekli olduğu bir bağlamda göründüğünde aşağıdaki Erken Hata kuralları uygulanmaz. Ayrıca, başlangıçta bir CoverParenthesizedExpressionAndArrowParameterList veya CoverCallExpressionAndAsyncArrowHead ayrıştırılırken uygulanmazlar.

PropertyDefinition PropertyDefinition : CoverInitializedName

  • Herhangi bir kaynak metin bu üretim tarafından eşleşiyorsa, bu bir Sözdizimi Hatasıdır.

ObjectLiteral ObjectLiteral : { PropertyDefinitionList } { PropertyDefinitionList , }

13.2.5.2 Statik Anlambilim: IsComputedPropertyKey

Sözdizimi yönelimli işlem IsComputedPropertyKey hiçbir argüman almaz ve bir Boolean döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

PropertyName PropertyName : LiteralPropertyName

  1. false döndür.

PropertyName PropertyName : ComputedPropertyName

  1. true döndür.

13.2.5.3 Statik Anlambilim: PropertyDefinitionNodes

Sözdizimi yönelimli işlem PropertyDefinitionNodes hiçbir argüman almaz ve Parse Node'lardan oluşan bir Liste döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

ObjectLiteral ObjectLiteral : { }

  1. Yeni bir boş Liste döndür.

PropertyDefinitionList PropertyDefinitionList : PropertyDefinition

  1. « PropertyDefinition » döndür.

PropertyDefinitionList PropertyDefinitionList : PropertyDefinitionList , PropertyDefinition

  1. head, türetilen PropertyDefinitionList'in PropertyDefinitionNodes değeri olsun.

  2. head ile « PropertyDefinition »'nin liste birleştirmesini döndür.

13.2.5.4 Statik Anlambilim: PropertyNameList

Sözdizimi yönelimli işlem PropertyNameList hiçbir argüman almaz ve String'lerden oluşan bir Liste döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

PropertyDefinitionList PropertyDefinitionList : PropertyDefinition

  1. propertyName, PropertyDefinition'ın PropName değeri olsun.

  2. Eğer propertyName empty ise, yeni bir boş Liste döndür.

  3. « propertyName » döndür.

PropertyDefinitionList PropertyDefinitionList : PropertyDefinitionList , PropertyDefinition

  1. list, PropertyDefinitionList'in PropertyNameList değeri olsun.

  2. propertyName, PropertyDefinition'ın PropName değeri olsun.

  3. Eğer propertyName empty ise, list döndür.

  4. list ile « propertyName »'nin liste birleştirmesini döndür.

13.2.5.5 Çalışma Zamanı Anlambilimi: Değerlendirme

ObjectLiteral ObjectLiteral : { }

  1. OrdinaryObjectCreate(%Object.prototype%) döndür.

ObjectLiteral ObjectLiteral : { PropertyDefinitionList } { PropertyDefinitionList , }

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

  2. ? PropertyDefinitionList'in obj argümanıyla PropertyDefinitionEvaluation işlemini gerçekleştir.

  3. obj döndür.

LiteralPropertyName LiteralPropertyName : IdentifierName

  1. IdentifierName'in StringValue değerini döndür.

LiteralPropertyName LiteralPropertyName : StringLiteral

  1. StringLiteral'ın SV değerini döndür.

LiteralPropertyName LiteralPropertyName : NumericLiteral

  1. number, NumericLiteral'ın NumericValue değeri olsun.

  2. ! ToString(number) döndür.

ComputedPropertyName ComputedPropertyName : [ AssignmentExpression ]

  1. exprValue = ? AssignmentExpression'in Evaluation değeri olsun.

  2. propertyName = ? GetValue(exprValue) olsun.

  3. ? ToPropertyKey(propertyName) döndür.

13.2.5.6 Çalışma Zamanı Anlambilimi: PropertyDefinitionEvaluation

Sözdizimi yönelimli işlem PropertyDefinitionEvaluation, obj (bir Object) argümanını alır ve ya unused içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

PropertyDefinitionList PropertyDefinitionList : PropertyDefinitionList , PropertyDefinition

  1. ? PropertyDefinitionList'in obj argümanıyla PropertyDefinitionEvaluation işlemini gerçekleştir.

  2. ? PropertyDefinition'ın obj argümanıyla PropertyDefinitionEvaluation işlemini gerçekleştir.

  3. unused döndür.

PropertyDefinition PropertyDefinition : ... AssignmentExpression

  1. exprValue = ? AssignmentExpression'in Evaluation değeri olsun.

  2. fromValue = ? GetValue(exprValue) olsun.

  3. excludedNames = yeni bir boş Liste olsun.

  4. ? CopyDataProperties(obj, fromValue, excludedNames) işlemini gerçekleştir.

  5. unused döndür.

PropertyDefinition PropertyDefinition : IdentifierReference

  1. propertyName, IdentifierReference'ın StringValue değeri olsun.

  2. exprValue = ? IdentifierReference'ın Evaluation değeri olsun.

  3. propertyValue = ? GetValue(exprValue) olsun.

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

  5. ! CreateDataPropertyOrThrow(obj, propertyName, propertyValue) işlemini gerçekleştir.

  6. unused döndür.

PropertyDefinition PropertyDefinition : PropertyName : AssignmentExpression

  1. propertyKey = ? PropertyName'in Evaluation değeri olsun.

  2. Eğer bu PropertyDefinition, ParseJSON için değerlendirilmekte olan bir Script içinde yer alıyorsa (bkz. ParseJSON'in 6 adımı), o zaman

    1. isProtoSetter = false olsun.
  3. Değilse, eğer propertyKey "__proto__" ise ve PropertyName'in IsComputedPropertyKey değeri false ise, o zaman

    1. isProtoSetter = true olsun.
  4. Değilse,

    1. isProtoSetter = false olsun.
  5. Eğer IsAnonymousFunctionDefinition(AssignmentExpression) true ise ve isProtoSetter false ise, o zaman

    1. propertyValue = ? AssignmentExpression'in propertyKey argümanıyla NamedEvaluation değeri olsun.
  6. Değilse,

    1. exprValueRef = ? AssignmentExpression'in Evaluation değeri olsun.

    2. propertyValue = ? GetValue(exprValueRef) olsun.

  7. Eğer isProtoSetter true ise, o zaman

    1. Eğer propertyValue bir Object ise veya propertyValue null ise, o zaman

      1. ! obj.[[SetPrototypeOf]](propertyValue) işlemini gerçekleştir.
    2. unused döndür.

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

  9. ! CreateDataPropertyOrThrow(obj, propertyKey, propertyValue) işlemini gerçekleştir.

  10. unused döndür.

PropertyDefinition PropertyDefinition : MethodDefinition

  1. ? MethodDefinition'ın obj ve true argümanlarıyla MethodDefinitionEvaluation işlemini gerçekleştir.

  2. unused döndür.

13.2.6 İşlev Tanımlayan İfadeler

PrimaryExpression PrimaryExpression : FunctionExpression

için bkz. 15.2.

PrimaryExpression PrimaryExpression : GeneratorExpression

için bkz. 15.5.

PrimaryExpression PrimaryExpression : ClassExpression

için bkz. 15.7.

PrimaryExpression PrimaryExpression : AsyncFunctionExpression

için bkz. 15.8.

PrimaryExpression PrimaryExpression : AsyncGeneratorExpression

için bkz. 15.6.

13.2.7 Düzenli İfade Değişmezleri

Sözdizimi

Bkz. 12.9.5.

13.2.7.1 Statik Anlambilim: Erken Hatalar

PrimaryExpression PrimaryExpression : RegularExpressionLiteral

13.2.7.2 Statik Anlambilim: IsValidRegularExpressionLiteral ( literal )

Soyut işlem IsValidRegularExpressionLiteral, literal (bir RegularExpressionLiteral Parse Node) argümanını alır ve bir Boolean döndürür. Argümanının geçerli bir düzenli ifade değişmezi olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. flags, literal'ın FlagText değeri olsun.

  2. Eğer flags; d, g, i, m, s, u, v veya y dışında herhangi bir kod noktası içeriyorsa, false döndür.

  3. Eğer flags herhangi bir kod noktasını birden fazla kez içeriyorsa, false döndür.

  4. Eğer flags u içeriyorsa, u = true olsun; değilse u = false olsun.

  5. Eğer flags v içeriyorsa, v = true olsun; değilse v = false olsun.

  6. patternText, literal'ın BodyText değeri olsun.

  7. Eğer u false ve v false ise, o zaman

    1. stringValue = CodePointsToString(patternText) olsun.

    2. patternText'i, stringValue'nun 16 bitlik öğelerinin her birini bir Unicode BMP kod noktası olarak yorumlamaktan elde edilen kod noktaları dizisi olarak ayarla. UTF-16 çözümlemesi öğelere uygulanmaz.

  8. parseResult = ParsePattern(patternText, u, v) olsun.

  9. Eğer parseResult bir Parse Node ise, true döndür.

  10. false döndür.

13.2.7.3 Çalışma Zamanı Anlambilimi: Değerlendirme

PrimaryExpression PrimaryExpression : RegularExpressionLiteral

  1. pattern = CodePointsToString(RegularExpressionLiteral'ın BodyText değeri) olsun.

  2. flags = CodePointsToString(RegularExpressionLiteral'ın FlagText değeri) olsun.

  3. ! RegExpCreate(pattern, flags) döndür.

13.2.8 Şablon Değişmezleri

Sözdizimi

TemplateLiteral TemplateLiteral[Yield, Await, Tagged] : NoSubstitutionTemplate SubstitutionTemplate[?Yield, ?Await, ?Tagged]

SubstitutionTemplate SubstitutionTemplate[Yield, Await, Tagged] : TemplateHead Expression[+In, ?Yield, ?Await] TemplateSpans[?Yield, ?Await, ?Tagged]

TemplateSpans TemplateSpans[Yield, Await, Tagged] : TemplateTail TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateTail

TemplateMiddleList TemplateMiddleList[Yield, Await, Tagged] : TemplateMiddle Expression[+In, ?Yield, ?Await] TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateMiddle Expression[+In, ?Yield, ?Await]

13.2.8.1 Statik Anlambilim: Erken Hatalar

TemplateLiteral TemplateLiteral[Yield, Await, Tagged] : NoSubstitutionTemplate

TemplateLiteral TemplateLiteral[Yield, Await, Tagged] : SubstitutionTemplate[?Yield, ?Await, ?Tagged]

  • Eğer TemplateLiteral'ın false argümanıyla TemplateStrings değerindeki öğe sayısı 232'den büyük veya eşitse, bu bir Sözdizimi Hatasıdır.

SubstitutionTemplate SubstitutionTemplate[Yield, Await, Tagged] : TemplateHead Expression[+In, ?Yield, ?Await] TemplateSpans[?Yield, ?Await, ?Tagged]

TemplateSpans TemplateSpans[Yield, Await, Tagged] : TemplateTail

TemplateMiddleList TemplateMiddleList[Yield, Await, Tagged] : TemplateMiddle Expression[+In, ?Yield, ?Await] TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateMiddle Expression[+In, ?Yield, ?Await]

13.2.8.2 Statik Anlambilim: TemplateStrings

Sözdizimi yönelimli işlem TemplateStrings, raw (bir Boolean) argümanını alır ve ya String ya da undefined'lardan oluşan bir Liste döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

TemplateLiteral TemplateLiteral : NoSubstitutionTemplate

  1. « TemplateString(NoSubstitutionTemplate, raw) » döndür.

SubstitutionTemplate SubstitutionTemplate : TemplateHead Expression TemplateSpans

  1. head = « TemplateString(TemplateHead, raw) » olsun.

  2. tail, TemplateSpans'ın raw argümanıyla TemplateStrings değeri olsun.

  3. head ile tail'in liste birleştirmesini döndür.

TemplateSpans TemplateSpans : TemplateTail

  1. « TemplateString(TemplateTail, raw) » döndür.

TemplateSpans TemplateSpans : TemplateMiddleList TemplateTail

  1. middle, TemplateMiddleList'in raw argümanıyla TemplateStrings değeri olsun.

  2. tail = « TemplateString(TemplateTail, raw) » olsun.

  3. middle ile tail'in liste birleştirmesini döndür.

TemplateMiddleList TemplateMiddleList : TemplateMiddle Expression

  1. « TemplateString(TemplateMiddle, raw) » döndür.

TemplateMiddleList TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression

  1. front, TemplateMiddleList'in raw argümanıyla TemplateStrings değeri olsun.

  2. last = « TemplateString(TemplateMiddle, raw) » olsun.

  3. front ile last'in liste birleştirmesini döndür.

13.2.8.3 Statik Anlambilim: TemplateString ( templateToken, raw )

Soyut işlem TemplateString, templateToken (bir NoSubstitutionTemplate Parse Node, bir TemplateHead Parse Node, bir TemplateMiddle Parse Node veya bir TemplateTail Parse Node) ve raw (bir Boolean) argümanlarını alır ve bir String veya undefined döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer raw true ise, o zaman

    1. string, templateToken'ın TRV değeri olsun.
  2. Değilse,

    1. string, templateToken'ın TV değeri olsun.
  3. string döndür.

13.2.8.4 GetTemplateObject ( templateLiteral )

Soyut işlem GetTemplateObject, templateLiteral (bir Parse Node) argümanını alır ve bir Array döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. realm = geçerli Realm Record olsun.

  2. templateRegistry = realm.[[TemplateMap]] olsun.

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

    1. Eğer element.[[Site]], templateLiteral ile aynı Parse Node ise, o zaman

      1. element.[[Array]] döndür.
  4. rawStrings, templateLiteral'ın true argümanıyla TemplateStrings değeri olsun.

  5. Assert: rawStrings, String'lerden oluşan bir Listedir.

  6. cookedStrings, templateLiteral'ın false argümanıyla TemplateStrings değeri olsun.

  7. count, cookedStrings Listesindeki öğe sayısı olsun.

  8. Assert: count ≤ 232 - 1.

  9. template = ! ArrayCreate(count) olsun.

  10. rawObj = ! ArrayCreate(count) olsun.

  11. index = 0 olsun.

  12. index < count olduğu sürece tekrar et,

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

    2. cookedValue = cookedStrings[index] olsun.

    3. ! DefinePropertyOrThrow(template, propertyKey, PropertyDescriptor { [[Value]]: cookedValue, [[Writable]]: false, [[Enumerable]]: true, [[Configurable]]: false }) işlemini gerçekleştir.

    4. rawValue = String değeri rawStrings[index] olsun.

    5. ! DefinePropertyOrThrow(rawObj, propertyKey, PropertyDescriptor { [[Value]]: rawValue, [[Writable]]: false, [[Enumerable]]: true, [[Configurable]]: false }) işlemini gerçekleştir.

    6. index = index + 1 olarak ayarla.

  13. ! SetIntegrityLevel(rawObj, frozen) işlemini gerçekleştir.

  14. ! DefinePropertyOrThrow(template, "raw", PropertyDescriptor { [[Value]]: rawObj, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  15. ! SetIntegrityLevel(template, frozen) işlemini gerçekleştir.

  16. Record { [[Site]]: templateLiteral, [[Array]]: template }'ı realm.[[TemplateMap]]'e ekle.

  17. template döndür.

13.2.8.5 Çalışma Zamanı Anlambilimi: SubstitutionEvaluation

Sözdizimi yönelimli işlem SubstitutionEvaluation hiçbir argüman almaz ve ya ECMAScript dil değerlerinden oluşan bir Liste içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

TemplateSpans TemplateSpans : TemplateTail

  1. Yeni bir boş Liste döndür.

TemplateSpans TemplateSpans : TemplateMiddleList TemplateTail

  1. ? TemplateMiddleList'in SubstitutionEvaluation değerini döndür.

TemplateMiddleList TemplateMiddleList : TemplateMiddle Expression

  1. subRef = ? Expression'in Evaluation değeri olsun.

  2. sub = ? GetValue(subRef) olsun.

  3. « sub » döndür.

TemplateMiddleList TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression

  1. preceding = ? TemplateMiddleList'in SubstitutionEvaluation değeri olsun.

  2. nextRef = ? Expression'in Evaluation değeri olsun.

  3. next = ? GetValue(nextRef) olsun.

  4. preceding ile « next »'nin liste birleştirmesini döndür.

13.2.8.6 Çalışma Zamanı Anlambilimi: Değerlendirme

TemplateLiteral TemplateLiteral : NoSubstitutionTemplate

  1. NoSubstitutionTemplate'ın 12.9.6'da tanımlanan TV değerini döndür.

SubstitutionTemplate SubstitutionTemplate : TemplateHead Expression TemplateSpans

  1. head, TemplateHead'in 12.9.6'da tanımlanan TV değeri olsun.

  2. subRef = ? Expression'in Evaluation değeri olsun.

  3. sub = ? GetValue(subRef) olsun.

  4. middle = ? ToString(sub) olsun.

  5. tail = ? TemplateSpans'ın Evaluation değeri olsun.

  6. head, middle ve tail'in dizgi birleştirmesini döndür.

TemplateSpans TemplateSpans : TemplateTail

  1. TemplateTail'in 12.9.6'da tanımlanan TV değerini döndür.

TemplateSpans TemplateSpans : TemplateMiddleList TemplateTail

  1. head = ? TemplateMiddleList'in Evaluation değeri olsun.

  2. tail, TemplateTail'in 12.9.6'da tanımlanan TV değeri olsun.

  3. head ile tail'in dizgi birleştirmesini döndür.

TemplateMiddleList TemplateMiddleList : TemplateMiddle Expression

  1. head, TemplateMiddle'in 12.9.6'da tanımlanan TV değeri olsun.

  2. subRef = ? Expression'in Evaluation değeri olsun.

  3. sub = ? GetValue(subRef) olsun.

  4. middle = ? ToString(sub) olsun.

  5. head ile middle'ın dizgi birleştirmesini döndür.

TemplateMiddleList TemplateMiddleList : TemplateMiddleList TemplateMiddle Expression

  1. rest = ? TemplateMiddleList'in Evaluation değeri olsun.

  2. middle, TemplateMiddle'in 12.9.6'da tanımlanan TV değeri olsun.

  3. subRef = ? Expression'in Evaluation değeri olsun.

  4. sub = ? GetValue(subRef) olsun.

  5. last = ? ToString(sub) olsun.

  6. rest, middle ve last'in dizgi birleştirmesini döndür.

13.2.9 Gruplama İşleci

13.2.9.1 Statik Anlambilim: Erken Hatalar

PrimaryExpression PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList

13.2.9.2 Çalışma Zamanı Anlambilimi: Değerlendirme

PrimaryExpression PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList

  1. expr, CoverParenthesizedExpressionAndArrowParameterList tarafından kapsanan ParenthesizedExpression olsun.

  2. ? expr'in Evaluation değerini döndür.

ParenthesizedExpression ParenthesizedExpression : ( Expression )

  1. ? Expression'in Evaluation değerini döndür. Bu, Reference türünde olabilir.

13.3 Sol Taraf İfadeleri

Sözdizimi

MemberExpression MemberExpression[Yield, Await] : PrimaryExpression[?Yield, ?Await] MemberExpression[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ] MemberExpression[?Yield, ?Await] . IdentifierName MemberExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged] SuperProperty[?Yield, ?Await] MetaProperty new MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await] MemberExpression[?Yield, ?Await] . PrivateIdentifier

SuperProperty SuperProperty[Yield, Await] : super [ Expression[+In, ?Yield, ?Await] ] super . IdentifierName

MetaProperty MetaProperty : NewTarget ImportMeta

NewTarget NewTarget : new . target

ImportMeta ImportMeta : import . meta

NewExpression NewExpression[Yield, Await] : MemberExpression[?Yield, ?Await] new NewExpression[?Yield, ?Await]

CallExpression CallExpression[Yield, Await] : CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] SuperCall[?Yield, ?Await] ImportCall[?Yield, ?Await] CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await] CallExpression[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ] CallExpression[?Yield, ?Await] . IdentifierName CallExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged] CallExpression[?Yield, ?Await] . PrivateIdentifier

SuperCall SuperCall[Yield, Await] : super Arguments[?Yield, ?Await]

ImportCall ImportCall[Yield, Await] : import ( AssignmentExpression[+In, ?Yield, ?Await] ,opt ) import ( AssignmentExpression[+In, ?Yield, ?Await] , AssignmentExpression[+In, ?Yield, ?Await] ,opt )

Arguments Arguments[Yield, Await] : ( ) ( ArgumentList[?Yield, ?Await] ) ( ArgumentList[?Yield, ?Await] , )

ArgumentList ArgumentList[Yield, Await] : AssignmentExpression[+In, ?Yield, ?Await] ... AssignmentExpression[+In, ?Yield, ?Await] ArgumentList[?Yield, ?Await] , AssignmentExpression[+In, ?Yield, ?Await] ArgumentList[?Yield, ?Await] , ... AssignmentExpression[+In, ?Yield, ?Await]

OptionalExpression OptionalExpression[Yield, Await] : MemberExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await] CallExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await] OptionalExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await]

OptionalChain OptionalChain[Yield, Await] : ?. Arguments[?Yield, ?Await] ?. [ Expression[+In, ?Yield, ?Await] ] ?. IdentifierName ?. TemplateLiteral[?Yield, ?Await, +Tagged] ?. PrivateIdentifier OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await] OptionalChain[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ] OptionalChain[?Yield, ?Await] . IdentifierName OptionalChain[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged] OptionalChain[?Yield, ?Await] . PrivateIdentifier

LeftHandSideExpression LeftHandSideExpression[Yield, Await] : NewExpression[?Yield, ?Await] CallExpression[?Yield, ?Await] OptionalExpression[?Yield, ?Await]

Tamamlayıcı Sözdizimi

Şu üretimin bir örneği işlenirken

CallExpression CallExpression : CoverCallExpressionAndAsyncArrowHead

CoverCallExpressionAndAsyncArrowHead yorumu, aşağıdaki dilbilgisi kullanılarak iyileştirilir:

CallMemberExpression CallMemberExpression[Yield, Await] : MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]

13.3.1 Statik Anlambilim

13.3.1.1 Statik Anlambilim: Erken Hatalar

OptionalChain OptionalChain : ?. TemplateLiteral OptionalChain TemplateLiteral

  • Herhangi bir kaynak metin bu üretim tarafından eşleşiyorsa, bu bir Sözdizimi Hatasıdır.

ImportMeta ImportMeta : import . meta

13.3.2 Özellik Erişimcileri

13.3.2.1 Çalışma Zamanı Anlambilimi: Değerlendirme

MemberExpression MemberExpression : MemberExpression [ Expression ]

  1. baseRef = ? MemberExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. strict = IsStrict(bu MemberExpression) olsun.

  4. ? EvaluatePropertyAccessWithExpressionKey(baseValue, Expression, strict) döndür.

MemberExpression MemberExpression : MemberExpression . IdentifierName

  1. baseRef = ? MemberExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. strict = IsStrict(bu MemberExpression) olsun.

  4. EvaluatePropertyAccessWithIdentifierKey(baseValue, IdentifierName, strict) döndür.

MemberExpression MemberExpression : MemberExpression . PrivateIdentifier

  1. baseRef = ? MemberExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. fieldNameString, PrivateIdentifier'ın StringValue değeri olsun.

  4. MakePrivateReference(baseValue, fieldNameString) döndür.

CallExpression CallExpression : CallExpression [ Expression ]

  1. baseRef = ? CallExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. strict = IsStrict(bu CallExpression) olsun.

  4. ? EvaluatePropertyAccessWithExpressionKey(baseValue, Expression, strict) döndür.

CallExpression CallExpression : CallExpression . IdentifierName

  1. baseRef = ? CallExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. strict = IsStrict(bu CallExpression) olsun.

  4. EvaluatePropertyAccessWithIdentifierKey(baseValue, IdentifierName, strict) döndür.

CallExpression CallExpression : CallExpression . PrivateIdentifier

  1. baseRef = ? CallExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. fieldNameString, PrivateIdentifier'ın StringValue değeri olsun.

  4. MakePrivateReference(baseValue, fieldNameString) döndür.

13.3.3 EvaluatePropertyAccessWithExpressionKey ( baseValue, expr, strict )

Soyut işlem EvaluatePropertyAccessWithExpressionKey, baseValue (bir ECMAScript dil değeri), expr (bir Expression Parse Node) ve strict (bir Boolean) argümanlarını alır ve ya bir Reference Record içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. propertyNameRef = ? expr'in Evaluation değeri olsun.

  2. propertyNameValue = ? GetValue(propertyNameRef) olsun.

  3. NOTE: Çoğu durumda, bu adımdan hemen sonra propertyNameValue üzerinde ToPropertyKey gerçekleştirilecektir. Ancak, a[b] = c durumunda, c'nin değerlendirilmesinden sonrasına kadar gerçekleştirilmeyecektir.

  4. Reference Record { [[Base]]: baseValue, [[ReferencedName]]: propertyNameValue, [[Strict]]: strict, [[ThisValue]]: empty } döndür.

13.3.4 EvaluatePropertyAccessWithIdentifierKey ( baseValue, identifierName, strict )

Soyut işlem EvaluatePropertyAccessWithIdentifierKey, baseValue (bir ECMAScript dil değeri), identifierName (bir IdentifierName Parse Node) ve strict (bir Boolean) argümanlarını alır ve bir Reference Record döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. propertyNameString, identifierName'in StringValue değeri olsun.

  2. Reference Record { [[Base]]: baseValue, [[ReferencedName]]: propertyNameString, [[Strict]]: strict, [[ThisValue]]: empty } döndür.

13.3.5 new İşleci

13.3.5.1 Çalışma Zamanı Anlambilimi: Değerlendirme

NewExpression NewExpression : new NewExpression

  1. ? EvaluateNew(NewExpression, empty) döndür.

MemberExpression MemberExpression : new MemberExpression Arguments

  1. ? EvaluateNew(MemberExpression, Arguments) döndür.
13.3.5.1.1 EvaluateNew ( constructExpr, argumentsNode )

Soyut işlem EvaluateNew, constructExpr (bir NewExpression Parse Node veya bir MemberExpression Parse Node) ve argumentsNode (empty veya bir Arguments Parse Node) argümanlarını alır ve ya bir Object içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ref = ? constructExpr'in Evaluation değeri olsun.

  2. ctor = ? GetValue(ref) olsun.

  3. Eğer argumentsNode empty ise, o zaman

    1. argList = yeni bir boş Liste olsun.
  4. Değilse,

    1. argList = ? argumentsNode'un ArgumentListEvaluation değeri olsun.
  5. Eğer IsConstructor(ctor) false ise, bir TypeError kuraldışı durumu fırlat.

  6. ? Construct(ctor, argList) döndür.

13.3.6 İşlev Çağrıları

13.3.6.1 Çalışma Zamanı Anlambilimi: Değerlendirme

CallExpression CallExpression : CoverCallExpressionAndAsyncArrowHead

  1. expr, CoverCallExpressionAndAsyncArrowHead tarafından kapsanan CallMemberExpression olsun.

  2. memberExpr, expr'in MemberExpression'i olsun.

  3. args, expr'in Arguments'ı olsun.

  4. ref = ? memberExpr'in Evaluation değeri olsun.

  5. func = ? GetValue(ref) olsun.

  6. Eğer ref bir Reference Record ise, IsPropertyReference(ref) false ise ve ref.[[ReferencedName]] "eval" ise, o zaman

    1. Eğer SameValue(func, %eval%) true ise, o zaman

      1. argList = ? args'ın ArgumentListEvaluation değeri olsun.

      2. Eğer argList'in hiçbir öğesi yoksa, undefined döndür.

      3. evalArg, argList'in ilk öğesi olsun.

      4. Eğer IsStrict(bu CallExpression) true ise, strictCaller = true olsun; değilse strictCaller = false olsun.

      5. ? PerformEval(evalArg, strictCaller, true) döndür.

  7. thisCall, bu CallExpression olsun.

  8. tailCall = IsInTailPosition(thisCall) olsun.

  9. ? EvaluateCall(func, ref, args, tailCall) döndür.

Adım 6.a.v'yi yürüten bir CallExpression değerlendirmesi bir doğrudan eval'dir.

CallExpression CallExpression : CallExpression Arguments

  1. ref = ? CallExpression'in Evaluation değeri olsun.

  2. func = ? GetValue(ref) olsun.

  3. thisCall, bu CallExpression olsun.

  4. tailCall = IsInTailPosition(thisCall) olsun.

  5. ? EvaluateCall(func, ref, Arguments, tailCall) döndür.

13.3.6.2 EvaluateCall ( func, thisValueRef, argumentListNode, tailPosition )

Soyut işlem EvaluateCall, func (bir ECMAScript dil değeri), thisValueRef (bir ECMAScript dil değeri veya bir Reference Record), argumentListNode (bir Parse Node) ve tailPosition (bir Boolean) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal 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 thisValueRef bir Reference Record ise, o zaman

    1. Eğer IsPropertyReference(thisValueRef) true ise, o zaman

      1. thisValue = GetThisValue(thisValueRef) olsun.
    2. Değilse,

      1. refEnv = thisValueRef.[[Base]] olsun.

      2. Assert: refEnv bir Ortam Kaydıdır.

      3. thisValue = refEnv.WithBaseObject() olsun.

  2. Değilse,

    1. thisValue = undefined olsun.
  3. argList = ? argumentListNode'un ArgumentListEvaluation değeri olsun.

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

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

  6. Eğer tailPosition true ise, PrepareForTailCall() işlemini gerçekleştir.

  7. ? Call(func, thisValue, argList) döndür.

13.3.7 super Anahtar Sözcüğü

13.3.7.1 Çalışma Zamanı Anlambilimi: Değerlendirme

SuperProperty SuperProperty : super [ Expression ]

  1. envRecord = GetThisEnvironment() olsun.

  2. actualThis = ? envRecord.GetThisBinding() olsun.

  3. propertyNameRef = ? Expression'in Evaluation değeri olsun.

  4. propertyNameValue = ? GetValue(propertyNameRef) olsun.

  5. strict = IsStrict(bu SuperProperty) olsun.

  6. NOTE: Çoğu durumda, bu adımdan hemen sonra propertyNameValue üzerinde ToPropertyKey gerçekleştirilecektir. Ancak, super[b] = c durumunda, c'nin değerlendirilmesinden sonrasına kadar gerçekleştirilmeyecektir.

  7. MakeSuperPropertyReference(actualThis, propertyNameValue, strict) döndür.

SuperProperty SuperProperty : super . IdentifierName

  1. envRecord = GetThisEnvironment() olsun.

  2. actualThis = ? envRecord.GetThisBinding() olsun.

  3. propertyKey, IdentifierName'in StringValue değeri olsun.

  4. strict = IsStrict(bu SuperProperty) olsun.

  5. MakeSuperPropertyReference(actualThis, propertyKey, strict) döndür.

SuperCall SuperCall : super Arguments

  1. newTarget = GetNewTarget() olsun.

  2. Assert: newTarget bir oluşturucudur.

  3. superCtor = GetSuperConstructor() olsun.

  4. argList = ? Arguments'ın ArgumentListEvaluation değeri olsun.

  5. Eğer IsConstructor(superCtor) false ise, bir TypeError kuraldışı durumu fırlat.

  6. result = ? Construct(superCtor, argList, newTarget) olsun.

  7. thisER = GetThisEnvironment() olsun.

  8. Assert: thisER bir İşlev Ortam Kaydıdır.

  9. ? BindThisValue(thisER, result) işlemini gerçekleştir.

  10. funcObj = thisER.[[FunctionObject]] olsun.

  11. Assert: funcObj bir ECMAScript işlev nesnesidir.

  12. ? InitializeInstanceElements(result, funcObj) işlemini gerçekleştir.

  13. result döndür.

13.3.7.2 GetSuperConstructor ( )

Soyut işlem GetSuperConstructor hiçbir argüman almaz ve bir Object veya null döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. envRecord = GetThisEnvironment() olsun.

  2. Assert: envRecord bir İşlev Ortam Kaydıdır.

  3. activeFunc = envRecord.[[FunctionObject]] olsun.

  4. Assert: activeFunc bir ECMAScript işlev nesnesidir.

  5. superCtor = ! activeFunc.[[GetPrototypeOf]]() olsun.

  6. superCtor döndür.

13.3.7.3 MakeSuperPropertyReference ( actualThis, propertyKey, strict )

Soyut işlem MakeSuperPropertyReference, actualThis (bir ECMAScript dil değeri), propertyKey (bir ECMAScript dil değeri) ve strict (bir Boolean) argümanlarını alır ve bir Super Reference Record döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. envRecord = GetThisEnvironment() olsun.

  2. Assert: envRecord.HasSuperBinding() true'dur.

  3. Assert: envRecord bir İşlev Ortam Kaydıdır.

  4. baseValue = GetSuperBase(envRecord) olsun.

  5. Reference Record { [[Base]]: baseValue, [[ReferencedName]]: propertyKey, [[Strict]]: strict, [[ThisValue]]: actualThis } döndür.

13.3.8 Argüman Listeleri

13.3.8.1 Çalışma Zamanı Anlambilimi: ArgumentListEvaluation

Sözdizimi yönelimli işlem ArgumentListEvaluation hiçbir argüman almaz ve ya ECMAScript dil değerlerinden oluşan bir Liste içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

Arguments Arguments : ( )

  1. Yeni bir boş Liste döndür.

ArgumentList ArgumentList : AssignmentExpression

  1. ref = ? AssignmentExpression'in Evaluation değeri olsun.

  2. arg = ? GetValue(ref) olsun.

  3. « arg » döndür.

ArgumentList ArgumentList : ... AssignmentExpression

  1. list = yeni bir boş Liste olsun.

  2. spreadRef = ? AssignmentExpression'in Evaluation değeri olsun.

  3. spreadObj = ? GetValue(spreadRef) olsun.

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

  5. Tekrar et,

    1. next = ? IteratorStepValue(iteratorRecord) olsun.

    2. Eğer next done ise, list döndür.

    3. next'i list'e ekle.

ArgumentList ArgumentList : ArgumentList , AssignmentExpression

  1. precedingArgs = ? ArgumentList'in ArgumentListEvaluation değeri olsun.

  2. ref = ? AssignmentExpression'in Evaluation değeri olsun.

  3. arg = ? GetValue(ref) olsun.

  4. precedingArgs ile « arg »'nin liste birleştirmesini döndür.

ArgumentList ArgumentList : ArgumentList , ... AssignmentExpression

  1. precedingArgs = ? ArgumentList'in ArgumentListEvaluation değeri olsun.

  2. spreadRef = ? AssignmentExpression'in Evaluation değeri olsun.

  3. iteratorRecord = ? GetIterator(? GetValue(spreadRef), sync) olsun.

  4. Tekrar et,

    1. next = ? IteratorStepValue(iteratorRecord) olsun.

    2. Eğer next done ise, precedingArgs döndür.

    3. next'i precedingArgs'a ekle.

TemplateLiteral TemplateLiteral : NoSubstitutionTemplate

  1. templateLiteral = bu TemplateLiteral olsun.

  2. siteObj = GetTemplateObject(templateLiteral) olsun.

  3. « siteObj » döndür.

TemplateLiteral TemplateLiteral : SubstitutionTemplate

  1. templateLiteral = bu TemplateLiteral olsun.

  2. siteObj = GetTemplateObject(templateLiteral) olsun.

  3. remaining = ? SubstitutionTemplate'in ArgumentListEvaluation değeri olsun.

  4. « siteObj » ile remaining'in liste birleştirmesini döndür.

SubstitutionTemplate SubstitutionTemplate : TemplateHead Expression TemplateSpans

  1. firstSubRef = ? Expression'in Evaluation değeri olsun.

  2. firstSub = ? GetValue(firstSubRef) olsun.

  3. restSub = ? TemplateSpans'in SubstitutionEvaluation değeri olsun.

  4. Assert: restSub, olası bir boş Liste'dir.

  5. « firstSub » ile restSub'ın liste birleştirmesini döndür.

13.3.9 İsteğe Bağlı Zincirler

13.3.9.1 Çalışma Zamanı Anlambilimi: Değerlendirme

OptionalExpression OptionalExpression : MemberExpression OptionalChain

  1. baseRef = ? MemberExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. Eğer baseValue, undefined veya null ise, o zaman

    1. undefined döndür.
  4. ? OptionalChain'in baseValue ve baseRef argümanlarıyla ChainEvaluation değerini döndür.

OptionalExpression OptionalExpression : CallExpression OptionalChain

  1. baseRef = ? CallExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. Eğer baseValue, undefined veya null ise, o zaman

    1. undefined döndür.
  4. ? OptionalChain'in baseValue ve baseRef argümanlarıyla ChainEvaluation değerini döndür.

OptionalExpression OptionalExpression : OptionalExpression OptionalChain

  1. baseRef = ? OptionalExpression'in Evaluation değeri olsun.

  2. baseValue = ? GetValue(baseRef) olsun.

  3. Eğer baseValue, undefined veya null ise, o zaman

    1. undefined döndür.
  4. ? OptionalChain'in baseValue ve baseRef argümanlarıyla ChainEvaluation değerini döndür.

13.3.9.2 Çalışma Zamanı Anlambilimi: ChainEvaluation

Sözdizimi yönelimli işlem ChainEvaluation, baseValue (bir ECMAScript dil değeri) ve baseRef (bir ECMAScript dil değeri veya bir Reference Record) argümanlarını alır ve ya bir ECMAScript dil değeri veya bir Reference Record içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinde parça parça tanımlanmıştır:

OptionalChain OptionalChain : ?. Arguments

  1. thisChain = bu OptionalChain olsun.

  2. tailCall = IsInTailPosition(thisChain) olsun.

  3. ? EvaluateCall(baseValue, baseRef, Arguments, tailCall) döndür.

OptionalChain OptionalChain : ?. [ Expression ]

  1. strict = IsStrict(bu OptionalChain) olsun.

  2. ? EvaluatePropertyAccessWithExpressionKey(baseValue, Expression, strict) döndür.

OptionalChain OptionalChain : ?. IdentifierName

  1. strict = IsStrict(bu OptionalChain) olsun.

  2. ? EvaluatePropertyAccessWithIdentifierKey(baseValue, IdentifierName, strict) döndür.

OptionalChain OptionalChain : ?. PrivateIdentifier

  1. fieldNameString = PrivateIdentifier'ın StringValue değeri olsun.

  2. MakePrivateReference(baseValue, fieldNameString) döndür.

OptionalChain OptionalChain : OptionalChain Arguments

  1. optionalChain = OptionalChain olsun.

  2. newRef = ? ChainEvaluation of optionalChain ile baseValue ve baseRef argümanlarının sonucu olsun.

  3. newValue = ? GetValue(newRef) olsun.

  4. thisChain = bu OptionalChain olsun.

  5. tailCall = IsInTailPosition(thisChain) olsun.

  6. ? EvaluateCall(newValue, newRef, Arguments, tailCall) döndür.

OptionalChain OptionalChain : OptionalChain [ Expression ]

  1. optionalChain = OptionalChain olsun.

  2. newRef = ? ChainEvaluation of optionalChain ile baseValue ve baseRef argümanlarının sonucu olsun.

  3. newValue = ? GetValue(newRef) olsun.

  4. strict = IsStrict(bu OptionalChain) olsun.

  5. ? EvaluatePropertyAccessWithExpressionKey(newValue, Expression, strict) döndür.

OptionalChain OptionalChain : OptionalChain . IdentifierName

  1. optionalChain = OptionalChain olsun.

  2. newRef = ? ChainEvaluation of optionalChain ile baseValue ve baseRef argümanlarının sonucu olsun.

  3. newValue = ? GetValue(newRef) olsun.

  4. strict = IsStrict(bu OptionalChain) olsun.

  5. ? EvaluatePropertyAccessWithIdentifierKey(newValue, IdentifierName, strict) döndür.

OptionalChain OptionalChain : OptionalChain . PrivateIdentifier

  1. optionalChain = OptionalChain olsun.

  2. newRef = ? ChainEvaluation of optionalChain ile baseValue ve baseRef argümanlarının sonucu olsun.

  3. newValue = ? GetValue(newRef) olsun.

  4. fieldNameString = PrivateIdentifier'ın StringValue değeri olsun.

  5. MakePrivateReference(newValue, fieldNameString) döndür.

13.3.10 İçe Aktarma Çağrıları

13.3.10.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ImportCall ImportCall : import ( AssignmentExpression ,opt )

  1. ? EvaluateImportCall(AssignmentExpression) döndür.

ImportCall ImportCall : import ( AssignmentExpression , AssignmentExpression ,opt )

  1. ? EvaluateImportCall(birinci AssignmentExpression, ikinci AssignmentExpression) döndür.

13.3.10.2 EvaluateImportCall ( specifierExpr [ , optionsExpr ] )

Soyut işlem EvaluateImportCall, specifierExpr (bir Parse Node) argümanını ve isteğe bağlı optionsExpr (bir Parse Node) argümanını alır ve ya bir Promise içeren normal tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. referrer = GetActiveScriptOrModule() olsun.

  2. Eğer referrer null ise, referrergeçerli Realm Kaydı olarak ayarla.

  3. specifierRef = ? Evaluation of specifierExpr olsun.

  4. specifier = ? GetValue(specifierRef) olsun.

  5. Eğer optionsExpr mevcutsa, o zaman

    1. optionsRef = ? Evaluation of optionsExpr olsun.

    2. options = ? GetValue(optionsRef) olsun.

  6. Değilse,

    1. options = undefined olsun.
  7. promiseCapability = ! NewPromiseCapability(%Promise%) olsun.

  8. specifierString = Completion(ToString(specifier)) olsun.

  9. IfAbruptRejectPromise(specifierString, promiseCapability) işlemini gerçekleştir.

  10. attrs = yeni bir boş Liste olsun.

  11. Eğer options undefined değilse, o zaman

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

      1. ! Call(promiseCapability.[[Reject]], undefined, « yeni oluşturulmuş bir TypeError nesnesi ») işlemini gerçekleştir.

      2. promiseCapability.[[Promise]] döndür.

    2. attrsObj = Completion(Get(options, "with")) olsun.

    3. IfAbruptRejectPromise(attrsObj, promiseCapability) işlemini gerçekleştir.

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

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

         1. ! [Call](08_sec-abstract-operations.md#sec-call)(*promiseCapability*.*[[Reject]]*, `undefined`, « yeni oluşturulmuş bir `TypeError` nesnesi ») işlemini gerçekleştir.
        
         2. *promiseCapability*.*[[Promise]]* döndür.
      2. entries = Completion(EnumerableOwnProperties(attrsObj, key+value)) olsun.

      3. IfAbruptRejectPromise(entries, promiseCapability) işlemini gerçekleştir.

      4. entries Listesinin her entry öğesi için, do

         1. *key* = ! [Get](08_sec-abstract-operations.md#sec-get-o-p)(*entry*, `"0"`) olsun.
        
         2. *value* = ! [Get](08_sec-abstract-operations.md#sec-get-o-p)(*entry*, `"1"`) olsun.
        
         3. Eğer *key* [bir String ise](07_sec-ecmascript-data-types-and-values.md#sec-ecmascript-language-types-string-type), o zaman
           
                    1. Eğer *value* [bir String değilse](07_sec-ecmascript-data-types-and-values.md#sec-ecmascript-language-types-string-type), o zaman
                      
                                1. ! [Call](08_sec-abstract-operations.md#sec-call)(*promiseCapability*.*[[Reject]]*, `undefined`, « yeni oluşturulmuş bir `TypeError` nesnesi ») işlemini gerçekleştir.
                      
                                2. *promiseCapability*.*[[Promise]]* döndür.
           
                    2. [ImportAttribute Record](17_sec-ecmascript-language-scripts-and-modules.md#importattribute-record) { *[[Key]]*: *key*, *[[Value]]*: *value* } kaydını *attrs*'a ekle.
    5. Eğer AllImportAttributesSupported(attrs) false ise, o zaman

      1. ! Call(promiseCapability.[[Reject]], undefined, « yeni oluşturulmuş bir TypeError nesnesi ») işlemini gerçekleştir.

      2. promiseCapability.[[Promise]] döndür.

    6. attrs'ı, her bir alanın değerini bir UTF-16 kod birimi değerleri dizisi olarak kabul ederek [[Key]] alanlarının sözlük sırasına göre sırala. NOTE: Bu sıralama yalnızca barındırıcıların özelliklerin listelenme sırasına göre davranışı değiştirmesinin yasaklanmış olması yönüyle gözlemlenebilirdir.

  12. moduleRequest = yeni ModuleRequest Record { [[Specifier]]: specifierString, [[Attributes]]: attrs } olsun.

  13. HostLoadImportedModule(referrer, moduleRequest, empty, promiseCapability) işlemini gerçekleştir.

  14. promiseCapability.[[Promise]] döndür.

13.3.10.3 ContinueDynamicImport ( promiseCapability, moduleCompletion )

Soyut işlem ContinueDynamicImport, promiseCapability (bir PromiseCapability Record) ve moduleCompletion (ya bir Module Record içeren normal tamamlanma ya da bir fırlatma tamamlanması) argümanlarını alır ve unused döndürür. Bir import() çağrısı ile başlatılan dinamik içe aktarma sürecini tamamlar, bu çağrıyla döndürülen promise nesnesini uygun şekilde çözümler veya reddeder. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer moduleCompletion bir ani tamamlanma ise, o zaman

    1. ! Call(promiseCapability.[[Reject]], undefined, « moduleCompletion.[[Value]] ») işlemini gerçekleştir.

    2. unused döndür.

  2. module = moduleCompletion.[[Value]] olsun.

  3. loadPromise = module.LoadRequestedModules() olsun.

  4. rejectedClosure, (reason) parametrelerine sahip, promiseCapability'yi yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Abstract Closure olsun:

    1. ! Call(promiseCapability.[[Reject]], undefined, « reason ») işlemini gerçekleştir.

    2. NormalCompletion(undefined) döndür.

  5. onRejected = CreateBuiltinFunction(rejectedClosure, 1, "", « ») olsun.

  6. linkAndEvaluateClosure, parametresi olmayan, module, promiseCapability ve onRejected'ı yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Abstract Closure olsun:

    1. link = Completion(module.Link()) olsun.

    2. Eğer link bir ani tamamlanma ise, o zaman

      1. ! Call(promiseCapability.[[Reject]], undefined, « link.[[Value]] ») işlemini gerçekleştir.

      2. NormalCompletion(undefined) döndür.

    3. evaluatePromise = module.Evaluate() olsun.

    4. fulfilledClosure, parametresi olmayan, module ve promiseCapability'yi yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Abstract Closure olsun:

      1. namespace = GetModuleNamespace(module) olsun.

      2. ! Call(promiseCapability.[[Resolve]], undefined, « namespace ») işlemini gerçekleştir.

      3. NormalCompletion(undefined) döndür.

    5. onFulfilled = CreateBuiltinFunction(fulfilledClosure, 0, "", « ») olsun.

    6. PerformPromiseThen(evaluatePromise, onFulfilled, onRejected) işlemini gerçekleştir.

    7. unused döndür.

  7. linkAndEvaluate = CreateBuiltinFunction(linkAndEvaluateClosure, 0, "", « ») olsun.

  8. PerformPromiseThen(loadPromise, linkAndEvaluate, onRejected) işlemini gerçekleştir.

  9. unused döndür.

13.3.11 Etiketli Şablonlar

13.3.11.1 Çalışma Zamanı Anlambilimi: Değerlendirme

MemberExpression MemberExpression : MemberExpression TemplateLiteral

  1. tagRef = ? Evaluation of MemberExpression olsun.

  2. tagFunc = ? GetValue(tagRef) olsun.

  3. thisCall = bu MemberExpression olsun.

  4. tailCall = IsInTailPosition(thisCall) olsun.

  5. ? EvaluateCall(tagFunc, tagRef, TemplateLiteral, tailCall) döndür.

CallExpression CallExpression : CallExpression TemplateLiteral

  1. tagRef = ? Evaluation of CallExpression olsun.

  2. tagFunc = ? GetValue(tagRef) olsun.

  3. thisCall = bu CallExpression olsun.

  4. tailCall = IsInTailPosition(thisCall) olsun.

  5. ? EvaluateCall(tagFunc, tagRef, TemplateLiteral, tailCall) döndür.

13.3.12 Meta Özellikler

13.3.12.1 Çalışma Zamanı Anlambilimi: Değerlendirme

NewTarget NewTarget : new . target

  1. GetNewTarget() döndür.

ImportMeta ImportMeta : import . meta

  1. module = GetActiveScriptOrModule() olsun.

  2. Assert: module, bir Source Text Module Record'dur.

  3. importMeta = module.[[ImportMeta]] olsun.

  4. Eğer importMeta empty ise, o zaman

    1. importMeta = OrdinaryObjectCreate(null) olarak ayarla.

    2. importMetaValues = HostGetImportMetaProperties(module) olsun.

    3. importMetaValues Listesinin her { [[Key]], [[Value]] } p Record öğesi için, do

      1. ! CreateDataPropertyOrThrow(importMeta, p.[[Key]], p.[[Value]]) işlemini gerçekleştir.
    4. HostFinalizeImportMeta(importMeta, module) işlemini gerçekleştir.

    5. module.[[ImportMeta]] = importMeta olarak ayarla.

    6. importMeta döndür.

  5. Assert: importMeta bir Object'tir.

  6. importMeta döndür.

13.3.12.1.1 HostGetImportMetaProperties ( moduleRecord )

Host-defined soyut işlem HostGetImportMetaProperties, moduleRecord (bir Module Record) argümanını alır ve [[Key]] (bir property key) ve [[Value]] (bir ECMAScript dil değeri) alanlarına sahip Record'lardan oluşan bir Liste döndürür. Barındırıcıların, import.meta'dan döndürülen nesne için özellik anahtarları ve değerler sağlamasına olanak tanır.

HostGetImportMetaProperties'in varsayılan uygulaması, yeni bir boş Liste döndürmektir.

13.3.12.1.2 HostFinalizeImportMeta ( importMeta, moduleRecord )

Host-defined soyut işlem HostFinalizeImportMeta, importMeta (bir Object) ve moduleRecord (bir Module Record) argümanlarını alır ve unused döndürür. Barındırıcıların, import.meta'dan döndürülen nesneyi hazırlamak için herhangi bir olağanüstü işlem gerçekleştirmesine olanak tanır.

Çoğu barındırıcı, basitçe HostGetImportMetaProperties işlemini tanımlayabilecek ve HostFinalizeImportMeta'yı varsayılan davranışıyla bırakabilecektir. Ancak, HostFinalizeImportMeta, nesne ECMAScript koduna maruz bırakılmadan önce nesne üzerinde doğrudan işlem yapması gereken barındırıcılar için bir "kaçış kapısı" sağlar.

HostFinalizeImportMeta'nın varsayılan uygulaması unused döndürmektir.

13.4 Güncelleme İfadeleri

Sözdizimi

UpdateExpression UpdateExpression[Yield, Await] : LeftHandSideExpression[?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] ++ LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] -- ++ UnaryExpression[?Yield, ?Await] -- UnaryExpression[?Yield, ?Await]

13.4.1 Statik Anlambilim: Erken Hatalar

UpdateExpression UpdateExpression : LeftHandSideExpression ++ LeftHandSideExpression --

UpdateExpression UpdateExpression : ++ UnaryExpression -- UnaryExpression

13.4.2 Postfix Artırma Operatörü

13.4.2.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UpdateExpression UpdateExpression : LeftHandSideExpression ++

  1. lhs = ? LeftHandSideExpression'in Evaluation değeri olsun.

  2. Eğer LeftHandSideExpression'in AssignmentTargetType değeri web-compat ise, bir ReferenceError kuraldışı durumu fırlat.

  3. oldValue = ? ToNumeric(? GetValue(lhs)) olsun.

  4. Eğer oldValue bir Number ise, o zaman

    1. newValue = Number::add(oldValue, 1𝔽) olsun.
  5. Değilse,

    1. Assert: oldValue bir BigInt'tir.

    2. newValue = BigInt::add(oldValue, 1) olsun.

  6. ? PutValue(lhs, newValue) işlemini gerçekleştir.

  7. oldValue döndür.

13.4.3 Postfix Azaltma Operatörü

13.4.3.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UpdateExpression UpdateExpression : LeftHandSideExpression --

  1. lhs = ? LeftHandSideExpression'in Evaluation değeri olsun.

  2. Eğer LeftHandSideExpression'in AssignmentTargetType değeri web-compat ise, bir ReferenceError kuraldışı durumu fırlat.

  3. oldValue = ? ToNumeric(? GetValue(lhs)) olsun.

  4. Eğer oldValue bir Number ise, o zaman

    1. newValue = Number::subtract(oldValue, 1𝔽) olsun.
  5. Değilse,

    1. Assert: oldValue bir BigInt'tir.

    2. newValue = BigInt::subtract(oldValue, 1) olsun.

  6. ? PutValue(lhs, newValue) işlemini gerçekleştir.

  7. oldValue döndür.

13.4.4 Prefix Artırma Operatörü

13.4.4.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UpdateExpression UpdateExpression : ++ UnaryExpression

  1. expr = ? UnaryExpression'in Evaluation değeri olsun.

  2. Eğer UnaryExpression'in AssignmentTargetType değeri web-compat ise, bir ReferenceError kuraldışı durumu fırlat.

  3. oldValue = ? ToNumeric(? GetValue(expr)) olsun.

  4. Eğer oldValue bir Number ise, o zaman

    1. newValue = Number::add(oldValue, 1𝔽) olsun.
  5. Değilse,

    1. Assert: oldValue bir BigInt'tir.

    2. newValue = BigInt::add(oldValue, 1) olsun.

  6. ? PutValue(expr, newValue) işlemini gerçekleştir.

  7. newValue döndür.

13.4.5 Prefix Azaltma Operatörü

13.4.5.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UpdateExpression UpdateExpression : -- UnaryExpression

  1. expr = ? UnaryExpression'in Evaluation değeri olsun.

  2. Eğer UnaryExpression'in AssignmentTargetType değeri web-compat ise, bir ReferenceError kuraldışı durumu fırlat.

  3. oldValue = ? ToNumeric(? GetValue(expr)) olsun.

  4. Eğer oldValue bir Number ise, o zaman

    1. newValue = Number::subtract(oldValue, 1𝔽) olsun.
  5. Değilse,

    1. Assert: oldValue bir BigInt'tir.

    2. newValue = BigInt::subtract(oldValue, 1) olsun.

  6. ? PutValue(expr, newValue) işlemini gerçekleştir.

  7. newValue döndür.

13.5 Tekli Operatörler

Sözdizimi

UnaryExpression UnaryExpression[Yield, Await] : UpdateExpression[?Yield, ?Await] delete UnaryExpression[?Yield, ?Await] void UnaryExpression[?Yield, ?Await] typeof UnaryExpression[?Yield, ?Await] + UnaryExpression[?Yield, ?Await] - UnaryExpression[?Yield, ?Await] ~ UnaryExpression[?Yield, ?Await] ! UnaryExpression[?Yield, ?Await] [+Await] AwaitExpression[?Yield]

13.5.1 delete Operatörü

13.5.1.1 Statik Anlambilim: Erken Hatalar

UnaryExpression UnaryExpression : delete UnaryExpression

13.5.1.2 Çalışma Zamanı Anlambilimi: Değerlendirme

UnaryExpression UnaryExpression : delete UnaryExpression

  1. ref = ? UnaryExpression'in Evaluation değeri olsun.

  2. Eğer ref bir Reference Record değilse, true döndür.

  3. Eğer IsUnresolvableReference(ref) true ise, o zaman

    1. Assert: ref.[[Strict]] değeri false'dur.

    2. true döndür.

  4. Eğer IsPropertyReference(ref) true ise, o zaman

    1. Assert: IsPrivateReference(ref) değeri false'dur.

    2. Eğer IsSuperReference(ref) true ise, bir ReferenceError kuraldışı durumu fırlat.

    3. baseObj = ? ToObject(ref.[[Base]]) olsun.

    4. Eğer ref.[[ReferencedName]] bir özellik anahtarı değilse, o zaman

      1. ref.[[ReferencedName]] = ? ToPropertyKey(ref.[[ReferencedName]]) olarak ayarla.
    5. deleteStatus = ? baseObj.[[Delete]](ref.[[ReferencedName]]) olsun.

    6. Eğer deleteStatus false ise ve ref.[[Strict]] true ise, bir TypeError kuraldışı durumu fırlat.

    7. deleteStatus döndür.

  5. base = ref.[[Base]] olsun.

  6. Assert: base bir Environment Record'dur.

  7. ? base.DeleteBinding(ref.[[ReferencedName]]) döndür.

13.5.2 void Operatörü

13.5.2.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UnaryExpression UnaryExpression : void UnaryExpression

  1. expr = ? UnaryExpression'in Evaluation değeri olsun.

  2. ? GetValue(expr) işlemini gerçekleştir.

  3. undefined döndür.

13.5.3 typeof Operatörü

13.5.3.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UnaryExpression UnaryExpression : typeof UnaryExpression

  1. value = ? UnaryExpression'in Evaluation değeri olsun.

  2. Eğer value bir Reference Record ise, o zaman

    1. Eğer IsUnresolvableReference(value) true ise, "undefined" döndür.
  3. value = ? GetValue(value) olarak ayarla.

  4. Eğer value undefined ise, "undefined" döndür.

  5. Eğer value null ise, "object" döndür.

  6. Eğer value bir String ise, "string" döndür.

  7. Eğer value bir Symbol ise, "symbol" döndür.

  8. Eğer value bir Boolean ise, "boolean" döndür.

  9. Eğer value bir Number ise, "number" döndür.

  10. Eğer value bir BigInt ise, "bigint" döndür.

  11. Assert: value bir Object'tir.

  12. Kuralcı İsteğe Bağlı Eğer barındırıcı bir web tarayıcısı ise veya diğer şekillerde [[[IsHTMLDDA]] Dahili Yuvasını](32_sec-additional-ecmascript-features-for-web-browsers.md#sec-IsHTMLDDA-internal-slot) destekliyorsa, o zaman

    1. Eğer value, bir [[IsHTMLDDA]] dahili yuvasına sahipse, "undefined" döndür.
  13. Eğer value, bir [[Call]] dahili yöntemine sahipse, "function" döndür.

  14. "object" döndür.

13.5.4 Tekli + Operatörü

13.5.4.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UnaryExpression UnaryExpression : + UnaryExpression

  1. expr = ? UnaryExpression'in Evaluation değeri olsun.

  2. ? ToNumber(? GetValue(expr)) döndür.

13.5.5 Tekli - Operatörü

13.5.5.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UnaryExpression UnaryExpression : - UnaryExpression

  1. expr = ? UnaryExpression'in Evaluation değeri olsun.

  2. oldValue = ? ToNumeric(? GetValue(expr)) olsun.

  3. Eğer oldValue bir Number ise, Number::unaryMinus(oldValue) döndür.

  4. Assert: oldValue bir BigInt'tir.

  5. BigInt::unaryMinus(oldValue) döndür.

13.5.6 Bitsel DEĞİL Operatörü ( ~ )

13.5.6.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UnaryExpression UnaryExpression : ~ UnaryExpression

  1. expr = ? UnaryExpression'in Evaluation değeri olsun.

  2. oldValue = ? ToNumeric(? GetValue(expr)) olsun.

  3. Eğer oldValue bir Number ise, Number::bitwiseNOT(oldValue) döndür.

  4. Assert: oldValue bir BigInt'tir.

  5. BigInt::bitwiseNOT(oldValue) döndür.

13.5.7 Mantıksal DEĞİL Operatörü ( ! )

13.5.7.1 Çalışma Zamanı Anlambilimi: Değerlendirme

UnaryExpression UnaryExpression : ! UnaryExpression

  1. expr = ? UnaryExpression'in Evaluation değeri olsun.

  2. oldValue = ToBoolean(? GetValue(expr)) olsun.

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

  4. true döndür.

13.6 Üs Alma Operatörü

Sözdizimi

ExponentiationExpression ExponentiationExpression[Yield, Await] : UnaryExpression[?Yield, ?Await] UpdateExpression[?Yield, ?Await] ****** ExponentiationExpression[?Yield, ?Await]

13.6.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ExponentiationExpression ExponentiationExpression : UpdateExpression ****** ExponentiationExpression

  1. ? EvaluateStringOrNumericBinaryExpression(UpdateExpression, **, ExponentiationExpression) döndür.

13.7 Çarpımsal Operatörler

Sözdizimi

MultiplicativeExpression MultiplicativeExpression[Yield, Await] : ExponentiationExpression[?Yield, ?Await] MultiplicativeExpression[?Yield, ?Await] MultiplicativeOperator ExponentiationExpression[?Yield, ?Await]

MultiplicativeOperator MultiplicativeOperator : one of ***** / %

13.7.1 Çalışma Zamanı Anlambilimi: Değerlendirme

MultiplicativeExpression MultiplicativeExpression : MultiplicativeExpression MultiplicativeOperator ExponentiationExpression

  1. opText = MultiplicativeOperator tarafından eşleşen kaynak metin olsun.

  2. ? EvaluateStringOrNumericBinaryExpression(MultiplicativeExpression, opText, ExponentiationExpression) döndür.

13.8 Toplamsal Operatörler

Sözdizimi

AdditiveExpression AdditiveExpression[Yield, Await] : MultiplicativeExpression[?Yield, ?Await] AdditiveExpression[?Yield, ?Await] + MultiplicativeExpression[?Yield, ?Await] AdditiveExpression[?Yield, ?Await] - MultiplicativeExpression[?Yield, ?Await]

13.8.1 Toplama Operatörü ( + )

13.8.1.1 Çalışma Zamanı Anlambilimi: Değerlendirme

AdditiveExpression AdditiveExpression : AdditiveExpression + MultiplicativeExpression

  1. ? EvaluateStringOrNumericBinaryExpression(AdditiveExpression, +, MultiplicativeExpression) döndür.

13.8.2 Çıkarma Operatörü ( - )

13.8.2.1 Çalışma Zamanı Anlambilimi: Değerlendirme

AdditiveExpression AdditiveExpression : AdditiveExpression - MultiplicativeExpression

  1. ? EvaluateStringOrNumericBinaryExpression(AdditiveExpression, -, MultiplicativeExpression) döndür.

13.9 Bitsel Kaydırma Operatörleri

Sözdizimi

ShiftExpression ShiftExpression[Yield, Await] : AdditiveExpression[?Yield, ?Await] ShiftExpression[?Yield, ?Await] <<** *AdditiveExpression[?Yield, ?Await]* *ShiftExpression[?Yield, ?Await]* **>> AdditiveExpression[?Yield, ?Await] ShiftExpression[?Yield, ?Await] >>> AdditiveExpression[?Yield, ?Await]

13.9.1 Sola Kaydırma Operatörü ( << )

13.9.1.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ShiftExpression ShiftExpression : ShiftExpression << AdditiveExpression

  1. ? EvaluateStringOrNumericBinaryExpression(ShiftExpression, <<, AdditiveExpression) döndür.

13.9.2 İşaretli Sağa Kaydırma Operatörü ( >> )

13.9.2.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ShiftExpression ShiftExpression : ShiftExpression >> AdditiveExpression

  1. ? EvaluateStringOrNumericBinaryExpression(ShiftExpression, >>, AdditiveExpression) döndür.

13.9.3 İşaretsiz Sağa Kaydırma Operatörü ( >>> )

13.9.3.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ShiftExpression ShiftExpression : ShiftExpression >>> AdditiveExpression

  1. ? EvaluateStringOrNumericBinaryExpression(ShiftExpression, >>>, AdditiveExpression) döndür.

13.10 İlişkisel Operatörler

Sözdizimi

RelationalExpression RelationalExpression[In, Yield, Await] : ShiftExpression[?Yield, ?Await] RelationalExpression[?In, ?Yield, ?Await] <** *ShiftExpression[?Yield, ?Await]* *RelationalExpression[?In, ?Yield, ?Await]* **> ShiftExpression[?Yield, ?Await] RelationalExpression[?In, ?Yield, ?Await] <=** *ShiftExpression[?Yield, ?Await]* *RelationalExpression[?In, ?Yield, ?Await]* **>= ShiftExpression[?Yield, ?Await] RelationalExpression[?In, ?Yield, ?Await] instanceof ShiftExpression[?Yield, ?Await] [+In] RelationalExpression[+In, ?Yield, ?Await] in ShiftExpression[?Yield, ?Await] [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]

13.10.1 Çalışma Zamanı Anlambilimi: Değerlendirme

RelationalExpression RelationalExpression : RelationalExpression < ShiftExpression

  1. leftRef = ? Evaluation of RelationalExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of ShiftExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. result = ? IsLessThan(leftValue, rightValue, true) olsun.

  6. Eğer result undefined ise, false döndür.

  7. result döndür.

RelationalExpression RelationalExpression : RelationalExpression > ShiftExpression

  1. leftRef = ? Evaluation of RelationalExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of ShiftExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. result = ? IsLessThan(rightValue, leftValue, false) olsun.

  6. Eğer result undefined ise, false döndür.

  7. result döndür.

RelationalExpression RelationalExpression : RelationalExpression <= ShiftExpression

  1. leftRef = ? Evaluation of RelationalExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of ShiftExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. result = ? IsLessThan(rightValue, leftValue, false) olsun.

  6. Eğer result, true veya undefined ise, false döndür.

  7. true döndür.

RelationalExpression RelationalExpression : RelationalExpression >= ShiftExpression

  1. leftRef = ? Evaluation of RelationalExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of ShiftExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. result = ? IsLessThan(leftValue, rightValue, true) olsun.

  6. Eğer result, true veya undefined ise, false döndür.

  7. true döndür.

RelationalExpression RelationalExpression : RelationalExpression instanceof ShiftExpression

  1. leftRef = ? Evaluation of RelationalExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of ShiftExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. ? InstanceofOperator(leftValue, rightValue) döndür.

RelationalExpression RelationalExpression : RelationalExpression in ShiftExpression

  1. leftRef = ? Evaluation of RelationalExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of ShiftExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

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

  6. ? HasProperty(rightValue, ? ToPropertyKey(leftValue)) döndür.

RelationalExpression RelationalExpression : PrivateIdentifier in ShiftExpression

  1. privateIdentifier = PrivateIdentifier'ın StringValue değeri olsun.

  2. rightRef = ? Evaluation of ShiftExpression olsun.

  3. rightValue = ? GetValue(rightRef) olsun.

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

  5. privateEnv = çalışan yürütme bağlamının PrivateEnvironment değeri olsun.

  6. Assert: privateEnv null değildir.

  7. privateName = ResolvePrivateIdentifier(privateEnv, privateIdentifier) olsun.

  8. Eğer PrivateElementFind(rightValue, privateName) değeri empty ise, false döndür.

  9. true döndür.

13.10.2 InstanceofOperator ( value, target )

Soyut işlem InstanceofOperator, value (bir ECMAScript dil değeri) ve target (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. value'nun target'ın bir örneği olup olmadığını belirlemek için genel algoritmayı, target'ın %Symbol.hasInstance% yöntemine danışarak veya bu yöntem yoksa target'ın "prototype" özelliğinin değerinin value'nun prototip zincirinde bulunup bulunmadığını belirleyerek uygular. Çağrıldığında aşağıdaki adımları gerçekleştirir:

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

  2. instOfHandler = ? GetMethod(target, %Symbol.hasInstance%) olsun.

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

    1. Dönür ? ToBoolean(? Call(instOfHandler, target, « value »)).
  4. Eğer IsCallable(target) false ise, bir TypeError kuraldışı durumu fırlat.

  5. ? OrdinaryHasInstance(target, value) döndür.

13.11 Eşitlik Operatörleri

Sözdizimi

EqualityExpression EqualityExpression[In, Yield, Await] : RelationalExpression[?In, ?Yield, ?Await] EqualityExpression[?In, ?Yield, ?Await] == RelationalExpression[?In, ?Yield, ?Await] EqualityExpression[?In, ?Yield, ?Await] != RelationalExpression[?In, ?Yield, ?Await] EqualityExpression[?In, ?Yield, ?Await] === RelationalExpression[?In, ?Yield, ?Await] EqualityExpression[?In, ?Yield, ?Await] !== RelationalExpression[?In, ?Yield, ?Await]

13.11.1 Çalışma Zamanı Anlambilimi: Değerlendirme

EqualityExpression EqualityExpression : EqualityExpression == RelationalExpression

  1. leftRef = ? Evaluation of EqualityExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of RelationalExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. ? IsLooselyEqual(rightValue, leftValue) döndür.

EqualityExpression EqualityExpression : EqualityExpression != RelationalExpression

  1. leftRef = ? Evaluation of EqualityExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of RelationalExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. result = ? IsLooselyEqual(rightValue, leftValue) olsun.

  6. Eğer result true ise, false döndür.

  7. true döndür.

EqualityExpression EqualityExpression : EqualityExpression === RelationalExpression

  1. leftRef = ? Evaluation of EqualityExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of RelationalExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. IsStrictlyEqual(rightValue, leftValue) döndür.

EqualityExpression EqualityExpression : EqualityExpression !== RelationalExpression

  1. leftRef = ? Evaluation of EqualityExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation of RelationalExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. result = IsStrictlyEqual(rightValue, leftValue) olsun.

  6. Eğer result true ise, false döndür.

  7. true döndür.

13.12 İkili Bitsel Operatörler

Sözdizimi

BitwiseANDExpression BitwiseANDExpression[In, Yield, Await] : EqualityExpression[?In, ?Yield, ?Await] BitwiseANDExpression[?In, ?Yield, ?Await] & EqualityExpression[?In, ?Yield, ?Await]

BitwiseXORExpression BitwiseXORExpression[In, Yield, Await] : BitwiseANDExpression[?In, ?Yield, ?Await] BitwiseXORExpression[?In, ?Yield, ?Await] ^ BitwiseANDExpression[?In, ?Yield, ?Await]

BitwiseORExpression BitwiseORExpression[In, Yield, Await] : BitwiseXORExpression[?In, ?Yield, ?Await] BitwiseORExpression[?In, ?Yield, ?Await] | BitwiseXORExpression[?In, ?Yield, ?Await]

13.12.1 Çalışma Zamanı Anlambilimi: Değerlendirme

BitwiseANDExpression BitwiseANDExpression : BitwiseANDExpression & EqualityExpression

  1. ? EvaluateStringOrNumericBinaryExpression(BitwiseANDExpression, &, EqualityExpression) döndür.

BitwiseXORExpression BitwiseXORExpression : BitwiseXORExpression ^ BitwiseANDExpression

  1. ? EvaluateStringOrNumericBinaryExpression(BitwiseXORExpression, ^, BitwiseANDExpression) döndür.

BitwiseORExpression BitwiseORExpression : BitwiseORExpression | BitwiseXORExpression

  1. ? EvaluateStringOrNumericBinaryExpression(BitwiseORExpression, |, BitwiseXORExpression) döndür.

13.13 İkili Mantıksal Operatörler

Sözdizimi

LogicalANDExpression LogicalANDExpression[In, Yield, Await] : BitwiseORExpression[?In, ?Yield, ?Await] LogicalANDExpression[?In, ?Yield, ?Await] && BitwiseORExpression[?In, ?Yield, ?Await]

LogicalORExpression LogicalORExpression[In, Yield, Await] : LogicalANDExpression[?In, ?Yield, ?Await] LogicalORExpression[?In, ?Yield, ?Await] || LogicalANDExpression[?In, ?Yield, ?Await]

CoalesceExpression CoalesceExpression[In, Yield, Await] : CoalesceExpressionHead[?In, ?Yield, ?Await] ?? BitwiseORExpression[?In, ?Yield, ?Await]

CoalesceExpressionHead CoalesceExpressionHead[In, Yield, Await] : CoalesceExpression[?In, ?Yield, ?Await] BitwiseORExpression[?In, ?Yield, ?Await]

ShortCircuitExpression ShortCircuitExpression[In, Yield, Await] : LogicalORExpression[?In, ?Yield, ?Await] CoalesceExpression[?In, ?Yield, ?Await]

13.13.1 Çalışma Zamanı Anlambilimi: Değerlendirme

LogicalANDExpression LogicalANDExpression : LogicalANDExpression && BitwiseORExpression

  1. leftRef = ? Evaluation of LogicalANDExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. Eğer ToBoolean(leftValue) false ise, leftValue döndür.

  4. rightRef = ? Evaluation of BitwiseORExpression olsun.

  5. ? GetValue(rightRef) döndür.

LogicalORExpression LogicalORExpression : LogicalORExpression || LogicalANDExpression

  1. leftRef = ? Evaluation of LogicalORExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. Eğer ToBoolean(leftValue) true ise, leftValue döndür.

  4. rightRef = ? Evaluation of LogicalANDExpression olsun.

  5. ? GetValue(rightRef) döndür.

CoalesceExpression CoalesceExpression : CoalesceExpressionHead ?? BitwiseORExpression

  1. leftRef = ? Evaluation of CoalesceExpressionHead olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. Eğer leftValue, hem undefined hem de null değilse, leftValue döndür.

  4. rightRef = ? Evaluation of BitwiseORExpression olsun.

  5. ? GetValue(rightRef) döndür.

13.14 Koşul Operatörü ( ? : )

Sözdizimi

ConditionalExpression ConditionalExpression[In, Yield, Await] : ShortCircuitExpression[?In, ?Yield, ?Await] ShortCircuitExpression[?In, ?Yield, ?Await] ? AssignmentExpression[+In, ?Yield, ?Await] : AssignmentExpression[?In, ?Yield, ?Await]

13.14.1 Çalışma Zamanı Anlambilimi: Değerlendirme

ConditionalExpression ConditionalExpression : ShortCircuitExpression ? AssignmentExpression : AssignmentExpression

  1. leftRef = ? Evaluation of ShortCircuitExpression olsun.

  2. leftValue = ToBoolean(? GetValue(leftRef)) olsun.

  3. Eğer leftValue true ise, o zaman

    1. trueRef = ? Evaluation of birinci AssignmentExpression olsun.

    2. ? GetValue(trueRef) döndür.

  4. falseRef = ? Evaluation of ikinci AssignmentExpression olsun.

  5. ? GetValue(falseRef) döndür.

13.15 Atama Operatörleri

Sözdizimi

AssignmentExpression AssignmentExpression[In, Yield, Await] : ConditionalExpression[?In, ?Yield, ?Await] [+Yield] YieldExpression[?In, ?Await] ArrowFunction[?In, ?Yield, ?Await] AsyncArrowFunction[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] = AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] AssignmentOperator AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] &&= AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] ||= AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] ??= AssignmentExpression[?In, ?Yield, ?Await]

AssignmentOperator AssignmentOperator : one of ***=** /= %= += -= <<=** **>>= >>>= &= ^= |= ****=**

13.15.1 Statik Anlambilim: Erken Hatalar

AssignmentExpression AssignmentExpression : LeftHandSideExpression = AssignmentExpression

AssignmentExpression AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression

AssignmentExpression AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression LeftHandSideExpression ||= AssignmentExpression LeftHandSideExpression ??= AssignmentExpression

13.15.2 Çalışma Zamanı Anlambilimi: Değerlendirme

AssignmentExpression AssignmentExpression : LeftHandSideExpression = AssignmentExpression

  1. Eğer LeftHandSideExpression ne bir ObjectLiteral ne de bir ArrayLiteral ise, o zaman

    1. leftRef = ? Evaluation of LeftHandSideExpression olsun.

    2. Eğer LeftHandSideExpression'in AssignmentTargetType değeri web-compat ise, bir ReferenceError kuraldışı durumu fırlat.

    3. Eğer IsAnonymousFunctionDefinition(AssignmentExpression) true ise ve LeftHandSideExpression'in IsIdentifierRef değeri true ise, o zaman

      1. lhs = LeftHandSideExpression'in StringValue değeri olsun.

      2. rightValue = ? AssignmentExpression'in lhs argümanıyla NamedEvaluation değeri olsun.

    4. Değilse,

      1. rightRef = ? Evaluation of AssignmentExpression olsun.

      2. rightValue = ? GetValue(rightRef) olsun.

    5. ? PutValue(leftRef, rightValue) işlemini gerçekleştir.

    6. rightValue döndür.

  2. assignmentPattern, LeftHandSideExpression tarafından kapsanan AssignmentPattern olsun.

  3. rightRef = ? Evaluation of AssignmentExpression olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. ? assignmentPattern'in rightValue argümanıyla DestructuringAssignmentEvaluation işlemini gerçekleştir.

  6. rightValue döndür.

AssignmentExpression AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression

  1. leftRef = ? Evaluation of LeftHandSideExpression olsun.

  2. Eğer LeftHandSideExpression'in AssignmentTargetType değeri web-compat ise, bir ReferenceError kuraldışı durumu fırlat.

  3. leftValue = ? GetValue(leftRef) olsun.

  4. rightRef = ? Evaluation of AssignmentExpression olsun.

  5. rightValue = ? GetValue(rightRef) olsun.

  6. assignmentOpText = AssignmentOperator tarafından eşleşen kaynak metin olsun.

  7. opText, aşağıdaki tabloda assignmentOpText ile ilişkili Unicode kod noktaları dizisi olsun:

assignmentOpText opText
**= **
*= *
/= /
%= %
+= +
-= -
<<= <<
>>= >>
>>>= >>>
&= &
^= ^
` =`
  1. result = ? ApplyStringOrNumericBinaryOperator(leftValue, opText, rightValue) olsun.

  2. ? PutValue(leftRef, result) işlemini gerçekleştir.

  3. result döndür.

AssignmentExpression AssignmentExpression : LeftHandSideExpression &&= AssignmentExpression

  1. leftRef = ? Evaluation of LeftHandSideExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. Eğer ToBoolean(leftValue) false ise, leftValue döndür.

  4. Eğer IsAnonymousFunctionDefinition(AssignmentExpression) true ise ve LeftHandSideExpression'in IsIdentifierRef değeri true ise, o zaman

    1. lhs = LeftHandSideExpression'in StringValue değeri olsun.

    2. rightValue = ? AssignmentExpression'in lhs argümanıyla NamedEvaluation değeri olsun.

  5. Değilse,

    1. rightRef = ? Evaluation of AssignmentExpression olsun.

    2. rightValue = ? GetValue(rightRef) olsun.

  6. ? PutValue(leftRef, rightValue) işlemini gerçekleştir.

  7. rightValue döndür.

AssignmentExpression AssignmentExpression : LeftHandSideExpression ||= AssignmentExpression

  1. leftRef = ? Evaluation of LeftHandSideExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. Eğer ToBoolean(leftValue) true ise, leftValue döndür.

  4. Eğer IsAnonymousFunctionDefinition(AssignmentExpression) true ise ve LeftHandSideExpression'in IsIdentifierRef değeri true ise, o zaman

    1. lhs = LeftHandSideExpression'in StringValue değeri olsun.

    2. rightValue = ? AssignmentExpression'in lhs argümanıyla NamedEvaluation değeri olsun.

  5. Değilse,

    1. rightRef = ? Evaluation of AssignmentExpression olsun.

    2. rightValue = ? GetValue(rightRef) olsun.

  6. ? PutValue(leftRef, rightValue) işlemini gerçekleştir.

  7. rightValue döndür.

AssignmentExpression AssignmentExpression : LeftHandSideExpression ??= AssignmentExpression

  1. leftRef = ? Evaluation of LeftHandSideExpression olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. Eğer leftValue, hem undefined hem de null değilse, leftValue döndür.

  4. Eğer IsAnonymousFunctionDefinition(AssignmentExpression) true ise ve LeftHandSideExpression'in IsIdentifierRef değeri true ise, o zaman

    1. lhs = LeftHandSideExpression'in StringValue değeri olsun.

    2. rightValue = ? AssignmentExpression'in lhs argümanıyla NamedEvaluation değeri olsun.

  5. Değilse,

    1. rightRef = ? Evaluation of AssignmentExpression olsun.

    2. rightValue = ? GetValue(rightRef) olsun.

  6. ? PutValue(leftRef, rightValue) işlemini gerçekleştir.

  7. rightValue döndür.

13.15.3 ApplyStringOrNumericBinaryOperator ( leftValue, opText, rightValue )

Soyut işlem ApplyStringOrNumericBinaryOperator, leftValue (bir ECMAScript dil değeri), opText (**, *, /, %, +, -, <<, >>, >>>, &, ^ veya |) ve rightValue (bir ECMAScript dil değeri) argümanlarını alır ve ya bir String, BigInt veya Number 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 opText + ise, o zaman

    1. leftPrimitive = ? ToPrimitive(leftValue) olsun.

    2. rightPrimitive = ? ToPrimitive(rightValue) olsun.

    3. Eğer leftPrimitive bir String ise veya rightPrimitive bir String ise, o zaman

      1. leftString = ? ToString(leftPrimitive) olsun.

      2. rightString = ? ToString(rightPrimitive) olsun.

      3. leftString ve rightString'in dizgi birleştirmesini döndür.

    4. leftValue = leftPrimitive olarak ayarla.

    5. rightValue = rightPrimitive olarak ayarla.

  2. NOTE: Bu noktada, işlemin sayısal bir işlem olması gerekir.

  3. leftNumber = ? ToNumeric(leftValue) olsun.

  4. rightNumber = ? ToNumeric(rightValue) olsun.

  5. Eğer SameType(leftNumber, rightNumber) false ise, bir TypeError istisnası fırlat.

  6. Eğer leftNumber bir BigInt ise, o zaman

    1. Eğer opText ** ise, ? BigInt::exponentiate(leftNumber, rightNumber) döndür.

    2. Eğer opText / ise, ? BigInt::divide(leftNumber, rightNumber) döndür.

    3. Eğer opText % ise, ? BigInt::remainder(leftNumber, rightNumber) döndür.

    4. Eğer opText >>> ise, ? BigInt::unsignedRightShift(leftNumber, rightNumber) döndür.

    5. operation, aşağıdaki tabloda opText ile ilişkilendirilmiş soyut işlem olsun:

    opText operation
    * BigInt::multiply
    + BigInt::add
    - BigInt::subtract
    << BigInt::leftShift
    >> BigInt::signedRightShift
    & BigInt::bitwiseAND
    ^ BigInt::bitwiseXOR
    ` `
  7. Değilse,

    1. Assert: leftNumber bir Number'dır.

    2. operation, aşağıdaki tabloda opText ile ilişkilendirilmiş soyut işlem olsun:

    opText operation
    ** Number::exponentiate
    * Number::multiply
    / Number::divide
    % Number::remainder
    + Number::add
    - Number::subtract
    << Number::leftShift
    >> Number::signedRightShift
    >>> Number::unsignedRightShift
    & Number::bitwiseAND
    ^ Number::bitwiseXOR
    ` `
  8. operation(leftNumber, rightNumber) döndür.

13.15.4 EvaluateStringOrNumericBinaryExpression ( leftOperand, opText, rightOperand )

EvaluateStringOrNumericBinaryExpression soyut işlemi leftOperand (bir Ayrıştırma Düğümü), opText (**, *, /, %, +, -, <<, >>, >>>, &, ^ veya |) ve rightOperand (bir Ayrıştırma Düğümü) argümanlarını alır ve bir String, bir BigInt veya bir Number içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. leftRef = ? Evaluation(leftOperand) olsun.

  2. leftValue = ? GetValue(leftRef) olsun.

  3. rightRef = ? Evaluation(rightOperand) olsun.

  4. rightValue = ? GetValue(rightRef) olsun.

  5. ? ApplyStringOrNumericBinaryOperator(leftValue, opText, rightValue) döndür.

13.15.5 Destructuring Assignment

Supplemental Syntax

Üretimin bir örneği işlenirken belirli durumlarda:

AssignmentExpression AssignmentExpression : LeftHandSideExpression = AssignmentExpression

LeftHandSideExpression yorumu aşağıdaki dil bilgisi kullanılarak netleştirilir:

AssignmentPattern AssignmentPattern[Yield, Await] : ObjectAssignmentPattern[?Yield, ?Await] ArrayAssignmentPattern[?Yield, ?Await]

ObjectAssignmentPattern ObjectAssignmentPattern[Yield, Await] : { } { AssignmentRestProperty[?Yield, ?Await] } { AssignmentPropertyList[?Yield, ?Await] } { AssignmentPropertyList[?Yield, ?Await] , AssignmentRestProperty[?Yield, ?Await]opt }

ArrayAssignmentPattern ArrayAssignmentPattern[Yield, Await] : [ Elisionopt AssignmentRestElement[?Yield, ?Await]opt ] [ AssignmentElementList[?Yield, ?Await] ] [ AssignmentElementList[?Yield, ?Await] , Elisionopt AssignmentRestElement[?Yield, ?Await]opt ]

AssignmentRestProperty AssignmentRestProperty[Yield, Await] : ... DestructuringAssignmentTarget[?Yield, ?Await]

AssignmentPropertyList AssignmentPropertyList[Yield, Await] : AssignmentProperty[?Yield, ?Await] AssignmentPropertyList[?Yield, ?Await] , AssignmentProperty[?Yield, ?Await]

AssignmentElementList AssignmentElementList[Yield, Await] : AssignmentElisionElement[?Yield, ?Await] AssignmentElementList[?Yield, ?Await] , AssignmentElisionElement[?Yield, ?Await]

AssignmentElisionElement AssignmentElisionElement[Yield, Await] : Elisionopt AssignmentElement[?Yield, ?Await]

AssignmentProperty AssignmentProperty[Yield, Await] : IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt PropertyName[?Yield, ?Await] : AssignmentElement[?Yield, ?Await]

AssignmentElement AssignmentElement[Yield, Await] : DestructuringAssignmentTarget[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt

AssignmentRestElement AssignmentRestElement[Yield, Await] : ... DestructuringAssignmentTarget[?Yield, ?Await]

DestructuringAssignmentTarget DestructuringAssignmentTarget[Yield, Await] : LeftHandSideExpression[?Yield, ?Await]

13.15.5.1 Statik Anlambilim: Erken Hatalar

AssignmentProperty AssignmentProperty : IdentifierReference Initializeropt

AssignmentRestProperty AssignmentRestProperty : ... DestructuringAssignmentTarget

DestructuringAssignmentTarget DestructuringAssignmentTarget : LeftHandSideExpression

13.15.5.2 Çalışma Zamanı Anlambilimi: DestructuringAssignmentEvaluation

Sözdizimi yönelimli işlem DestructuringAssignmentEvaluation, value (bir ECMAScript dil değeri) argümanını alır ve unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

ObjectAssignmentPattern ObjectAssignmentPattern : { }

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

  2. unused döndür.

ObjectAssignmentPattern ObjectAssignmentPattern : { AssignmentPropertyList } { AssignmentPropertyList , }

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

  2. ? AssignmentPropertyList'in value argümanıyla PropertyDestructuringAssignmentEvaluation işlemini gerçekleştir.

  3. unused döndür.

ObjectAssignmentPattern ObjectAssignmentPattern : { AssignmentRestProperty }

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

  2. excludedNames yeni ve boş bir Liste olsun.

  3. ? AssignmentRestProperty'in value ve excludedNames argümanlarıyla RestDestructuringAssignmentEvaluation değerini döndür.

ObjectAssignmentPattern ObjectAssignmentPattern : { AssignmentPropertyList , AssignmentRestProperty }

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

  2. excludedNames = ? AssignmentPropertyList'in value argümanıyla PropertyDestructuringAssignmentEvaluation değeri olsun.

  3. ? AssignmentRestProperty'in value ve excludedNames argümanlarıyla RestDestructuringAssignmentEvaluation değerini döndür.

ArrayAssignmentPattern ArrayAssignmentPattern : [ ]

  1. iteratorRecord = ? GetIterator(value, sync) olsun.

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

ArrayAssignmentPattern ArrayAssignmentPattern : [ Elision ]

  1. iteratorRecord = ? GetIterator(value, sync) olsun.

  2. result = Completion(Elision'ın iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değeri) olsun.

  3. Eğer iteratorRecord.[[Done]] false ise, ? IteratorClose(iteratorRecord, result) döndür.

  4. result döndür.

ArrayAssignmentPattern ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ]

  1. iteratorRecord = ? GetIterator(value, sync) olsun.

  2. Eğer Elision mevcutsa, o zaman

    1. status = Completion(Elision'ın iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değeri) olsun.

    2. Eğer status bir ani tamamlanma ise, o zaman

      1. Assert: iteratorRecord.[[Done]] true'dur.

      2. ? status döndür.

  3. result = Completion(AssignmentRestElement'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değeri) olsun.

  4. Eğer iteratorRecord.[[Done]] false ise, ? IteratorClose(iteratorRecord, result) döndür.

  5. result döndür.

ArrayAssignmentPattern ArrayAssignmentPattern : [ AssignmentElementList ]

  1. iteratorRecord = ? GetIterator(value, sync) olsun.

  2. result = Completion(AssignmentElementList'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değeri) olsun.

  3. Eğer iteratorRecord.[[Done]] false ise, ? IteratorClose(iteratorRecord, result) döndür.

  4. result döndür.

ArrayAssignmentPattern ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ]

  1. iteratorRecord = ? GetIterator(value, sync) olsun.

  2. status = Completion(AssignmentElementList'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değeri) olsun.

  3. Eğer status bir ani tamamlanma ise, o zaman

    1. Eğer iteratorRecord.[[Done]] false ise, ? IteratorClose(iteratorRecord, status) döndür.

    2. ? status döndür.

  4. Eğer Elision mevcutsa, o zaman

    1. status = Completion(Elision'ın iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değeri) olarak ayarla.

    2. Eğer status bir ani tamamlanma ise, o zaman

      1. Assert: iteratorRecord.[[Done]] true'dur.

      2. ? status döndür.

  5. Eğer AssignmentRestElement mevcutsa, o zaman

    1. status = Completion(AssignmentRestElement'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değeri) olarak ayarla.
  6. Eğer iteratorRecord.[[Done]] false ise, ? IteratorClose(iteratorRecord, status) döndür.

  7. ? status döndür.

13.15.5.3 Çalışma Zamanı Anlambilimi: PropertyDestructuringAssignmentEvaluation

Sözdizimi yönelimli işlem PropertyDestructuringAssignmentEvaluation, value (bir ECMAScript dil değeri) argümanını alır ve ya özellik anahtarlarının bir Listesini içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Yok edilmiş tüm özellik anahtarlarının bir listesini toplar. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AssignmentPropertyList AssignmentPropertyList : AssignmentPropertyList , AssignmentProperty

  1. propertyNames = ? AssignmentPropertyList'in value argümanıyla PropertyDestructuringAssignmentEvaluation değeri olsun.

  2. nextNames = ? AssignmentProperty'in value argümanıyla PropertyDestructuringAssignmentEvaluation değeri olsun.

  3. propertyNames ve nextNames'in liste birleştirmesini döndür.

AssignmentProperty AssignmentProperty : IdentifierReference Initializeropt

  1. propertyName, IdentifierReference'ın StringValue değeri olsun.

  2. leftRef = ? ResolveBinding(propertyName) olsun.

  3. value = ? GetV(value, propertyName) olarak ayarla.

  4. Eğer Initializer mevcutsa ve value undefined ise, o zaman

    1. Eğer IsAnonymousFunctionDefinition(Initializer) true ise, o zaman

      1. value = ? Initializer'ın propertyName argümanıyla NamedEvaluation değeri olarak ayarla.
    2. Değilse,

      1. defaultValue = ? Evaluation(Initializer) olsun.

      2. value = ? GetValue(defaultValue) olarak ayarla.

  5. ? PutValue(leftRef, value) işlemini gerçekleştir.

  6. « propertyName » döndür.

AssignmentProperty AssignmentProperty : PropertyName : AssignmentElement

  1. name = ? Evaluation(PropertyName) olsun.

  2. ? AssignmentElement'in value ve name argümanıyla KeyedDestructuringAssignmentEvaluation işlemini gerçekleştir.

  3. « name » döndür.

13.15.5.4 Çalışma Zamanı Anlambilimi: RestDestructuringAssignmentEvaluation

Sözdizimi yönelimli işlem RestDestructuringAssignmentEvaluation, value (bir ECMAScript dil değeri) ve excludedNames (özellik anahtarlarından oluşan bir Liste) argümanlarını alır ve unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AssignmentRestProperty AssignmentRestProperty : ... DestructuringAssignmentTarget

  1. leftRef = ? Evaluation(DestructuringAssignmentTarget) olsun.

  2. restObj = OrdinaryObjectCreate(%Object.prototype%) olsun.

  3. ? CopyDataProperties(restObj, value, excludedNames) işlemini gerçekleştir.

  4. ? PutValue(leftRef, restObj) döndür.

13.15.5.5 Çalışma Zamanı Anlambilimi: IteratorDestructuringAssignmentEvaluation

Sözdizimi yönelimli işlem IteratorDestructuringAssignmentEvaluation, iteratorRecord (bir Iterator Record) argümanını alır ve unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AssignmentElementList AssignmentElementList : AssignmentElisionElement

  1. ? AssignmentElisionElement'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değerini döndür.

AssignmentElementList AssignmentElementList : AssignmentElementList , AssignmentElisionElement

  1. ? AssignmentElementList'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation işlemini gerçekleştir.

  2. ? AssignmentElisionElement'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değerini döndür.

AssignmentElisionElement AssignmentElisionElement : AssignmentElement

  1. ? AssignmentElement'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değerini döndür.

AssignmentElisionElement AssignmentElisionElement : Elision AssignmentElement

  1. ? Elision'ın iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation işlemini gerçekleştir.

  2. ? AssignmentElement'in iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation değerini döndür.

Elision Elision : ,

  1. Eğer iteratorRecord.[[Done]] false ise, o zaman

    1. ? IteratorStep(iteratorRecord) işlemini gerçekleştir.
  2. unused döndür.

Elision Elision : Elision ,

  1. ? Elision'ın iteratorRecord argümanıyla IteratorDestructuringAssignmentEvaluation işlemini gerçekleştir.

  2. Eğer iteratorRecord.[[Done]] false ise, o zaman

    1. ? IteratorStep(iteratorRecord) işlemini gerçekleştir.
  3. unused döndür.

AssignmentElement AssignmentElement : DestructuringAssignmentTarget Initializeropt

  1. Eğer DestructuringAssignmentTarget ne bir ObjectLiteral ne de bir ArrayLiteral ise, o zaman

    1. leftRef = ? Evaluation(DestructuringAssignmentTarget) olsun.
  2. value undefined olsun.

  3. Eğer iteratorRecord.[[Done]] false ise, o zaman

    1. next = ? IteratorStepValue(iteratorRecord) olsun.

    2. Eğer next done değilse, o zaman

      1. value = next olarak ayarla.
  4. Eğer Initializer mevcutsa ve value undefined ise, o zaman

    1. Eğer IsAnonymousFunctionDefinition(Initializer) true ise ve DestructuringAssignmentTarget'ın IsIdentifierRef değeri true ise, o zaman

      1. target, DestructuringAssignmentTarget'ın StringValue değeri olsun.

      2. v = ? Initializer'ın target argümanıyla NamedEvaluation değeri olsun.

    2. Değilse,

      1. defaultValue = ? Evaluation(Initializer) olsun.

      2. v = ? GetValue(defaultValue) olsun.

  5. Değilse,

    1. v = value olsun.
  6. Eğer DestructuringAssignmentTarget bir ObjectLiteral veya bir ArrayLiteral ise, o zaman

    1. nestedAssignmentPattern, DestructuringAssignmentTarget tarafından kapsanan AssignmentPattern olsun.

    2. ? nestedAssignmentPattern'ın v argümanıyla DestructuringAssignmentEvaluation değerini döndür.

  7. ? PutValue(leftRef, v) döndür.

AssignmentRestElement AssignmentRestElement : ... DestructuringAssignmentTarget

  1. Eğer DestructuringAssignmentTarget ne bir ObjectLiteral ne de bir ArrayLiteral ise, o zaman

    1. leftRef = ? Evaluation(DestructuringAssignmentTarget) olsun.
  2. array = ! ArrayCreate(0) olsun.

  3. n = 0 olsun.

  4. iteratorRecord.[[Done]] false iken tekrar et,

    1. next = ? IteratorStepValue(iteratorRecord) olsun.

    2. Eğer next done değilse, o zaman

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

      2. n = n + 1 olarak ayarla.

  5. Eğer DestructuringAssignmentTarget ne bir ObjectLiteral ne de bir ArrayLiteral ise, o zaman

    1. ? PutValue(leftRef, array) döndür.
  6. nestedAssignmentPattern, DestructuringAssignmentTarget tarafından kapsanan AssignmentPattern olsun.

  7. ? nestedAssignmentPattern'ın array argümanıyla DestructuringAssignmentEvaluation değerini döndür.

13.15.5.6 Çalışma Zamanı Anlambilimi: KeyedDestructuringAssignmentEvaluation

Sözdizimi yönelimli işlem KeyedDestructuringAssignmentEvaluation, value (bir ECMAScript dil değeri) ve propertyName (bir özellik anahtarı) argümanlarını alır ve ya unused içeren bir normal tamamlanma ya da bir ani tamamlanma döndürür. Aşağıdaki üretimler üzerinden parça parça tanımlanır:

AssignmentElement AssignmentElement : DestructuringAssignmentTarget Initializeropt

  1. Eğer DestructuringAssignmentTarget ne bir ObjectLiteral ne de bir ArrayLiteral ise, o zaman

    1. leftRef = ? Evaluation(DestructuringAssignmentTarget) olsun.
  2. value = ? GetV(value, propertyName) olarak ayarla.

  3. Eğer Initializer mevcutsa ve value undefined ise, o zaman

    1. Eğer IsAnonymousFunctionDefinition(Initializer) true ise ve DestructuringAssignmentTarget'ın IsIdentifierRef değeri true ise, o zaman

      1. target, DestructuringAssignmentTarget'ın StringValue değeri olsun.

      2. rhsValue = ? Initializer'ın target argümanıyla NamedEvaluation değeri olsun.

    2. Değilse,

      1. defaultValue = ? Evaluation(Initializer) olsun.

      2. rhsValue = ? GetValue(defaultValue) olsun.

  4. Değilse,

    1. rhsValue = value olsun.
  5. Eğer DestructuringAssignmentTarget bir ObjectLiteral veya bir ArrayLiteral ise, o zaman

    1. assignmentPattern, DestructuringAssignmentTarget tarafından kapsanan AssignmentPattern olsun.

    2. ? assignmentPattern'ın rhsValue argümanıyla DestructuringAssignmentEvaluation değerini döndür.

  6. ? PutValue(leftRef, rhsValue) döndür.

13.16 Virgül Operatörü ( , )

Sözdizimi

Expression Expression[In, Yield, Await] : AssignmentExpression[?In, ?Yield, ?Await] Expression[?In, ?Yield, ?Await] , AssignmentExpression[?In, ?Yield, ?Await]

13.16.1 Çalışma Zamanı Anlambilimi: Değerlendirme

Expression Expression : Expression , AssignmentExpression

  1. leftRef = ? Evaluation(Expression) olsun.

  2. ? GetValue(leftRef) işlemini gerçekleştir.

  3. rightRef = ? Evaluation(AssignmentExpression) olsun.

  4. ? GetValue(rightRef) döndür.