このページはECMAScript® 2020 Language SpecificationE Additions and Changes That Introduce Incompatibilities with Prior Editions章をJavaScriptの学習目的で私的に日本語訳したものであり、直訳と意訳および推測が混在しています。そのため内容については正確ではない可能性があります。正確な情報を知りたい場合は、原文をご覧ください。また一部訳者によるコメントが含まれていることがあります。※このサイトの内容で損害や不利益を受けたとしても当方は一切の責任を負いません。

6.2.4:ECMAScript2015では、関数呼び出しでReference値を返すことは許可されていません。

7.1.4.1 :ECMAScript2015では、文字列値に適用されたToNumberが、BinaryIntegerLiteralOctalIntegerLiteral数値文字列を認識して変換するようになりました。 以前のエディションでは、このような文字列はNaNに変換されていました。

8.2:ECMAScript2018では、Templateオブジェクトは、以前の版ではレルムでのテンプレートリテラルまたはタグ付きテンプレートのすべての出現に基づいて正規化されていましたが、解析ノード(ソースの場所)に基づいて正規化されます。

11.2:ECMASCript2016では、Unicode5.1を義務付けたECMAScript2015とは対照的に、Unicode8.0.0以降が義務付けられています。 これにより、Space_SeparatorZs)カテゴリに含まれていたためECMAScript2015では空白として扱われていたU+180E (MONGOLIAN VOWEL SEPARATOR)がFormatCf)カテゴリに移動しました(Unicode 6.3.0以降)。 これにより、空白に関連するメソッドの動作が異なります。 たとえば、"\u180E".trim().lengthは以前の版では0です。しかし、ECMAScript2016以降では1です。 さらに、ECMAScript2017では、常に最新バージョンのUnicode標準を使用することを義務付けています。

11.6:ECMAScript2015では、IdentifierNameの有効なコードポイントは、Unicodeプロパティ"ID_Start"および"ID_Continue"に関して指定されています。 以前の版では、有効なIdentifierNameまたはIdentifierコードポイントは、さまざまなUnicodeコードポイントカテゴリを列挙することによって指定されていました。

11.9.1:ECMAScript2015では、セミコロンが欠落している場合、自動セミコロン挿入により、do-whileステートメントの最後にセミコロンが追加されます。 この変更により、仕様はほとんどの既存の実装の実際の動作と一致します。

12.2.6.1:ECMAScript2015では、オブジェクトイニシャライザーに重複するプロパティ名は初期のエラーではなくなりました。

12.15.1:ECMAScript2015では、FunctionExpressionの関数名など、不変のバインディングへの割り当てを含むstrictモードコードは、初期エラーを生成しません。 代わりに、ランタイムエラーが発生します。

13.2:ECMAScript2015では、トークンletで始まり、LineTerminatorIdentifierが続くStatementListLexicalDeclarationの開始です。 以前の版では、自動セミコロン挿入は常に Identifierの前にセミコロンを挿入していました。

13.5:ECMAScript2015では、トークンletで始まり、その後にトークン [ が続くStatementListItemLexicalDeclarationの開始です。 以前のエディションでは、このようなシーケンスはExpressionStatementの開始でした。

13.6.7:ECMAScript2015では、IfStatementの通常の完了値がempty値になることはありません。 Statementが評価されない場合、または評価されたStatementが値がemptyの通常の完了を生成する場合、IfStatementの完了値はundefinedです。

13.7:ECMAScript2015では、forステートメントの ( トークンの直後にトークンlet [ が続く場合、letLexicalDeclarationの開始として扱われます。以前の版では、このようなトークンシーケンスはExpressionの開始です。

13.7:ECMAScript2015では、for-inステートメントの ( トークンの直後にトークン let [ が続く場合、letForDeclarationの開始として扱われます。以前の版では、このようなトークンシーケンスは LeftHandSideExpression の開始です。

13.7:ECMAScript2015より前は、初期化式は、inキーワードの前にあるVariableDeclarationの一部と判断される可能性がありました。 ECMAScript2015では、同じ位置にあるForBindingは、そのようなイニシャライザーの発生を許可しません。 ECMAScript2017では、このような初期化子は非strictコード でのみ許可されます。

13.7:ECMAScript2015では、IterationStatementの完了値がempty値になることはありません。 IterationStatementStatementが評価されない場合、またはStatementの最終評価で値がemptyの完了が生成される場合、IterationStatementの完了値はundefinedです。

13.11.7:ECMAScript2015では、WithStatementの通常の完了値がemptyになることはありません。 WithStatement
Statement部分を評価すると、値がemptyの通常の完了が生成される場合、WithStatementの完了値はundefinedです。

13.12.11:ECMAScript2015では、SwitchStatementの完了値がempty値になることはありません。 SwitchStatementCaseBlockが、値がemptyの完了を生成する場合、SwitchStatementの完了値はundefinedです。

13.15:ECMAScript2015では、Catch句のパラメーターと同じIdentifierがvar宣言に含まれていると早期エラーです。 以前の版では、このような変数宣言は、それを囲む変数環境でインスタンス化されていましたが、宣言のInitializer値はCatchパラメーターに割り当てられていました。

13.1518.2.1.3:ECMAScript2015では、Catch句が、Catch句パラメーターと同じ識別子をバインドするvarまたはFunctionDeclaration宣言を含む eval コードに対して、非Strictなダイレクトevalを評価する場合、ランタイムSyntaxErrorがスローされます。

13.15.8:ECMAScript2015では、TryStatementの完了値がempty値になることはありません。 TryStatementBlockが、値がemptyの通常の完了と評価された場合、TryStatementの完了値はundefinedです。 TryStatementBlockがスロー完了と評価され、値がemptyの通常の完了と評価されるCatch
があり、Finally句がない、またはFinally句がemptyの通常の完了と評価される場合、TryStatementの完了値はundefinedです。

14.3.8: ECMAScript2015では、ObjectLiteralの[[Get]]または[[Set]]アクセサプロパティの属性値として作成される関数オブジェクトはコンストラクター関数ではなく、独自プロパティ"prototype"を持っていません。 前の版では、それらはコンストラクターであり、 "prototype"プロパティを持っていました。

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

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

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

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

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

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

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

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

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

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

19.2.3.2:ECMAScript2015では、バインドされた関数の[[Prototype]]内部スロットは、そのターゲット関数の[[GetPrototypeOf]]値に設定されます。 以前のエディションでは、[[Prototype]]は常に%Function.prototype%に設定されていました。

19.2.4.1:ECMAScript2015では、関数インスタンスの"length"プロパティを構成できます。 以前の版では、構成できませんでした。

19.5.6.2:ECMAScript2015では、NativeErrorコンストラクターの[[Prototype]]内部スロットはErrorコンストラクターです。 以前のエディションでは、これは関数プロトタイプオブジェクトでした。

20.4.4: ECMAScript2015では、DateプロトタイプオブジェクトはDateインスタンスではありません。 以前の版では、TimeValueがNaNであるDateインスタンスでした。

21.1.3.10: ECMAScript2015では、String.prototype.localeCompare関数は、Unicode標準に従って正規に同等である文字列を同一として扱う必要があります。 以前の版では、実装は正規の等価性を無視することが許可されています。その代わりにビット単位の比較を使用できました。

21.1.3.2521.1.3.27: ECMAScript2015では、小文字/大文字の変換処理はコードポイントで動作します。 以前の版では、個々のコードユニットにのみ適用されていました。 影響を受けるコードポイントは、UnicodeのDeseretブロックにあるものだけです。

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

21.2.3.1: ECMAScript2015では、pattern引数がRegExpインスタンスで、flags引数がundefinedでない場合、patternのflagsが引数のflagsで置き換えられることを除いて、patternと同じように新しいRegExpインスタンスが作成されます。 以前の版では、patternがRegExpインスタンスで、flagsundefinedでない場合、TypeError例外がスローされていました。

21.2.5: ECMAScript2015では、RegExpプロトタイプオブジェクトはRegExpインスタンスではありません。 以前の版では、パターンが空の文字列であるRegExpインスタンスでした。

21.2.5: ECMAScript2015では、"source""global"、"ignoreCase""multiline"は、RegExpプロトタイプオブジェクトで定義されたアクセサプロパティです。 以前の版では、それらはRegExpインスタンスで定義されたデータプロパティでした。

24.4.12:ECMAScript2019では、Atomics.waitとの混同を防ぐために、Atomics.wakeAtomics.notifyに変更しました。

25.1.4.425.5.3.5:ECMAScript2019では、awaitによってキューに入れられるジョブの数が減り、then() 呼び出しとawait式の間の解決順序に観察可能な違いが生じる可能性がありました。