Annex F (informative) 以前の版との非互換性を導入する追加および変更
6.2.5:ECMAScript 2015 では、関数呼び出しは Reference Record を返すことを許可されない。
7.1.4.1:ECMAScript 2015 では、String 値に適用される ToNumber は、BinaryIntegerLiteral および OctalIntegerLiteral の数値文字列を認識して変換するようになった。以前の版では、そのような文字列は NaN に変換されていた。
9.3:ECMAScript 2018 では、Template オブジェクトは、以前の版における Realm 内のその template literal または tagged template のすべての出現にわたってではなく、Parse Node(ソース位置)に基づいて正準化される。
12.2:ECMAScript 2016 では、Unicode 5.1 を義務付けていた ECMAScript 2015 とは対照的に、Unicode 8.0.0 以上が義務付けられる。特に、これにより、ECMAScript 2015 では Space_Separator(Zs)カテゴリにあり whitespace として扱われていた U+180E MONGOLIAN VOWEL SEPARATOR が、(Unicode 6.3.0 時点で)Format(Cf)カテゴリへ移動された。これは whitespace-sensitive なメソッドの振る舞いを変える。例えば、"\u180E".trim().length は以前の版では 0 であったが、ECMAScript 2016 以降では 1 である。さらに、ECMAScript 2017 は常に Unicode Standard の最新版を使用することを義務付けた。
12.7:ECMAScript 2015 では、IdentifierName に有効なコードポイントは Unicode プロパティ “ID_Start” および “ID_Continue” によって指定される。以前の版では、有効な IdentifierName または Identifier コードポイントは、様々な Unicode コードポイントカテゴリを列挙することによって指定されていた。
12.10.1:ECMAScript 2015 では、do-while 文の末尾にセミコロンがない場合、Automatic Semicolon Insertion がセミコロンを追加する。この変更は、仕様をほとんどの既存実装の実際の振る舞いに合わせるものである。
13.2.5.1:ECMAScript 2015 では、Object Initializer 内に重複するプロパティ名を持つことは、もはや early error ではない。
13.15.1:ECMAScript 2015 では、FunctionExpression の関数名のような immutable binding への代入を含む strict mode コードは early error を生成しない。代わりに実行時エラーを生成する。
14.2:ECMAScript 2015 では、トークン let に続いて入力要素 LineTerminator、さらに Identifier で始まる StatementList は LexicalDeclaration の開始である。以前の版では、automatic semicolon insertion は常に Identifier 入力要素の前にセミコロンを挿入していた。
14.5:ECMAScript 2015 では、トークン let に続いてトークン [ で始まる StatementListItem は LexicalDeclaration の開始である。以前の版では、そのようなシーケンスは ExpressionStatement の開始であった。
14.6.2:ECMAScript 2015 では、IfStatement の normal result が値 empty になることは決してない。Statement 部分が評価されない場合、または評価された Statement 部分が empty を含む normal completion を生成する場合、IfStatement の結果は undefined である。
14.7:ECMAScript 2015 では、for 文の ( トークンの直後にトークンシーケンス let [ が続く場合、その let は LexicalDeclaration の開始として扱われる。以前の版では、そのようなトークンシーケンスは Expression の開始であった。
14.7:ECMAScript 2015 では、for-in 文の ( トークンの直後にトークンシーケンス let [ が続く場合、その let は ForDeclaration の開始として扱われる。以前の版では、そのようなトークンシーケンスは LeftHandSideExpression の開始であった。
14.7:ECMAScript 2015 より前は、初期化式が in キーワードに先行する VariableDeclaration の一部として現れることができた。ECMAScript 2015 では、同じ位置の ForBinding はそのような initializer の出現を許可しない。ECMAScript 2017 では、そのような initializer は非 strict コードでのみ許可される。
14.7:ECMAScript 2015 では、IterationStatement の評価結果が [[Value]] が empty である normal completion になることは決してない。IterationStatement の Statement 部分が評価されない場合、または Statement 部分の最終評価が [[Value]] が empty である normal completion を生成する場合、IterationStatement の評価結果は [[Value]] が undefined である normal completion である。
14.11.2:ECMAScript 2015 では、WithStatement の評価結果が [[Value]] が empty である normal completion になることは決してない。WithStatement の Statement 部分の評価が [[Value]] が empty である normal completion を生成する場合、WithStatement の評価結果は [[Value]] が undefined である normal completion である。
14.12.4:ECMAScript 2015 では、SwitchStatement の評価結果が [[Value]] が empty である normal completion になることは決してない。SwitchStatement の CaseBlock 部分の評価が [[Value]] が empty である normal completion を生成する場合、SwitchStatement の評価結果は [[Value]] が undefined である normal completion である。
14.15:ECMAScript 2015 では、Catch 節が、Catch 節のパラメータとして現れる同じ Identifier に対する var 宣言を含むことは early error である。以前の版では、そのような変数宣言は包含する variable environment にインスタンス化されたが、その宣言の Initializer 値は Catch パラメータへ代入されていた。
14.15, 19.2.1.3:ECMAScript 2015 では、Catch 節が、その Catch 節パラメータとして現れる同じ Identifier を束縛する var または FunctionDeclaration 宣言を eval コードが含む非 strict direct eval を評価する場合、実行時 SyntaxError が投げられる。
14.15.3:ECMAScript 2015 では、TryStatement の結果が値 empty になることは決してない。TryStatement の Block 部分が empty を含む normal completion に評価される場合、TryStatement の結果は undefined である。TryStatement の Block 部分が throw completion に評価され、かつ empty を含む normal completion に評価される Catch 部分を持つ場合、Finally 節が存在しないか、その Finally 節が empty normal completion に評価されるならば、TryStatement の結果は undefined である。
15.4.5 ECMAScript 2015 では、ObjectLiteral 内のアクセサプロパティの [[Get]] または [[Set]] 属性の値として作成される関数オブジェクトはコンストラクター関数ではなく、"prototype" own property を持たない。以前の版では、それらはコンストラクターであり、"prototype" プロパティを持っていた。
20.1.2.6:ECMAScript 2015 では、Object.freeze への引数がオブジェクトでない場合、それは own property を持たない non-extensible な ordinary object であるかのように扱われる。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.8:ECMAScript 2015 では、Object.getOwnPropertyDescriptor への引数がオブジェクトでない場合、ToObject を使用してその引数を強制変換しようとする。強制変換に成功すると、その結果が元の引数値の代わりに使用される。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.10:ECMAScript 2015 では、Object.getOwnPropertyNames への引数がオブジェクトでない場合、ToObject を使用してその引数を強制変換しようとする。強制変換に成功すると、その結果が元の引数値の代わりに使用される。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.12:ECMAScript 2015 では、Object.getPrototypeOf への引数がオブジェクトでない場合、ToObject を使用してその引数を強制変換しようとする。強制変換に成功すると、その結果が元の引数値の代わりに使用される。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.16:ECMAScript 2015 では、Object.isExtensible への引数がオブジェクトでない場合、それは own property を持たない non-extensible な ordinary object であるかのように扱われる。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.17:ECMAScript 2015 では、Object.isFrozen への引数がオブジェクトでない場合、それは own property を持たない non-extensible な ordinary object であるかのように扱われる。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.18:ECMAScript 2015 では、Object.isSealed への引数がオブジェクトでない場合、それは own property を持たない non-extensible な ordinary object であるかのように扱われる。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.19:ECMAScript 2015 では、Object.keys への引数がオブジェクトでない場合、ToObject を使用してその引数を強制変換しようとする。強制変換に成功すると、その結果が元の引数値の代わりに使用される。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.20:ECMAScript 2015 では、Object.preventExtensions への引数がオブジェクトでない場合、それは own property を持たない non-extensible な ordinary object であるかのように扱われる。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.1.2.22:ECMAScript 2015 では、Object.seal への引数がオブジェクトでない場合、それは own property を持たない non-extensible な ordinary object であるかのように扱われる。以前の版では、オブジェクトでない引数は常に TypeError を投げていた。
20.2.3.2:ECMAScript 2015 では、bound function の [[Prototype]] 内部スロットは、その target function の [[GetPrototypeOf]] 値に設定される。以前の版では、[[Prototype]] は常に %Function.prototype% に設定されていた。
20.2.4.1:ECMAScript 2015 では、関数インスタンスの "length" プロパティは configurable である。以前の版では non-configurable であった。
20.5.6.2:ECMAScript 2015 では、NativeError コンストラクターの [[Prototype]] 内部スロットは Error コンストラクターである。以前の版では Function プロトタイプオブジェクトであった。
21.4.4 ECMAScript 2015 では、Date プロトタイプオブジェクトは Date インスタンスではない。以前の版では、TimeValue が NaN である Date インスタンスであった。
22.1.3.12 ECMAScript 2015 では、String.prototype.localeCompare 関数は Unicode Standard に従って正準等価である String を同一として扱わなければならない。以前の版では、実装は正準等価性を無視し、代わりにビット単位の比較を使用することが許可されていた。
22.1.3.28 および 22.1.3.30 ECMAScript 2015 では、小文字/大文字変換処理はコードポイントに対して動作する。以前の版では、そのような変換処理は個々のコード単位にのみ適用されていた。影響を受けるコードポイントは Unicode の Deseret block 内のものだけである。
22.1.3.32 ECMAScript 2015 では、String.prototype.trim メソッドは Unicode BMP の外に存在し得る white space コードポイントを認識するように定義されている。ただし、Unicode 7 時点ではそのようなコードポイントは定義されていない。以前の版では、そのようなコードポイントは white space として認識されなかった。
22.2.4.1 ECMAScript 2015 では、pattern 引数が RegExp インスタンスであり、flags 引数が undefined でない場合、pattern のフラグが引数 flags に置き換えられることを除き、pattern と同様の新しい RegExp インスタンスが作成される。以前の版では、pattern が RegExp インスタンスであり、flags が undefined でない場合、TypeError 例外が投げられていた。
22.2.6 ECMAScript 2015 では、RegExp プロトタイプオブジェクトは RegExp インスタンスではない。以前の版では、パターンが空の String である RegExp インスタンスであった。
22.2.6 ECMAScript 2015 では、"source"、"global"、"ignoreCase"、および "multiline" は RegExp プロトタイプオブジェクト上に定義されるアクセサプロパティである。以前の版では、それらは RegExp インスタンス上に定義されたデータプロパティであった。
25.4.15:ECMAScript 2019 では、Atomics.wait との混同を防ぐため、Atomics.wake は Atomics.notify に名称変更された。
27.1.5.4, 27.6.3.6:ECMAScript 2019 では、await によってエンキューされる Job の数が削減され、これにより then() 呼び出しと await 式との間の解決順序に観測可能な差異が生じる可能性があった。