Bu ek, web tarayıcısı ECMAScript barındırıcılarının çeşitli eski özelliklerini ve diğer karakteristiklerini açıklamaktadır. Bu ekte belirtilen tüm dil özellikleri ve davranışları, bir veya daha fazla istenmeyen özelliğe sahiptir ve eski kullanımın bulunmaması durumunda bu belirtimden kaldırılacaktır. Ancak, bu özelliklerin çok sayıda mevcut web sayfası tarafından kullanılması, web tarayıcılarının bunları desteklemeye devam etmesi gerektiği anlamına gelir. Bu ekteki belirtimler, bu eski özelliklerin birlikte çalışabilir gerçekleştirimleri için gereksinimleri tanımlamaktadır.
Bu özellikler çekirdek ECMAScript dilinin bir parçası olarak kabul edilmez. Programcılar, yeni ECMAScript kodları yazarken bu özelliklerin ve davranışların varlığını kullanmamalı veya varsaymamalıdır. Gerçekleştirimin bir web tarayıcısının parçası olması veya web tarayıcılarının karşılaştığı aynı eski ECMAScript kodunu çalıştırmasının gerekmesi dışında, ECMAScript gerçekleştirimlerinin bu özellikleri uygulaması önerilmez.
# B.1 Ek Sözdizimi
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:
InputElementHashbangOrRegExp InputElementHashbangOrRegExp :: WhiteSpace LineTerminator Comment CommonToken HashbangComment RegularExpressionLiteral HTMLCloseComment
Comment Comment :: MultiLineComment SingleLineComment SingleLineHTMLOpenComment SingleLineHTMLCloseComment SingleLineDelimitedComment
MultiLineComment MultiLineComment :: / * FirstCommentLine opt LineTerminator MultiLineCommentChars opt ***/** HTMLCloseComment opt
FirstCommentLine FirstCommentLine :: SingleLineDelimitedCommentChars
SingleLineHTMLOpenComment SingleLineHTMLOpenComment :: <!-- SingleLineCommentChars opt
SingleLineHTMLCloseComment SingleLineHTMLCloseComment :: LineTerminatorSequence HTMLCloseComment
SingleLineDelimitedComment SingleLineDelimitedComment :: / * SingleLineDelimitedCommentChars opt ***/**
HTMLCloseComment HTMLCloseComment :: WhiteSpaceSequence opt SingleLineDelimitedCommentSequence opt --> SingleLineCommentChars opt
SingleLineDelimitedCommentChars SingleLineDelimitedCommentChars :: SingleLineNotAsteriskChar SingleLineDelimitedCommentChars opt ***** SingleLinePostAsteriskCommentChars opt
SingleLineNotAsteriskChar SingleLineNotAsteriskChar :: SourceCharacter but not one of ***** or LineTerminator
SingleLinePostAsteriskCommentChars SingleLinePostAsteriskCommentChars :: SingleLineNotForwardSlashOrAsteriskChar SingleLineDelimitedCommentChars opt ***** SingleLinePostAsteriskCommentChars opt
SingleLineNotForwardSlashOrAsteriskChar SingleLineNotForwardSlashOrAsteriskChar :: SourceCharacter but not one of / or ***** or LineTerminator
WhiteSpaceSequence WhiteSpaceSequence :: WhiteSpace WhiteSpaceSequence opt
SingleLineDelimitedCommentSequence SingleLineDelimitedCommentSequence :: SingleLineDelimitedComment WhiteSpaceSequence opt SingleLineDelimitedCommentSequence opt
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 _
NOT
Aynı sol tarafların hem [+UnicodeMode] hem de [~UnicodeMode] korumalarıyla birlikte ortaya çıkması, belirsizliği giderme önceliğini kontrol etmek içindir.
# 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 :: ( GroupSpecifier opt Disjunction )
” ifadeleri, “
Atom Atom :: ( GroupSpecifier opt Disjunction )
” veya “
ExtendedAtom ExtendedAtom :: ( GroupSpecifier opt 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 ]
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 ]
U+005C (REVERSE SOLIDUS) karakterinin sayısal değerini döndür.
ClassEscape ClassEscape :: c ClassControlLetter
codePoint , ClassControlLetter tarafından eşleşen kod noktası olsun.
i , codePoint kod noktasının sayısal değeri olsun.
i 'nin 32'ye bölümünden kalanı döndür.
CharacterEscape CharacterEscape :: LegacyOctalEscapeSequence
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 ]
charSet , tek \\ U+005C (REVERSE SOLIDUS) karakterini içeren CharSet olsun.
CharacterSetMatcher (regexpRecord , charSet , false, direction ) sonucunu döndür.
ExtendedAtom ExtendedAtom :: ExtendedPatternCharacter
char , ExtendedPatternCharacter tarafından temsil edilen karakter olsun.
charSet , char karakterini içeren tek elemanlı bir CharSet olsun.
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
charSet , regexpRecord argümanıyla ilk ClassAtom için CompileToCharSet değeri olsun.
otherSet , regexpRecord argümanıyla ikinci ClassAtom için CompileToCharSet değeri olsun.
remainingSet , regexpRecord argümanıyla ClassContents için CompileToCharSet değeri olsun.
rangeSet , CharacterRangeOrUnion (regexpRecord , charSet , otherSet ) olsun.
rangeSet ve remainingSet birleşimini döndür.
NonemptyClassRangesNoDash NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents
charSet , regexpRecord argümanıyla ClassAtomNoDash için CompileToCharSet değeri olsun.
otherSet , regexpRecord argümanıyla ClassAtom için CompileToCharSet değeri olsun.
remainingSet , regexpRecord argümanıyla ClassContents için CompileToCharSet değeri olsun.
rangeSet , CharacterRangeOrUnion (regexpRecord , charSet , otherSet ) olsun.
rangeSet ve remainingSet birleşimini döndür.
Ek olarak, CompileToCharSet kuralına aşağıdaki kurallar eklenmiştir.
ClassEscape ClassEscape :: c ClassControlLetter
charValue , bu ClassEscape için CharacterValue değeri olsun.
char , karakter değeri charValue olan karakter olsun.
Tek char karakterini içeren CharSet döndür.
ClassAtomNoDash ClassAtomNoDash :: **** [lookahead = c ]
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:
HasEitherUnicodeFlag (regexpRecord ) değeri false ise, o zaman
charSet tam olarak bir karakter içermiyorsa veya otherSet tam olarak bir karakter içermiyorsa, o zaman
remainingSet , tek - U+002D (HYPHEN-MINUS) karakterini içeren CharSet olsun.
charSet , otherSet ve remainingSet CharSet birleşimini döndür.
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:
v değeri true ve u değeri true ise, o zaman
parseResult , bir veya daha fazla SyntaxError nesnesi içeren bir Liste olsun.
Aksi takdirde, eğer v değeri true ise, o zaman
parseResult , ParseText (patternText , Pattern [+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups] ) olsun.
Aksi takdirde, eğer u değeri true ise, o zaman
parseResult , ParseText (patternText , Pattern [+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups] ) olsun.
Aksi takdirde,
parseResult , ParseText (patternText , Pattern [~UnicodeMode, ~UnicodeSetsMode, ~NamedCaptureGroups] ) olsun.
parseResult bir Parse Node ise ve parseResult bir GroupName içeriyorsa, o zaman
parseResult değerini ParseText (patternText , Pattern [~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups] ) olarak ayarla.
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
# 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:
string değerini ? ToString (string ) olarak ayarla.
length , string 'in uzunluğu olsun.
result , boş String olsun.
unescapedSet , ASCII sözcük karakterleri (ASCII word characters) ile "@*+-./" ifadesinin string birleştirmesi (string-concatenation) olsun.
k , 0 olsun.
Repeat, while k < length ,
codeUnit , string içindeki k dizinindeki (index) kod birimi olsun.
If unescapedSet contains codeUnit , then
nextPart , codeUnit olsun.
Else,
codeUnitNumber , codeUnit 'in sayısal değeri olsun.
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.
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.
result değerini, result ile nextPart 'ın string birleştirmesi (string-concatenation) olarak ayarla.
k değerini k + 1 olarak ayarla.
result döndür.
NOT
Kodlama kısmen RFC 1738'de açıklanan kodlamaya dayanmaktadır, ancak bu standartta belirtilen kodlamanın tamamı, RFC 1738'in içeriği dikkate alınmaksızın yukarıda açıklanmıştır. Bu kodlama, RFC 3986 tarafından RFC 1738 üzerinde yapılan değişiklikleri yansıtmamaktadı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:
string değerini ? ToString (string ) olarak ayarla.
length , string 'in uzunluğu olsun.
result , boş String olsun.
k , 0 olsun.
Repeat, while k < length ,
codeUnit , string içindeki k dizinindeki (index) kod birimi olsun.
If codeUnit is the code unit 0x0025 (PERCENT SIGN), then
hexDigits , boş String olsun.
optionalAdvance , 0 olsun.
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.
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.
parseResult , ParseText (hexDigits , HexDigits [~Sep] ) olsun.
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.
result değerini, result ile codeUnit 'in string birleştirmesi (string-concatenation) olarak ayarla.
k değerini k + 1 olarak ayarla.
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:
obj , this değeri olsun.
? RequireObjectCoercible (obj ) işlemini gerçekleştir.
string , ? ToString (obj ) olsun.
size , string dizgisinin uzunluğu olsun.
intStart , ? ToIntegerOrInfinity (start ) olsun.
Eğer intStart = -∞ ise, intStart değerini 0 olarak ayarla.
Aksi takdirde, eğer intStart < 0 ise, intStart değerini max (size + intStart , 0) olarak ayarla.
Aksi takdirde, intStart değerini min (intStart , size ) olarak ayarla.
Eğer length undefined ise, intLength , size olsun; aksi takdirde intLength , ? ToIntegerOrInfinity (length ) olsun.
intLength değerini, intLength değerinin 0 ile size arasında sınırlandırılmasının (clamping) sonucu olarak ayarla.
intEnd , min (intStart + intLength , size ) olsun.
string dizgisinin intStart konumundan intEnd konumuna kadar olan alt dizgisini (substring) döndür.
NOT
Bu yöntem kasıtlı olarak geneldir (generic); this değerinin bir String nesnesi olmasını gerektirmez. Bu nedenle, bir yöntem olarak kullanılmak üzere diğer nesne türlerine aktarılabilir.
# B.2.2.2 String.prototype.anchor ( name )
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
string , this değeri olsun.
? 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:
? RequireObjectCoercible (contents ) işlemini gerçekleştir.
contentsString , ? ToString (contents ) olsun.
part1 , "<" ile tag 'in string birleştirmesi (string-concatenation) olsun.
Eğer attr boş String değilse, o zaman
attrValueString , ? ToString (attrValue ) olsun.
escapedAttrValue , attrValueString içindeki her 0x0022 (QUOTATION MARK) kod birimi oluşumunun altı kod birimli """ dizisi ile değiştirilmesi dışında attrValueString ile aynı olan String değeri olsun.
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
part2 , part1 ile ">" ifadesinin string birleştirmesi (string-concatenation) olsun.
part3 , part2 ile contentsString 'in string birleştirmesi (string-concatenation) olsun.
part4 , part3 , "</", tag ve ">" ifadelerinin string birleştirmesi (string-concatenation) olsun.
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:
string , this değeri olsun.
? CreateHTML (string , "big", "", "") sonucunu döndür.
# B.2.2.4 String.prototype.blink ( )
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? CreateHTML (string , "i", "", "") sonucunu döndür.
# B.2.2.10 String.prototype.link ( url )
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? 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:
string , this değeri olsun.
? CreateHTML (string , "sup", "", "") sonucunu döndür.
# B.2.2.15 String.prototype.trimLeft ( )
NOT
"trimStart" özelliği tercih edilir. "trimLeft" özelliği esas olarak eski kodlarla uyumluluk için sağlanmıştır. Yeni ECMAScript kodunda "trimStart" özelliğinin kullanılması önerilir.
"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 ( )
NOT
"trimEnd" özelliği tercih edilir. "trimRight" özelliği esas olarak eski kodlarla uyumluluk için sağlanmıştır. Yeni ECMAScript kodunda "trimEnd" özelliğinin kullanılması önerilir.
"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 ( )
NOT
"Yıl 2000 problemi"nden kaçındığı için, hemen hemen tüm amaçlar için getFullYear metodu tercih edilir.
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
dateObj , this değeri olsun.
? RequireInternalSlot (dateObj , [[DateValue]] ) işlemini gerçekleştir.
tv , dateObj .[[DateValue]] olsun.
Eğer tv NaN ise, NaN döndür.
YearFromTime (LocalTime (tv )) - 1900𝐽 sonucunu döndür.
# B.2.3.2 Date.prototype.setYear ( year )
NOT
"Yıl 2000 problemi"nden kaçındığı için, hemen hemen tüm amaçlar için setFullYear metodu tercih edilir.
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
dateObj , this değeri olsun.
? RequireInternalSlot (dateObj , [[DateValue]] ) işlemini gerçekleştir.
time , dateObj .[[DateValue]] olsun.
year , ? ToNumber (year ) olsun.
Eğer time NaN ise, time değerini +0𝐽 olarak ayarla; aksi takdirde time değerini LocalTime (time ) olarak ayarla.
fullYear , MakeFullYear (year ) olsun.
day , MakeDay (fullYear , MonthFromTime (time ), DateFromTime (time )) olsun.
date , MakeDate (day , TimeWithinDay (time )) olsun.
utcTimestamp , TimeClip (UTC (date )) olsun.
dateObj .[[DateValue]] değerini utcTimestamp olarak ayarla.
utcTimestamp döndür.
# B.2.3.3 Date.prototype.toGMTString ( )
NOT
toUTCString metodu tercih edilir. Bu metot esas olarak eski kodlarla uyumluluk için sağlanmıştır.
"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:
obj , this değeri olsun.
? RequireInternalSlot (obj , [[RegExpMatcher]] ) işlemini gerçekleştir.
Eğer pattern bir Nesne ise (is an Object) ve pattern 'in bir [[RegExpMatcher]] dahili slotu (internal slot) varsa, o zaman
Eğer flags undefined değilse, bir TypeError istisnası fırlat.
flags değerini pattern .[[OriginalFlags]] olarak ayarla.
pattern değerini pattern .[[OriginalSource]] olarak ayarla.
? RegExpInitialize (obj , pattern , flags ) sonucunu döndür.
NOT
Bu metot, RegExp this değerini yeni bir şablon (pattern) ve bayraklar (flags) ile tamamen yeniden başlatır. Bir gerçekleştirim, bu metodun kullanılmasını, elde edilen RegExp nesnesinin birden fazla kez kullanılacağına ve dolayısıyla ekstra optimizasyon için bir aday olduğuna dair bir iddia (assertion) olarak yorumlayabilir.
# 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.
NOT
WithStatement , IfStatement ve IterationStatement için erken hata (early error) kuralları, bu deyimlerin strict olmayan kodda (non-strict code) etiketli bir FunctionDeclaration içermesini engeller.
# 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:
Bir fonksiyon tanımlanır ve yalnızca tek bir blok içinde referans verilir.
BindingIdentifier 'ı f 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.
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.
BindingIdentifier 'ı f 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.
Bir fonksiyon tanımlanır ve muhtemelen tek bir blok içinde kullanılır, ancak sonraki bloklar içinde de referans verilir.
BindingIdentifier 'ı f 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.
NOT
Çalışma zamanında, bu tür bağlamalar VariableDeclarationEnvironment içinde örneklendirilir. CatchParameter tarafından sunulan aynı adlı bağlamaları gölgelemezler ve dolayısıyla bu tür var bildirimleri için Initializer , var bağlaması yerine karşılık gelen catch parametresine atama yapacaktır.
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
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
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
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
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
names1 , BindingIdentifier kuralının BoundNames değeri olsun.
names2 , Statement kuralının VarDeclaredNames değeri olsun.
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
decls1 , « BindingIdentifier » olsun.
decls2 , Statement kuralının VarScopedDeclarations değeri olsun.
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
bindingId , BindingIdentifier kuralının StringValue değeri olsun.
lhs , ? ResolveBinding (bindingId ) olsun.
Eğer IsAnonymousFunctionDefinition (Initializer ) değeri true ise, o zaman
value , argüman olarak bindingId ile Initializer kuralının ? NamedEvaluation değeri olsun.
Aksi takdirde,
rhs , Initializer kuralının ? Evaluation değeri olsun.
value , ? GetValue (rhs ) olsun.
? PutValue (lhs , value ) işlemini gerçekleştir.
keyResult , ? ForIn/OfHeadEvaluation (« », Expression , enumerate) olsun.
? 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.