← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
Ek B (normatif)

Web Tarayıcıları için Ek ECMAScript Özellikleri

Bu ekte tanımlanan ECMAScript dili sözdizimi ve anlambilimi, ECMAScript barındırıcısının bir web tarayıcısı olduğu durumlarda zorunludur. ECMAScript barındırıcısının bir web tarayıcısı olmadığı durumlarda bu ekin içeriği normatiftir ancak isteğe bağlıdır.

Bu ekte tanımlanan bazı özellikler bu ek içinde belirtilmiş, bazıları ise bu belgenin ana gövdesinde belirtilmiştir.

Bir özellik ana gövdede belirtildiğinde, belgeyi etkilediği her nokta renkli bir kutu içinde "Normatif İsteğe Bağlı" sözcükleriyle işaretlenir. Dahası, özelliğin bir algoritma veya erken hata kuralında belirli bir ifadeyi içerdiği durumlarda, bu, "barındırıcının" ilgili özelliği "desteklemesi" koşuluyla korunur. Web tarayıcılarının bu tür tüm özellikleri desteklemesi gerekir.

B.1 Ek Sözdizimi

B.1.1 HTML-like Yorumlar

Kaynak metin hedef sembolü Module kullanılarak ayrıştırılırken bu genişletmeye izin verilmemesi dışında, 12.4 sözdizimi ve anlambilimi aşağıdaki gibi genişletilir:

Sözdizimi

InputElementHashbangOrRegExp InputElementHashbangOrRegExp :: WhiteSpace LineTerminator Comment CommonToken HashbangComment RegularExpressionLiteral HTMLCloseComment

Comment Comment :: MultiLineComment SingleLineComment SingleLineHTMLOpenComment SingleLineHTMLCloseComment SingleLineDelimitedComment

MultiLineComment MultiLineComment :: /* FirstCommentLineopt LineTerminator MultiLineCommentCharsopt ***/** HTMLCloseCommentopt

FirstCommentLine FirstCommentLine :: SingleLineDelimitedCommentChars

SingleLineHTMLOpenComment SingleLineHTMLOpenComment :: <!-- SingleLineCommentCharsopt

SingleLineHTMLCloseComment SingleLineHTMLCloseComment :: LineTerminatorSequence HTMLCloseComment

SingleLineDelimitedComment SingleLineDelimitedComment :: /* SingleLineDelimitedCommentCharsopt ***/**

HTMLCloseComment HTMLCloseComment :: WhiteSpaceSequenceopt SingleLineDelimitedCommentSequenceopt --> SingleLineCommentCharsopt

SingleLineDelimitedCommentChars SingleLineDelimitedCommentChars :: SingleLineNotAsteriskChar SingleLineDelimitedCommentCharsopt ***** SingleLinePostAsteriskCommentCharsopt

SingleLineNotAsteriskChar SingleLineNotAsteriskChar :: SourceCharacter but not one of ***** or LineTerminator

SingleLinePostAsteriskCommentChars SingleLinePostAsteriskCommentChars :: SingleLineNotForwardSlashOrAsteriskChar SingleLineDelimitedCommentCharsopt ***** SingleLinePostAsteriskCommentCharsopt

SingleLineNotForwardSlashOrAsteriskChar SingleLineNotForwardSlashOrAsteriskChar :: SourceCharacter but not one of / or ***** or LineTerminator

WhiteSpaceSequence WhiteSpaceSequence :: WhiteSpace WhiteSpaceSequenceopt

SingleLineDelimitedCommentSequence SingleLineDelimitedCommentSequence :: SingleLineDelimitedComment WhiteSpaceSequenceopt SingleLineDelimitedCommentSequenceopt

Bir satır sonlandırıcı kod noktası içeren bir MultiLineComment'e benzer şekilde, bir SingleLineHTMLCloseComment, sözdizimsel dilbilgisi tarafından ayrıştırma amacıyla bir LineTerminator olarak kabul edilir.

B.1.2 Düzenli İfade Şablonları

22.2.1 sözdizimi aşağıdaki gibi değiştirilmiş ve genişletilmiştir. Bu değişiklikler, dilbilgisi kurallarının sıralanması ve bağlamsal bilgilerle giderilen belirsizliklere yol açar. Aşağıdaki dilbilgisi kullanılarak ayrıştırma yapılırken, her bir alternatif ancak önceki kural alternatifleri eşleşmediğinde dikkate alınır.

Bu alternatif şablon dilbilgisi ve anlambilimi, yalnızca BMP şablonlarının sözdizimini ve anlambilimini değiştirir. Aşağıdaki dilbilgisi genişletmeleri, [UnicodeMode] parametresi ile parametrelendirilmiş kuralları içerir. Ancak, bu genişletmelerin hiçbiri, hedef sembolü üzerinde [UnicodeMode] parametresi mevcutken ayrıştırma yapıldığında tanınan Unicode şablonlarının sözdizimini değiştirmez.

Sözdizimi

Term Term[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: [+UnicodeMode] Assertion[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] [+UnicodeMode] Atom[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Quantifier [+UnicodeMode] Atom[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] [~UnicodeMode] QuantifiableAssertion[?NamedCaptureGroups] Quantifier [~UnicodeMode] Assertion[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] [~UnicodeMode] ExtendedAtom[?NamedCaptureGroups] Quantifier [~UnicodeMode] ExtendedAtom[?NamedCaptureGroups]

Assertion Assertion[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: ^ $ \b \B [+UnicodeMode] (?= Disjunction[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) [+UnicodeMode] (?! Disjunction[+UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) [~UnicodeMode] QuantifiableAssertion[?NamedCaptureGroups] (?<= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] )

QuantifiableAssertion QuantifiableAssertion[NamedCaptureGroups] :: (?= Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) (?! Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] )

ExtendedAtom ExtendedAtom[NamedCaptureGroups] :: . **** AtomEscape[~UnicodeMode, ?NamedCaptureGroups] **** [lookahead = c] CharacterClass[~UnicodeMode, ~UnicodeSetsMode] ( GroupSpecifier[~UnicodeMode]opt Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers : Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction[~UnicodeMode, ~UnicodeSetsMode, ?NamedCaptureGroups] ) InvalidBracedQuantifier ExtendedPatternCharacter

InvalidBracedQuantifier InvalidBracedQuantifier :: { DecimalDigits[~Sep] } { DecimalDigits[~Sep] ,} { DecimalDigits[~Sep] , DecimalDigits[~Sep] }

ExtendedPatternCharacter ExtendedPatternCharacter :: SourceCharacter but not one of ^ $ **** . ***** + ? ( ) [ |

AtomEscape AtomEscape[UnicodeMode, NamedCaptureGroups] :: [+UnicodeMode] DecimalEscape [~UnicodeMode] DecimalEscape but only if the CapturingGroupNumber of DecimalEscape is ≤ CountLeftCapturingParensWithin(the Pattern containing DecimalEscape) CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode, ?NamedCaptureGroups] [+NamedCaptureGroups] k GroupName[?UnicodeMode]

CharacterEscape CharacterEscape[UnicodeMode, NamedCaptureGroups] :: ControlEscape c AsciiLetter 0 [lookahead ∉ DecimalDigit] HexEscapeSequence RegExpUnicodeEscapeSequence[?UnicodeMode] [~UnicodeMode] LegacyOctalEscapeSequence IdentityEscape[?UnicodeMode, ?NamedCaptureGroups]

IdentityEscape IdentityEscape[UnicodeMode, NamedCaptureGroups] :: [+UnicodeMode] SyntaxCharacter [+UnicodeMode] / [~UnicodeMode] SourceCharacterIdentityEscape[?NamedCaptureGroups]

SourceCharacterIdentityEscape SourceCharacterIdentityEscape[NamedCaptureGroups] :: [~NamedCaptureGroups] SourceCharacter but not c [+NamedCaptureGroups] SourceCharacter but not one of c or k

ClassAtomNoDash ClassAtomNoDash[UnicodeMode, NamedCaptureGroups] :: SourceCharacter but not one of **** or ] or - **** ClassEscape[?UnicodeMode, ?NamedCaptureGroups] **** [lookahead = c]

ClassEscape ClassEscape[UnicodeMode, NamedCaptureGroups] :: b [+UnicodeMode] - [~UnicodeMode] c ClassControlLetter CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode, ?NamedCaptureGroups]

ClassControlLetter ClassControlLetter :: DecimalDigit _

B.1.2.1 Statik Anlambilim: Erken Hatalar

22.2.1.1 anlambilimi aşağıdaki gibi genişletilir:

ExtendedAtom ExtendedAtom :: InvalidBracedQuantifier

  • Bu kural tarafından herhangi bir kaynak metin eşleştirilirse bu bir Sözdizimi Hatasıdır (Syntax Error).

Ek olarak, aşağıdaki kurallara ilişkin kurallar, vurgulanan metnin eklenmesiyle değiştirilmiştir:

NonemptyClassRanges NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents

NonemptyClassRangesNoDash NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents

B.1.2.2 Statik Anlambilim: CountLeftCapturingParensWithin ve CountLeftCapturingParensBefore

CountLeftCapturingParensWithin ve CountLeftCapturingParensBefore tanımlarında geçen “

Atom Atom :: ( GroupSpecifieropt Disjunction )

” ifadeleri, “

Atom Atom :: ( GroupSpecifieropt Disjunction )

” veya “

ExtendedAtom ExtendedAtom :: ( GroupSpecifieropt Disjunction )

” anlamına geliyor olarak yorumlanacaktır.

B.1.2.3 Statik Anlambilim: IsCharacterClass

22.2.1.6 anlambilimi aşağıdaki gibi genişletilir:

ClassAtomNoDash ClassAtomNoDash :: **** [lookahead = c]

  1. false döndür.

B.1.2.4 Statik Anlambilim: CharacterValue

22.2.1.7 anlambilimi aşağıdaki gibi genişletilir:

ClassAtomNoDash ClassAtomNoDash :: **** [lookahead = c]

  1. U+005C (REVERSE SOLIDUS) karakterinin sayısal değerini döndür.

ClassEscape ClassEscape :: c ClassControlLetter

  1. codePoint, ClassControlLetter tarafından eşleşen kod noktası olsun.

  2. i, codePoint kod noktasının sayısal değeri olsun.

  3. i'nin 32'ye bölümünden kalanı döndür.

CharacterEscape CharacterEscape :: LegacyOctalEscapeSequence

  1. LegacyOctalEscapeSequence kuralının MV değerini döndür (bkz. 12.9.4.3).

B.1.2.5 Çalışma Zamanı Anlambilimi: CompileSubpattern

CompileSubpattern anlambilimi aşağıdaki gibi genişletilir:

Şu kural:

Term Term :: QuantifiableAssertion Quantifier

şununla aynıdır:

Term Term :: Atom Quantifier

ancak Atom yerine QuantifiableAssertion ikame edilir.

Şu kural:

Term Term :: ExtendedAtom Quantifier

şununla aynıdır:

Term Term :: Atom Quantifier

ancak Atom yerine ExtendedAtom ikame edilir.

Şu kural:

Term Term :: ExtendedAtom

şununla aynıdır:

Term Term :: Atom

ancak Atom yerine ExtendedAtom ikame edilir.

B.1.2.6 Çalışma Zamanı Anlambilimi: CompileAssertion

Şu kurallar için CompileAssertion kuralları:

Assertion Assertion :: (?= Disjunction )

ve

Assertion Assertion :: (?! Disjunction )

kuralları, Assertion yerine QuantifiableAssertion ikame edilerek QuantifiableAssertion kuralları için de kullanılır.

B.1.2.7 Çalışma Zamanı Anlambilimi: CompileAtom

Şu kural hariç, Atom kuralları için CompileAtom kuralları:

Atom Atom :: PatternCharacter

Atom yerine ExtendedAtom ikame edilerek ExtendedAtom kuralları için de kullanılır. direction parametresine sahip aşağıdaki kurallar da eklenmiştir:

ExtendedAtom ExtendedAtom :: **** [lookahead = c]

  1. charSet, tek \\ U+005C (REVERSE SOLIDUS) karakterini içeren CharSet olsun.

  2. CharacterSetMatcher(regexpRecord, charSet, false, direction) sonucunu döndür.

ExtendedAtom ExtendedAtom :: ExtendedPatternCharacter

  1. char, ExtendedPatternCharacter tarafından temsil edilen karakter olsun.

  2. charSet, char karakterini içeren tek elemanlı bir CharSet olsun.

  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) sonucunu döndür.

B.1.2.8 Çalışma Zamanı Anlambilimi: CompileToCharSet

22.2.2.9 anlambilimi aşağıdaki gibi genişletilir:

Aşağıdaki iki kural, CompileToCharSet'in karşılık gelen kurallarının yerini alır.

NonemptyClassRanges NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents

  1. charSet, regexpRecord argümanıyla ilk ClassAtom için CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanıyla ikinci ClassAtom için CompileToCharSet değeri olsun.

  3. remainingSet, regexpRecord argümanıyla ClassContents için CompileToCharSet değeri olsun.

  4. rangeSet, CharacterRangeOrUnion(regexpRecord, charSet, otherSet) olsun.

  5. rangeSet ve remainingSet birleşimini döndür.

NonemptyClassRangesNoDash NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents

  1. charSet, regexpRecord argümanıyla ClassAtomNoDash için CompileToCharSet değeri olsun.

  2. otherSet, regexpRecord argümanıyla ClassAtom için CompileToCharSet değeri olsun.

  3. remainingSet, regexpRecord argümanıyla ClassContents için CompileToCharSet değeri olsun.

  4. rangeSet, CharacterRangeOrUnion(regexpRecord, charSet, otherSet) olsun.

  5. rangeSet ve remainingSet birleşimini döndür.

Ek olarak, CompileToCharSet kuralına aşağıdaki kurallar eklenmiştir.

ClassEscape ClassEscape :: c ClassControlLetter

  1. charValue, bu ClassEscape için CharacterValue değeri olsun.

  2. char, karakter değeri charValue olan karakter olsun.

  3. Tek char karakterini içeren CharSet döndür.

ClassAtomNoDash ClassAtomNoDash :: **** [lookahead = c]

  1. Tek \\ U+005C (REVERSE SOLIDUS) karakterini içeren CharSet döndür.

Bu kurala yalnızca bir karakter sınıfı içindeki, kabul edilebilir bir kontrol karakteri tarafından takip edilmeyen \\c diziliminden ulaşılabilir. This production can only be reached from the sequence \c within a character class where it is not followed by an acceptable control character.

B.1.2.8.1 CharacterRangeOrUnion ( regexpRecord, charSet, otherSet )

Soyut işlem CharacterRangeOrUnion, regexpRecord (bir RegExp Record), charSet (bir CharSet) ve otherSet (bir CharSet) argümanlarını alır ve bir CharSet döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. HasEitherUnicodeFlag(regexpRecord) değeri false ise, o zaman

    1. charSet tam olarak bir karakter içermiyorsa veya otherSet tam olarak bir karakter içermiyorsa, o zaman

      1. remainingSet, tek - U+002D (HYPHEN-MINUS) karakterini içeren CharSet olsun.

      2. charSet, otherSet ve remainingSet CharSet birleşimini döndür.

  2. CharacterRange(charSet, otherSet) döndür.

B.1.2.9 Statik Anlambilim: ParsePattern ( patternText, u, v )

22.2.3.4 anlambilimi aşağıdaki gibi genişletilir:

Soyut işlem ParsePattern, patternText (bir Unicode kod noktaları dizisi), u (bir Boolean) ve v (bir Boolean) argümanlarını alır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. v değeri true ve u değeri true ise, o zaman

    1. parseResult, bir veya daha fazla SyntaxError nesnesi içeren bir Liste olsun.
  2. Aksi takdirde, eğer v değeri true ise, o zaman

    1. parseResult, ParseText(patternText, Pattern[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]) olsun.
  3. Aksi takdirde, eğer u değeri true ise, o zaman

    1. parseResult, ParseText(patternText, Pattern[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) olsun.
  4. Aksi takdirde,

    1. parseResult, ParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, ~NamedCaptureGroups]) olsun.

    2. parseResult bir Parse Node ise ve parseResult bir GroupName içeriyorsa, o zaman

      1. parseResult değerini ParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) olarak ayarla.
  5. parseResult döndür.

B.2 Ek Yerleşik Özellikler

ECMAScript barındırıcısı bir web tarayıcısı olduğunda, standart yerleşik nesnelerin aşağıdaki ek özellikleri tanımlanır.

B.2.1 Global Nesnenin Ek Özellikleri

Tablo 98'deki girdiler Tablo 6'ya eklenir.

Tablo 98: Ek Bilinen İçsel Nesneler

İçsel Ad Global Ad ECMAScript Dil İlişkilendirmesi
%escape% "escape" escape fonksiyonu (B.2.1.1)
%unescape% "unescape" unescape fonksiyonu (B.2.1.2)

B.2.1.1 escape ( string )

Bu fonksiyon, global nesnenin bir özelliğidir. Belirli kod birimlerinin (code units) onaltılık (hexadecimal) bir kaçış dizisiyle (escape sequence) değiştirildiği bir String değerinin yeni bir versiyonunu hesaplar.

Sayısal değeri 0x00FF'ye eşit veya daha küçük olan bir kod birimi değiştirilirken %*xx* biçiminde iki basamaklı bir kaçış dizisi kullanılır. Sayısal değeri kesin olarak 0x00FF'den büyük olan bir kod birimi değiştirilirken %u*xxxx* biçiminde dört basamaklı bir kaçış dizisi kullanılır.

Bu, %escape% içsel (intrinsic) nesnesidir.

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

  1. string değerini ? ToString(string) olarak ayarla.

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

  3. result, boş String olsun.

  4. unescapedSet, ASCII sözcük karakterleri (ASCII word characters) ile "@*+-./" ifadesinin string birleştirmesi (string-concatenation) olsun.

  5. k, 0 olsun.

  6. Repeat, while k < length,

    1. codeUnit, string içindeki k dizinindeki (index) kod birimi olsun.

    2. If unescapedSet contains codeUnit, then

      1. nextPart, codeUnit olsun.
    3. Else,

      1. codeUnitNumber, codeUnit'in sayısal değeri olsun.

      2. If codeUnitNumber < 256, then

         1. *hex*, *codeUnitNumber*'ın büyük harfli onaltılık sayı olarak biçimlendirilmiş String temsili olsun.
        
         2. *nextPart*, `"%"` ile [StringPad](23_sec-text-processing.md#sec-stringpad)(*hex*, 2, `"0"`, `start`) fonksiyonunun [string birleştirmesi (string-concatenation)](07_sec-ecmascript-data-types-and-values.md#string-concatenation) olsun.
      3. Else,

         1. *hex*, *codeUnitNumber*'ın büyük harfli onaltılık sayı olarak biçimlendirilmiş String temsili olsun.
        
         2. *nextPart*, `"%u"` ile [StringPad](23_sec-text-processing.md#sec-stringpad)(*hex*, 4, `"0"`, `start`) fonksiyonunun [string birleştirmesi (string-concatenation)](07_sec-ecmascript-data-types-and-values.md#string-concatenation) olsun.
    4. result değerini, result ile nextPart'ın string birleştirmesi (string-concatenation) olarak ayarla.

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

  7. result döndür.

B.2.1.2 unescape ( string )

Bu fonksiyon, global nesnenin bir özelliğidir. escape fonksiyonu tarafından sunulmuş olabilecek türdeki her bir kaçış dizisinin (escape sequence), temsil ettiği kod birimi ile değiştirildiği bir String değerinin yeni bir versiyonunu hesaplar.

Bu, %unescape% içsel (intrinsic) nesnesidir.

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

  1. string değerini ? ToString(string) olarak ayarla.

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

  3. result, boş String olsun.

  4. k, 0 olsun.

  5. Repeat, while k < length,

    1. codeUnit, string içindeki k dizinindeki (index) kod birimi olsun.

    2. If codeUnit is the code unit 0x0025 (PERCENT SIGN), then

      1. hexDigits, boş String olsun.

      2. optionalAdvance, 0 olsun.

      3. If k + 5 < length and the code unit at index k + 1 within string is the code unit 0x0075 (LATIN SMALL LETTER U), then

         1. *hexDigits* değerini, *string*'in *k* + 2'den *k* + 6'ya kadar olan [alt dizesi (substring)](07_sec-ecmascript-data-types-and-values.md#substring) olarak ayarla.
        
         2. *optionalAdvance* değerini 5 olarak ayarla.
      4. Else if k + 3 ≤ length, then

         1. *hexDigits* değerini, *string*'in *k* + 1'den *k* + 3'e kadar olan [alt dizesi (substring)](07_sec-ecmascript-data-types-and-values.md#substring) olarak ayarla.
        
         2. *optionalAdvance* değerini 2 olarak ayarla.
      5. parseResult, ParseText(hexDigits, HexDigits[~Sep]) olsun.

      6. If parseResult is a Parse Node, then

         1. *codeUnitNumber*, *parseResult*'ın MV değeri olsun.
        
         2. *codeUnit* değerini, sayısal değeri *codeUnitNumber* olan kod birimi olarak ayarla.
        
         3. *k* değerini *k* + *optionalAdvance* olarak ayarla.
    3. result değerini, result ile codeUnit'in string birleştirmesi (string-concatenation) olarak ayarla.

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

  6. result döndür.

B.2.2 String.prototype Nesnesinin Ek Özellikleri

B.2.2.1 String.prototype.substr ( start, length )

Bu metot, this değerinin bir String'e dönüştürülmesi sonucunun, start dizininden başlayan ve length kadar kod birimi boyunca (veya length değeri undefined ise String'in sonuna kadar) devam eden bir alt dizgisini (substring) döndürür. Eğer start negatifse, sourceLength değerinin String'in uzunluğu olduğu durumda sourceLength + start olarak değerlendirilir. Sonuç bir String nesnesi değil, bir String değeridir.

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

  1. obj, this değeri olsun.

  2. ? RequireObjectCoercible(obj) işlemini gerçekleştir.

  3. string, ? ToString(obj) olsun.

  4. size, string dizgisinin uzunluğu olsun.

  5. intStart, ? ToIntegerOrInfinity(start) olsun.

  6. Eğer intStart = -∞ ise, intStart değerini 0 olarak ayarla.

  7. Aksi takdirde, eğer intStart < 0 ise, intStart değerini max(size + intStart, 0) olarak ayarla.

  8. Aksi takdirde, intStart değerini min(intStart, size) olarak ayarla.

  9. Eğer length undefined ise, intLength, size olsun; aksi takdirde intLength, ? ToIntegerOrInfinity(length) olsun.

  10. intLength değerini, intLength değerinin 0 ile size arasında sınırlandırılmasının (clamping) sonucu olarak ayarla.

  11. intEnd, min(intStart + intLength, size) olsun.

  12. string dizgisinin intStart konumundan intEnd konumuna kadar olan alt dizgisini (substring) döndür.

B.2.2.2 String.prototype.anchor ( name )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "a", "name", name) sonucunu döndür.

B.2.2.2.1 CreateHTML ( contents, tag, attr, attrValue )

Soyut işlem CreateHTML, contents (bir ECMAScript dil değeri (ECMAScript language value)), tag (bir String), attr (bir String) ve attrValue (bir ECMAScript dil değeri (ECMAScript language value)) argümanlarını alır ve ya bir String içeren olağan tamamlanma (normal completion containing) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

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

  2. contentsString, ? ToString(contents) olsun.

  3. part1, "<" ile tag'in string birleştirmesi (string-concatenation) olsun.

  4. Eğer attr boş String değilse, o zaman

    1. attrValueString, ? ToString(attrValue) olsun.

    2. escapedAttrValue, attrValueString içindeki her 0x0022 (QUOTATION MARK) kod birimi oluşumunun altı kod birimli "&quot;" dizisi ile değiştirilmesi dışında attrValueString ile aynı olan String değeri olsun.

    3. part1 değerini şunların string birleştirmesi (string-concatenation) olarak ayarla:

      • part1

      • 0x0020 (SPACE) kod birimi

      • attr

      • 0x003D (EQUALS SIGN) kod birimi

      • 0x0022 (QUOTATION MARK) kod birimi

      • escapedAttrValue

      • 0x0022 (QUOTATION MARK) kod birimi

  5. part2, part1 ile ">" ifadesinin string birleştirmesi (string-concatenation) olsun.

  6. part3, part2 ile contentsString'in string birleştirmesi (string-concatenation) olsun.

  7. part4, part3, "</", tag ve ">" ifadelerinin string birleştirmesi (string-concatenation) olsun.

  8. part4 döndür.

B.2.2.3 String.prototype.big ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "big", "", "") sonucunu döndür.

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "blink", "", "") sonucunu döndür.

B.2.2.5 String.prototype.bold ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "b", "", "") sonucunu döndür.

B.2.2.6 String.prototype.fixed ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "tt", "", "") sonucunu döndür.

B.2.2.7 String.prototype.fontcolor ( colour )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "font", "color", colour) sonucunu döndür.

B.2.2.8 String.prototype.fontsize ( size )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "font", "size", size) sonucunu döndür.

B.2.2.9 String.prototype.italics ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "i", "", "") sonucunu döndür.

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "a", "href", url) sonucunu döndür.

B.2.2.11 String.prototype.small ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "small", "", "") sonucunu döndür.

B.2.2.12 String.prototype.strike ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "strike", "", "") sonucunu döndür.

B.2.2.13 String.prototype.sub ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "sub", "", "") sonucunu döndür.

B.2.2.14 String.prototype.sup ( )

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

  1. string, this değeri olsun.

  2. ? CreateHTML(string, "sup", "", "") sonucunu döndür.

B.2.2.15 String.prototype.trimLeft ( )

"trimLeft" özelliğinin ilk değeri, 22.1.3.34 içinde tanımlanan %String.prototype.trimStart% değeridir.

B.2.2.16 String.prototype.trimRight ( )

"trimRight" özelliğinin ilk değeri, 22.1.3.33 içinde tanımlanan %String.prototype.trimEnd% değeridir.

B.2.3 Date.prototype Nesnesinin Ek Özellikleri

B.2.3.1 Date.prototype.getYear ( )

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

  1. dateObj, this değeri olsun.

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

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. YearFromTime(LocalTime(tv)) - 1900𝐽 sonucunu döndür.

B.2.3.2 Date.prototype.setYear ( year )

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

  1. dateObj, this değeri olsun.

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

  3. time, dateObj.[[DateValue]] olsun.

  4. year, ? ToNumber(year) olsun.

  5. Eğer time NaN ise, time değerini +0𝐽 olarak ayarla; aksi takdirde time değerini LocalTime(time) olarak ayarla.

  6. fullYear, MakeFullYear(year) olsun.

  7. day, MakeDay(fullYear, MonthFromTime(time), DateFromTime(time)) olsun.

  8. date, MakeDate(day, TimeWithinDay(time)) olsun.

  9. utcTimestamp, TimeClip(UTC(date)) olsun.

  10. dateObj.[[DateValue]] değerini utcTimestamp olarak ayarla.

  11. utcTimestamp döndür.

B.2.3.3 Date.prototype.toGMTString ( )

"toGMTString" özelliğinin ilk değeri, 21.4.4.43 içinde tanımlanan %Date.prototype.toUTCString% değeridir.

B.2.4 RegExp.prototype Nesnesinin Ek Özellikleri

B.2.4.1 RegExp.prototype.compile ( pattern, flags )

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

  1. obj, this değeri olsun.

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

  3. Eğer pattern bir Nesne ise (is an Object) ve pattern'in bir [[RegExpMatcher]] dahili slotu (internal slot) varsa, o zaman

    1. Eğer flags undefined değilse, bir TypeError istisnası fırlat.

    2. flags değerini pattern.[[OriginalFlags]] olarak ayarla.

    3. pattern değerini pattern.[[OriginalSource]] olarak ayarla.

  4. ? RegExpInitialize(obj, pattern, flags) sonucunu döndür.

B.3 Diğer Ek Özellikler

B.3.1 Etiketli Fonksiyon Bildirimleri

ECMAScript 2015'ten önce, LabelledStatement belirtimi, bir deyim etiketinin (statement label) bir FunctionDeclaration ile ilişkilendirilmesine izin vermiyordu. Ancak, etiketli bir FunctionDeclaration, strict olmayan kod (non-strict code) için izin verilebilir bir genişletmeydi ve çoğu tarayıcı barındırmalı ECMAScript gerçekleştirimi bu genişletmeyi destekliyordu. ECMAScript 2015 ve sonrasında, LabelledStatement için dilbilgisi kuralı, FunctionDeclaration'ın bir LabelledItem olarak kullanılmasına izin verir, ancak 14.13.1 bu durum gerçekleşirse bir Sözdizimi Hatası (Syntax Error) üreten bir Erken Hata (Early Error) kuralı içerir. Bu kural, eğer barındırıcı bu özelliği destekliyorsa, strict olmayan kodda (non-strict code) Sözdizimi Hatasını bastırmak üzere değiştirilmiştir.

B.3.2 Blok Düzeyinde Fonksiyon Bildirimleri Web Eski Uyumluluk Anlambilimi

ECMAScript 2015'ten önce, ECMAScript belirtimi, bir FunctionDeclaration'ın bir Block deyiminin StatementList'inin bir öğesi olarak bulunmasını tanımlamıyordu. Ancak, FunctionDeclaration'ın bu formunun desteklenmesi izin verilebilir bir genişletmeydi ve tarayıcı barındırmalı çoğu ECMAScript gerçekleştirimi bunlara izin veriyordu. Ne yazık ki, bu tür bildirimlerin anlambilimi bu gerçekleştirimler arasında farklılık göstermektedir. Bu anlambilimsel farklılıklar nedeniyle, Block düzeyinde fonksiyon bildirimleri kullanan mevcut web ECMAScript kaynak metni (ECMAScript source text), yalnızca kullanımın bu tür bildirimler için tüm tarayıcı gerçekleştirimlerinin anlambilimsel kesişimine bağlı olması durumunda tarayıcı gerçekleştirimleri arasında taşınabilirdir. Aşağıdakiler, bu kesişim anlambilimi kapsamına giren kullanım senaryolarıdır:

  1. Bir fonksiyon tanımlanır ve yalnızca tek bir blok içinde referans verilir.

    • BindingIdentifierf adı olan bir veya daha fazla FunctionDeclaration, kapsayan bir g fonksiyonunun fonksiyon kodu içinde yer alır ve bu bildirim bir Block içinde yuvalanmıştır (nested).

    • g'nin fonksiyon kodu içinde f'nin bir var bildirimi olmayan başka hiçbir bildirimi yer almaz.

    • f'nin bir IdentifierReference olarak tüm oluşumları, f'nin bildirimini içeren Block'un StatementList'i içindedir.

  2. Bir fonksiyon tanımlanır ve muhtemelen tek bir Block içinde kullanılır, ancak aynı zamanda o Block içinde yer almayan bir iç fonksiyon tanımı tarafından da referans verilir.

    • BindingIdentifierf adı olan bir veya daha fazla FunctionDeclaration, kapsayan bir g fonksiyonunun fonksiyon kodu içinde yer alır ve bu bildirim bir Block içinde yuvalanmıştır (nested).

    • g'nin fonksiyon kodu içinde f'nin bir var bildirimi olmayan başka hiçbir bildirimi yer almaz.

    • f'nin bildirimini içeren Block'un StatementList'i içinde f'nin bir IdentifierReference olarak oluşumları olabilir.

    • g içinde yuvalanmış başka bir h fonksiyonu içinde f'nin bir IdentifierReference olarak en az bir oluşumu vardır ve başka hiçbir f bildirimi h içinden f'ye olan referansları gölgelemez (shadows).

    • h'nin tüm çağrıları, f'nin bildirimi değerlendirildikten sonra gerçekleşir.

  3. Bir fonksiyon tanımlanır ve muhtemelen tek bir blok içinde kullanılır, ancak sonraki bloklar içinde de referans verilir.

    • BindingIdentifierf adı olan bir veya daha fazla FunctionDeclaration, kapsayan bir g fonksiyonunun fonksiyon kodu içinde yer alır ve bu bildirim bir Block içinde yuvalanmıştır (nested).

    • g'nin fonksiyon kodu içinde f'nin bir var bildirimi olmayan başka hiçbir bildirimi yer almaz.

    • f'nin bildirimini içeren Block'un StatementList'i içinde f'nin bir IdentifierReference olarak oluşumları olabilir.

    • g'nin fonksiyon kodu içinde, f'nin bildirimini içeren Block'u sözdizimsel (lexically) olarak takip eden en az bir f'nin IdentifierReference olarak oluşumu vardır.

İlk kullanım senaryosu, ECMAScript 2015 tarafından sağlanan Block düzeyinde fonksiyon bildirimleri anlambilimi ile birlikte çalışabilirdir (interoperable). Bu kullanım senaryosunu uygulayan önceden var olan herhangi bir ECMAScript kaynak metni (ECMAScript source text), madde 10, madde 14 ve madde 15 tarafından tanımlanan Blok düzeyinde fonksiyon bildirimleri anlambilimini kullanarak çalışacaktır.

İkinci ve üçüncü kullanım senaryoları için ECMAScript 2015 birlikte çalışabilirliği, madde 10, madde 15, madde 19.2.1 ve madde 16.1.7 anlambilimlerine aşağıdaki genişletmeleri gerektirir.

Eğer bir ECMAScript gerçekleştirimi tanısal uyarı mesajları raporlamak için bir mekanizmaya sahipse, kod bu uyumluluk anlambilimlerinin uygulandığı ve uyumluluk dışı anlambilimlerden gözlemlenebilir farklılıklar getiren bir FunctionDeclaration içerdiğinde bir uyarı üretilmelidir. Örneğin, bir var bağlaması, eklenmesi bir erken hata (early error) oluşturacağı için eklenmemişse, bir uyarı mesajı üretilmemelidir.

Bu özellik aşağıdaki noktalarda özel anlambilimler içerir:

B.3.3 IfStatement Deyim Cümleciklerinde FunctionDeclaration'lar

Aşağıdakiler, 14.6 içindeki IfStatement kuralını genişletir:

IfStatement IfStatement[Yield, Await, Return] : if ( Expression[+In, ?Yield, ?Await] ) FunctionDeclaration[?Yield, ?Await, ~Default] else Statement[?Yield, ?Await, ?Return] if ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return] else FunctionDeclaration[?Yield, ?Await, ~Default] if ( Expression[+In, ?Yield, ?Await] ) FunctionDeclaration[?Yield, ?Await, ~Default] else FunctionDeclaration[?Yield, ?Await, ~Default] if ( Expression[+In, ?Yield, ?Await] ) FunctionDeclaration[?Yield, ?Await, ~Default] [lookahead ≠ else]

Bu kural yalnızca strict olmayan kod (non-strict code) ayrıştırılırken uygulanır. Bu kural tarafından eşleşen kaynak metin (source text matched by), her eşleşen FunctionDeclaration[?Yield, ?Await, ~Default] oluşumu, kaynak metinde o konumu işgal eden bir BlockStatement'in tek StatementListItem'iymiş gibi işlenir. Böyle sentetik bir BlockStatement'in anlambilimi, B.3.2 içinde belirtilen web eski uyumluluk anlambilimlerini içerir.

B.3.4 Catch Bloklarındaki VariableStatement'lar

Bu özellikte, bir Catch cümlesinin Block'u, CatchParameter tarafından da bağlanan bir adı bağlayan var bildirimleri içerebilir. Bu,

Catch Catch : catch ( CatchParameter ) Block

14.15.1 içindeki bir erken hata (early error) kuralı değiştirilerek gerçekleştirilir.

Bu değiştirilmiş davranış, bir Catch cümlesinin Block'u içinde yer alan doğrudan eval (direct eval) çağrıları tarafından sunulan var ve function bildirimleri için de geçerlidir. Bu değişiklik, EvalDeclarationInstantiation içindeki 3.d.i.2.a.i ve 13.b.ii.4.a.i.i adımları değiştirilerek gerçekleştirilir.

B.3.5 ForIn Deyimi Başlıklarındaki Başlatıcılar

Aşağıdakiler, 14.7.5 içindeki ForInOfStatement kuralını genişletir:

ForInOfStatement ForInOfStatement[Yield, Await, Return] : for ( var BindingIdentifier[?Yield, ?Await] Initializer[~In, ?Yield, ?Await] in Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]

Bu kural yalnızca strict olmayan kod (non-strict code) ayrıştırılırken uygulanır.

8.3.1 içindeki ContainsDuplicateLabels statik anlambilimi (static semantics) aşağıdakilerle genişletilir:

ForInOfStatement ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement

  1. Argüman olarak labelSet ile Statement'in ContainsDuplicateLabels sonucunu döndür.

8.3.2 içindeki ContainsUndefinedBreakTarget statik anlambilimi (static semantics) aşağıdakilerle genişletilir:

ForInOfStatement ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement

  1. Argüman olarak labelSet ile Statement'in ContainsUndefinedBreakTarget sonucunu döndür.

8.3.3 içindeki ContainsUndefinedContinueTarget statik anlambilimi (static semantics) aşağıdakilerle genişletilir:

ForInOfStatement ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement

  1. Argümanlar olarak iterationSet ve « » ile Statement'in ContainsUndefinedContinueTarget sonucunu döndür.

14.7.5.2 içindeki IsDestructuring statik anlambilimi (static semantics) aşağıdakilerle genişletilir:

BindingIdentifier BindingIdentifier : Identifier yield await

  1. false döndür.

8.2.6 içindeki VarDeclaredNames statik anlambilimi (static semantics) aşağıdakilerle genişletilir:

ForInOfStatement ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement

  1. names1, BindingIdentifier kuralının BoundNames değeri olsun.

  2. names2, Statement kuralının VarDeclaredNames değeri olsun.

  3. names1 ve names2 liste birleştirmesi (list-concatenation) sonucunu döndür.

8.2.7 içindeki VarScopedDeclarations statik anlambilimi (static semantics) aşağıdakilerle genişletilir:

ForInOfStatement ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement

  1. decls1, « BindingIdentifier » olsun.

  2. decls2, Statement kuralının VarScopedDeclarations değeri olsun.

  3. decls1 ve decls2 liste birleştirmesi (list-concatenation) sonucunu döndür.

14.7.5.5 içindeki ForInOfLoopEvaluation çalışma zamanı anlambilimi (runtime semantics) aşağıdakilerle genişletilir:

ForInOfStatement ForInOfStatement : for ( var BindingIdentifier Initializer in Expression ) Statement

  1. bindingId, BindingIdentifier kuralının StringValue değeri olsun.

  2. lhs, ? ResolveBinding(bindingId) olsun.

  3. Eğer IsAnonymousFunctionDefinition(Initializer) değeri true ise, o zaman

    1. value, argüman olarak bindingId ile Initializer kuralının ? NamedEvaluation değeri olsun.
  4. Aksi takdirde,

    1. rhs, Initializer kuralının ? Evaluation değeri olsun.

    2. value, ? GetValue(rhs) olsun.

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

  6. keyResult, ? ForIn/OfHeadEvaluation(« », Expression, enumerate) olsun.

  7. ? ForIn/OfBodyEvaluation(BindingIdentifier, Statement, keyResult, enumerate, var-binding, labelSet) sonucunu döndür.

B.3.6 [[IsHTMLDDA]] Dahili Yuvası (Internal Slot)

Barındırıcı tarafından tanımlanmış (host-defined) nesneler üzerinde bir [[IsHTMLDDA]] dahili yuvası (internal slot) bulunabilir. Bir [[IsHTMLDDA]] dahili yuvasına (internal slot) sahip nesneler, ToBoolean ve IsLooselyEqual soyut işlemlerinde (abstract operations) ve typeof işlecinin (typeof operator) bir işleneni (operand) olarak kullanıldıklarında undefined gibi davranırlar.

Bu özellik aşağıdaki noktalarda özel anlambilimler içerir:

B.3.7 HostMakeJobCallback'te Varsayılan Olmayan Davranış

HostMakeJobCallback soyut işlemi, web tarayıcısı olan barındırıcıların (hosts) varsayılan olmayan davranış belirtmesine izin verir.

B.3.8 HostEnsureCanAddPrivateElement'te Varsayılan Olmayan Davranış

HostEnsureCanAddPrivateElement soyut işlemi, web tarayıcısı olan barındırıcıların (hosts) varsayılan olmayan davranış belirtmesine izin verir.

B.3.9 Fonksiyon Çağrısı Atama Hedefleri için Çalışma Zamanı Hataları

Strict olmayan kodda (non-strict code) bir fonksiyon çağrısı (13.3.6) bir atama hedefi (assignment target) olarak kullanıldığında, bir erken hata (early error) üretilmek yerine, atamanın değerlendirilmesi sırasında bir ReferenceError istisnası fırlatılır.

Şunlar için AssignmentTargetType tanımının 1 adımına bakın:

CallExpression CallExpression : CoverCallExpressionAndAsyncArrowHead

ve

CallExpression CallExpression : CallExpression Arguments

.