ページ表示設定

附属書 F (参考) 以前の版との非互換性を導入する追加および変更

6.2.5: ECMAScript 2015 では、Function 呼出しは 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(ソース位置)に基づいて canonicalize されます。

12.2: ECMAScript 2016 では、Unicode 5.1 を必須としていた ECMAScript 2015 とは異なり、Unicode 8.0.0 以降が必須となりました。特に、これにより ECMAScript 2015 では Space_Separator(Zs)カテゴリにあり空白として扱われていた U+180E MONGOLIAN VOWEL SEPARATOR が、(Unicode 6.3.0 以降)Format(Cf)カテゴリへ移動しました。これにより、空白に依存するメソッドの動作が異なるようになります。たとえば、以前の版では "\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 では、セミコロンが欠落している場合、Automatic Semicolon Insertion は do-while 文の末尾にセミコロンを追加します。この変更により、仕様が既存のほとんどの実装の実際の動作と一致します。

13.2.5.1: ECMAScript 2015 では、Object Initializer に重複するプロパティ名があることは、もはや早期エラーではありません。

13.15.1: ECMAScript 2015 では、FunctionExpression の関数名のような不変束縛への代入を含む strict モードコードは早期エラーを生成しません。代わりに実行時エラーを生成します。

14.2: ECMAScript 2015 では、token let で始まり、その後に入力要素 LineTerminator、次に Identifier が続く StatementList は LexicalDeclaration の開始です。以前の版では、automatic semicolon insertion は常に Identifier 入力要素の前にセミコロンを挿入していました。

14.5: ECMAScript 2015 では、token let で始まり、その後に token [ が続く StatementListItem は LexicalDeclaration の開始です。以前の版では、そのようなシーケンスは ExpressionStatement の開始でした。

14.6.2: ECMAScript 2015 では、IfStatement の正常結果が値 empty になることはありません。Statement 部分が評価されない場合、または評価された Statement 部分が empty を含む正常完了を生成した場合、IfStatement の結果は undefined です。

14.7: ECMAScript 2015 では、for 文の ( token の直後に token シーケンス let [ が続く場合、let は LexicalDeclaration の開始として扱われます。以前の版では、そのような token シーケンスは Expression の開始でした。

14.7: ECMAScript 2015 では、for-in 文の ( token の直後に token シーケンス let [ が続く場合、let は ForDeclaration の開始として扱われます。以前の版では、そのような token シーケンスは LeftHandSideExpression の開始でした。

14.7: ECMAScript 2015 より前は、初期化式が in キーワードより前の VariableDeclaration の一部として現れることができました。ECMAScript 2015 では、同じ位置の ForBinding にそのような initializer が現れることは許可されません。ECMAScript 2017 では、そのような initializer は非 strict コードでのみ許可されます。

14.7: ECMAScript 2015 では、IterationStatement の評価結果が [[Value]] に empty を持つ正常完了になることはありません。IterationStatement の Statement 部分が評価されない場合、または Statement 部分の最終評価が [[Value]] に empty を持つ正常完了を生成する場合、IterationStatement の評価結果は [[Value]] に undefined を持つ正常完了です。

14.11.2: ECMAScript 2015 では、WithStatement の評価結果が [[Value]] に empty を持つ正常完了になることはありません。WithStatement の Statement 部分の評価が [[Value]] に empty を持つ正常完了を生成する場合、WithStatement の評価結果は [[Value]] に undefined を持つ正常完了です。

14.12.4: ECMAScript 2015 では、SwitchStatement の評価結果が [[Value]] に empty を持つ正常完了になることはありません。SwitchStatement の CaseBlock 部分の評価が [[Value]] に empty を持つ正常完了を生成する場合、SwitchStatement の評価結果は [[Value]] に undefined を持つ正常完了です。

14.15: ECMAScript 2015 では、Catch 節が Catch 節のパラメーターに現れるものと同じ Identifier に対する var 宣言を含むことは早期エラーです。以前の版では、そのような変数宣言は外側の変数環境でインスタンス化されますが、その宣言の Initializer 値は Catch パラメーターへ代入されていました。

14.15、19.2.1.3: ECMAScript 2015 では、Catch 節が、eval コード内に Catch 節のパラメーターに現れるものと同じ Identifier を束縛する var または FunctionDeclaration 宣言を含む非 strict の direct eval を評価した場合、実行時 SyntaxError がスローされます。

14.15.3: ECMAScript 2015 では、TryStatement の結果が値 empty になることはありません。TryStatement の Block 部分が empty を含む正常完了に評価される場合、TryStatement の結果は undefined です。TryStatement の Block 部分がスロー完了に評価され、かつ empty を含む正常完了に評価される Catch 部分を持つ場合、Finally 節がないか、その Finally 節が empty の正常完了に評価される場合、TryStatement の結果は undefined です。

15.4.5 ECMAScript 2015 では、ObjectLiteral 内のアクセサープロパティの [[Getter]] または [[Setter]] 属性の値として作成される関数オブジェクトはコンストラクター関数ではなく、"prototype" own プロパティを持ちません。以前の版では、それらはコンストラクターであり、"prototype" プロパティを持っていました。

20.1.2.6: ECMAScript 2015 では、Object.freeze の引数がオブジェクトでない場合、own プロパティを持たない非拡張可能な通常オブジェクトであるかのように扱われます。以前の版では、オブジェクトでない引数は常に 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 プロパティを持たない非拡張可能な通常オブジェクトであるかのように扱われます。以前の版では、オブジェクトでない引数は常に TypeError をスローさせていました。

20.1.2.17: ECMAScript 2015 では、Object.isFrozen の引数がオブジェクトでない場合、own プロパティを持たない非拡張可能な通常オブジェクトであるかのように扱われます。以前の版では、オブジェクトでない引数は常に TypeError をスローさせていました。

20.1.2.18: ECMAScript 2015 では、Object.isSealed の引数がオブジェクトでない場合、own プロパティを持たない非拡張可能な通常オブジェクトであるかのように扱われます。以前の版では、オブジェクトでない引数は常に TypeError をスローさせていました。

20.1.2.19: ECMAScript 2015 では、Object.keys の引数がオブジェクトでない場合、ToObject を使用して引数を強制変換しようとします。強制変換に成功した場合、その結果が元の引数値の代わりに使用されます。以前の版では、オブジェクトでない引数は常に TypeError をスローさせていました。

20.1.2.20: ECMAScript 2015 では、Object.preventExtensions の引数がオブジェクトでない場合、own プロパティを持たない非拡張可能な通常オブジェクトであるかのように扱われます。以前の版では、オブジェクトでない引数は常に TypeError をスローさせていました。

20.1.2.22: ECMAScript 2015 では、Object.seal の引数がオブジェクトでない場合、own プロパティを持たない非拡張可能な通常オブジェクトであるかのように扱われます。以前の版では、オブジェクトでない引数は常に TypeError をスローさせていました。

20.2.3.2: ECMAScript 2015 では、bound function の [[Prototype]] 内部スロットは、そのターゲット関数の [[GetPrototypeOf]] 値に設定されます。以前の版では、[[Prototype]] は常に %Function.prototype% に設定されていました。

20.2.4.1: ECMAScript 2015 では、関数インスタンスの "length" プロパティは configurable です。以前の版では configurable ではありませんでした。

20.5.6.2: ECMAScript 2015 では、NativeError コンストラクターの [[Prototype]] 内部スロットは Error コンストラクターです。以前の版では Function prototype オブジェクトでした。

21.4.4 ECMAScript 2015 では、Date prototype オブジェクトは 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 では、小文字/大文字変換処理はコードポイントに対して動作します。以前の版では、その変換処理は個々の code unit にのみ適用されていました。影響を受けるコードポイントは Unicode の Deseret ブロック内のものだけです。

22.1.3.32 ECMAScript 2015 では、String.prototype.trim メソッドは Unicode BMP の外部に存在し得る空白コードポイントを認識するよう定義されています。ただし、Unicode 7 時点ではそのようなコードポイントは定義されていません。以前の版では、そのようなコードポイントは空白として認識されませんでした。

22.2.4.1 ECMAScript 2015 では、pattern 引数が RegExp インスタンスであり、flags 引数が undefined でない場合、pattern と同様だが pattern のフラグを引数 flags で置き換えた新しい RegExp インスタンスが作成されます。以前の版では、pattern が RegExp インスタンスで flags が undefined でない場合、TypeError 例外がスローされていました。

22.2.6 ECMAScript 2015 では、RegExp prototype オブジェクトは RegExp インスタンスではありません。以前の版では、パターンが空の String である RegExp インスタンスでした。

22.2.6 ECMAScript 2015 では、"source"、"global"、"ignoreCase"、および "multiline" は RegExp prototype オブジェクト上に定義されるアクセサープロパティです。以前の版では、RegExp インスタンス上に定義されるデータプロパティでした。

25.4.10: ECMAScript 2019 では、Atomics.wait との混同を防ぐため、Atomics.wake は Atomics.notify に改名されました。

27.1.5.4、27.9.3.6: ECMAScript 2019 では、await によってキューに追加される Job の数が削減され、then() 呼出しと await 式との間の resolve 順序に観測可能な差異が生じる可能性があります。