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

Önceki Sürümlerle Uyumsuzluk Getiren Eklentiler ve Değişiklikler

6.2.5: ECMAScript 2015'te, Fonksiyon çağrılarının bir Referans Kaydı (Reference Record) döndürmesine izin verilmez.

7.1.4.1: ECMAScript 2015'te, bir Dize (String) değerine uygulanan ToNumber, artık BinaryIntegerLiteral ve OctalIntegerLiteral sayısal dizgelerini tanır ve dönüştürür. Önceki sürümlerde bu tür dizgeler NaN değerine dönüştürülüyordu.

9.3: ECMAScript 2018'de, Şablon (Template) nesneleri, önceki sürümlerde bir gerçeklik alanındaki (Realm) o şablon sabit değerinin (template literal) veya etiketli şablonun tüm oluşumları yerine, Ayrıştırma Düğümüne (Parse Node) (kaynak konumu) göre kurallaştırılır.

12.2: ECMAScript 2016'da, Unicode 5.1'i zorunlu kılan ECMAScript 2015'in aksine Unicode 8.0.0 veya daha yüksek bir sürümü zorunlu kılınmıştır. Bu durum özellikle, Space_Separator (Zs) kategorisinde yer alan ve dolayısıyla ECMAScript 2015'te boşluk (whitespace) olarak kabul edilen U+180E MONGOLIAN VOWEL SEPARATOR karakterinin (Unicode 6.3.0 itibarıyla) Format (Cf) kategorisine taşınmasına neden olmuştur. Bu, boşluğa duyarlı yöntemlerin farklı davranmasına yol açar. Örneğin, "\u180E".trim().length değeri önceki sürümlerde 0 iken, ECMAScript 2016 ve sonrasında 1 olmuştur. Ayrıca ECMAScript 2017, her zaman Unicode Standardının en son sürümünün kullanılmasını zorunlu kılmıştır.

12.7: ECMAScript 2015'te, bir IdentifierName için geçerli kod noktaları, Unicode özellikleri olan “ID_Start” ve “ID_Continue” cinsinden belirtilmiştir. Önceki sürümlerde, geçerli IdentifierName veya Identifier kod noktaları, çeşitli Unicode kod noktası kategorileri listelenerek belirtiliyordu.

12.10.1: ECMAScript 2015'te, Otomatik Noktalı Virgül Ekleme (Automatic Semicolon Insertion), noktalı virgül eksikse bir do-while ifadesinin sonuna noktalı virgül ekler. Bu değişiklik, belirtimi mevcut gerçekleştirimlerin çoğunun fiili davranışıyla uyumlu hale getirir.

13.2.5.1: ECMAScript 2015'te, Nesne Başlatıcılarda (Object Initializers) yinelenen özellik adlarının (property names) bulunması artık bir erken hata (early error) değildir.

13.15.1: ECMAScript 2015'te, bir FunctionExpression fonksiyon adı gibi değiştirilemez (immutable) bir bağlamaya atama içeren strict mod kodu (strict mode code), bir erken hata (early error) üretmez. Bunun yerine bir çalışma zamanı hatası (runtime error) üretir.

14.2: ECMAScript 2015'te, let belirteci (token) ile başlayan ve ardından LineTerminator, sonrasında da Identifier girdi öğeleri gelen bir StatementList, bir LexicalDeclaration'ın başlangıcıdır. Önceki sürümlerde, otomatik noktalı virgül ekleme, Identifier girdi öğesinden önce her zaman bir noktalı virgül eklerdi.

14.5: ECMAScript 2015'te, let belirteci ile başlayan ve ardından [ belirteci gelen bir StatementListItem, bir LexicalDeclaration'ın başlangıcıdır. Önceki sürümlerde böyle bir dizi bir ExpressionStatement'ın başlangıcı olurdu.

14.6.2: ECMAScript 2015'te, bir IfStatement'in olağan sonucu hiçbir zaman empty değeri değildir. Hiçbir Statement bölümü değerlendirilmezse veya değerlendirilen Statement bölümü empty içeren bir olağan tamamlanma (normal completion containing) üretirse, IfStatement'in sonucu undefined olur.

14.7: ECMAScript 2015'te, bir for ifadesinin ( belirtecinden hemen sonra let [ belirteç dizisi geliyorsa, let bir LexicalDeclaration'ın başlangıcı olarak kabul edilir. Önceki sürümlerde böyle bir belirteç dizisi bir Expression'ın başlangıcı olurdu.

14.7: ECMAScript 2015'te, bir for-in ifadesinin ( belirtecinden hemen sonra let [ belirteç dizisi geliyorsa, let bir ForDeclaration'ın başlangıcı olarak kabul edilir. Önceki sürümlerde böyle bir belirteç dizisi bir LeftHandSideExpression'ın başlangıcı olurdu.

14.7: ECMAScript 2015 öncesinde, in anahtar sözcüğünden (keyword) önce gelen VariableDeclaration'ın bir parçası olarak bir ilklendirme ifadesi (initialization expression) bulunabiliyordu. ECMAScript 2015'te, aynı konumdaki ForBinding böyle bir ilklendiricinin bulunmasına izin vermez. ECMAScript 2017'de, böyle bir ilklendiriciye yalnızca strict olmayan kodda (non-strict code) izin verilir.

14.7: ECMAScript 2015'te, bir IterationStatement'in değerlendirilmesinin sonucu hiçbir zaman [[Value]] alanı empty olan bir olağan tamamlanma (normal completion) değildir. Bir IterationStatement'in Statement bölümü değerlendirilmezse veya Statement bölümünün nihai değerlendirilmesi [[Value]] alanı empty olan bir olağan tamamlanma (normal completion) üretirse, IterationStatement'in değerlendirilmesinin sonucu [[Value]] alanı undefined olan bir olağan tamamlanma (normal completion) olur.

14.11.2: ECMAScript 2015'te, bir WithStatement'in değerlendirilmesinin sonucu hiçbir zaman [[Value]] alanı empty olan bir olağan tamamlanma (normal completion) değildir. Bir WithStatement'in Statement bölümünün değerlendirilmesi [[Value]] alanı empty olan bir olağan tamamlanma (normal completion) üretirse, WithStatement'in değerlendirilmesinin sonucu [[Value]] alanı undefined olan bir olağan tamamlanma (normal completion) olur.

14.12.4: ECMAScript 2015'te, bir SwitchStatement'in değerlendirilmesinin sonucu hiçbir zaman [[Value]] alanı empty olan bir olağan tamamlanma (normal completion) değildir. Bir SwitchStatement'in CaseBlock bölümünün değerlendirilmesi [[Value]] alanı empty olan bir olağan tamamlanma (normal completion) üretirse, SwitchStatement'in değerlendirilmesinin sonucu [[Value]] alanı undefined olan bir olağan tamamlanma (normal completion) olur.

14.15: ECMAScript 2015'te, bir Catch tümcesinin, Catch tümcesi parametresi olarak görünen aynı Identifier for bir var bildirimi içermesi bir erken hatadır (early error). Önceki sürümlerde böyle bir değişken bildirimi çevreleyen değişken ortamında örneklendirilirdi (instantiated), ancak bildirimin Initializer değeri Catch parametresine atanırdı.

14.15, 19.2.1.3: ECMAScript 2015'te, bir Catch tümcesi, eval kodu Catch tümcesi parametresiyle aynı Identifier'ı bağlayan bir var veya FunctionDeclaration bildirimi içeren strict olmayan bir doğrudan eval değerlendirirse çalışma zamanı SyntaxError hatası fırlatılır.

14.15.3: ECMAScript 2015'te, bir TryStatement'in sonucu hiçbir zaman empty değeri değildir. Bir TryStatement'in Block bölümü empty içeren bir olağan tamamlanmaya (normal completion containing) değerlendirilirse, TryStatement'in sonucu undefined olur. Bir TryStatement'in Block bölümü bir fırlatma tamamlanmasına (throw completion) değerlendirilirse ve empty içeren bir olağan tamamlanmaya (normal completion containing) değerlendirilen bir Catch bölümü varsa; eğer Finally tümcesi yoksa veya Finally tümcesi empty olan bir olağan tamamlanmaya (normal completion) değerlendirilirse, TryStatement'in sonucu undefined olur.

15.4.5 ECMAScript 2015'te, bir ObjectLiteral içindeki erişici özelliklerin (accessor properties) [[Get]] veya [[Set]] özniteliğinin değerleri olarak oluşturulan işlev nesneleri (function objects), yapıcı (constructor) işlevleri değildir ve kendilerine ait bir "prototype" özelliğine sahip değildir. Önceki sürümde bunlar yapıcılar (constructors) idi ve bir "prototype" özelliğine sahipti.

20.1.2.6: ECMAScript 2015'te, eğer Object.freeze argümanı bir nesne değilse, kendisine ait hiçbir özelliği olmayan, genişletilemez bir sıradan nesne (ordinary object) gibi işlem görür. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.8: ECMAScript 2015'te, eğer Object.getOwnPropertyDescriptor argümanı bir nesne değilse, ToObject kullanılarak argümanın türü zorlanmaya çalışılır. Zorlama başarılı olursa, elde edilen sonuç orijinal argüman değerinin yerine kullanılır. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.10: ECMAScript 2015'te, eğer Object.getOwnPropertyNames argümanı bir nesne değilse, ToObject kullanılarak argümanın türü zorlanmaya çalışılır. Zorlama başarılı olursa, elde edilen sonuç orijinal argüman değerinin yerine kullanılır. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.12: ECMAScript 2015'te, eğer Object.getPrototypeOf argümanı bir nesne değilse, ToObject kullanılarak argümanın türü zorlanmaya çalışılır. Zorlama başarılı olursa, elde edilen sonuç orijinal argüman değerinin yerine kullanılır. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.16: ECMAScript 2015'te, eğer Object.isExtensible argümanı bir nesne değilse, kendisine ait hiçbir özelliği olmayan, genişletilemez bir sıradan nesne (ordinary object) gibi işlem görür. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.17: ECMAScript 2015'te, eğer Object.isFrozen argümanı bir nesne değilse, kendisine ait hiçbir özelliği olmayan, genişletilemez bir sıradan nesne (ordinary object) gibi işlem görür. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.18: ECMAScript 2015'te, eğer Object.isSealed argümanı bir nesne değilse, kendisine ait hiçbir özelliği olmayan, genişletilemez bir sıradan nesne (ordinary object) gibi işlem görür. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.19: ECMAScript 2015'te, eğer Object.keys argümanı bir nesne değilse, ToObject kullanılarak argümanın türü zorlanmaya çalışılır. Zorlama başarılı olursa, elde edilen sonuç orijinal argüman değerinin yerine kullanılır. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.20: ECMAScript 2015'te, eğer Object.preventExtensions argümanı bir nesne değilse, kendisine ait hiçbir özelliği olmayan, genişletilemez bir sıradan nesne (ordinary object) gibi işlem görür. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.1.2.22: ECMAScript 2015'te, eğer Object.seal argümanı bir nesne değilse, kendisine ait hiçbir özelliği olmayan, genişletilemez bir sıradan nesne (ordinary object) gibi işlem görür. Önceki sürümde, nesne olmayan bir argüman her zaman bir TypeError fırlatılmasına neden oluyordu.

20.2.3.2: ECMAScript 2015'te, bağlı bir fonksiyonun [[Prototype]] dahili yuvası, hedef fonksiyonunun [[GetPrototypeOf]] değerine ayarlanır. Önceki sürümde, [[Prototype]] her zaman %Function.prototype% değerine ayarlanıyordu.

20.2.4.1: ECMAScript 2015'te, fonksiyon örneklerinin "length" özelliği yapılandırılabilirdir (configurable). Önceki sürümlerde yapılandırılamazdı (non-configurable).

20.5.6.2: ECMAScript 2015'te, bir NativeError yapıcısının (constructor) [[Prototype]] dahili yuvası, Error yapıcısıdır (constructor). Önceki sürümlerde ise Function prototip nesnesi (Function prototype object) idi.

21.4.4 ECMAScript 2015'te, Date prototip nesnesi (Date prototype object) bir Date örneği (Date instance) değildir. Önceki sürümlerde, TimeValue değeri NaN olan bir Date örneğiydi.

22.1.3.12 ECMAScript 2015'te, String.prototype.localeCompare functionı, Unicode Standardına göre kuralsal olarak eşdeğer (canonically equivalent) olan Dizeleri özdeş olarak kabul etmelidir. Önceki sürümlerde gerçekleştirimlerin kuralsal eşdeğerliği yoksaymasına izin veriliyordu ve bunun yerine bit düzeyinde karşılaştırma (bit-wise comparison) kullanılabiliyordu.

22.1.3.28 ve 22.1.3.30 ECMAScript 2015'te, küçük/büyük harf dönüştürme işlemi kod noktaları (code points) üzerinde çalışır. Önceki sürümlerde bu tür dönüştürme işlemleri yalnızca bireysel kod birimlerine (code units) uygulanıyordu. Bu durumdan etkilenen tek kod noktaları, Unicode'un Deseret bloğundaki kod noktalarıdır.

22.1.3.32 ECMAScript 2015'te, String.prototype.trim metodunun Unicode BMP dışında bulunabilecek boşluk (white space) kod noktalarını tanıyacağı tanımlanmıştır. Ancak Unicode 7 itibarıyla bu tür kod noktaları tanımlanmamıştır. Önceki sürümlerde bu tür kod noktaları boşluk olarak tanınmıyordu.

22.2.4.1 ECMAScript 2015'te, eğer pattern argümanı bir RegExp örneğiyse ve flags argümanı undefined değilse, pattern'ın bayraklarının flags argümanıyla değiştirilmesi dışında tıpkı pattern gibi yeni bir RegExp örneği oluşturulur. Önceki sürümlerde, pattern bir RegExp örneği olduğunda ve flags undefined olmadığında bir TypeError istisnası fırlatılıyordu.

22.2.6 ECMAScript 2015'te, RegExp prototip nesnesi (RegExp prototype object) bir RegExp örneği (RegExp instance) değildir. Önceki sürümlerde, deseni boş Dize (empty String) olan bir RegExp örneğiydi.

22.2.6 ECMAScript 2015'te, "source", "global", "ignoreCase" ve "multiline", RegExp prototip nesnesi (RegExp prototype object) üzerinde tanımlanmış erişici özellikleridir (accessor properties). Önceki sürümlerde bunlar RegExp örnekleri üzerinde tanımlanmış veri özellikleridir (data properties).

25.4.15: ECMAScript 2019'da, Atomics.wait ile karışıklığı önlemek için Atomics.wake adı Atomics.notify olarak değiştirilmiştir.

27.1.5.4, 27.6.3.6: ECMAScript 2019'da, await tarafından kuyruğa alınan İşlerin (Jobs) sayısı azaltılmıştır; bu durum, bir then() çağrısı ile bir await ifadesi arasındaki çözümlenme sırasında gözlemlenebilir bir fark oluşturabilir.