Annex F (informative) 以前のEditionsとのIncompatibilitiesをIntroduceするAdditions and Changes

6.2.5:ECMAScript 2015では、Function callsはReference Recordをreturnすることがallowedされない。

7.1.4.1:ECMAScript 2015では、String valueにappliedされるToNumberは、BinaryIntegerLiteralおよびOctalIntegerLiteral numeric stringsをrecognizesしてconvertsするようになった。previous editionsでは、そのようなstringsはNaNへconvertedされていた。

9.3:ECMAScript 2018では、Template objectsは、previous editionsにおけるRealm内のそのtemplate literalまたはtagged templateのすべてのoccurrences acrossではなく、Parse Node(source location)に基づいてcanonicalizedされる。

12.2:ECMAScript 2016では、ECMAScript 2015がUnicode 5.1をmandatedしていたのに対し、Unicode 8.0.0以上がmandatedされる。特に、これはU+180E MONGOLIAN VOWEL SEPARATORを引き起こした。これはECMAScript 2015ではSpace_SeparatorZs)categoryにあり、したがってwhitespaceとしてtreatedされていたが、(Unicode 6.3.0以降)FormatCf)categoryへmovedされた。これにより、whitespace-sensitive methodsは異なってbehaveする。例えば、"\u180E".trim().lengthはprevious editionsでは0であったが、ECMAScript 2016以降では1である。さらに、ECMAScript 2017はUnicode Standardのlatest versionを常に使用することをmandatedした。

12.7:ECMAScript 2015では、IdentifierNameのvalid code pointsはUnicode properties “ID_Start”および“ID_Continue”のtermsでspecifiedされる。previous editionsでは、valid IdentifierNameまたはIdentifier code pointsは様々なUnicode code point categoriesをenumeratingすることでspecifiedされていた。

12.10.1:ECMAScript 2015では、semicolonがmissingしている場合、Automatic Semicolon Insertionはdo-while statementのendにsemicolonをaddsする。このchangeはspecificationをほとんどのexisting implementationsのactual behaviourにalignする。

13.2.5.1:ECMAScript 2015では、Object Initializersにduplicate property namesがあることはもはやearly errorではない。

13.15.1:ECMAScript 2015では、FunctionExpressionのfunction nameのようなimmutable bindingへのassignmentをcontainするstrict mode codeearly errorをproduceしない。代わりにruntime errorをproduceする。

14.2:ECMAScript 2015では、token letで始まり、その後にinput elements LineTerminator、次にIdentifierが続くStatementListLexicalDeclarationのstartである。previous editionsでは、automatic semicolon insertionは常にIdentifier input elementの前にsemicolonをinsertしていた。

14.5:ECMAScript 2015では、token letで始まりtoken [が続くStatementListItemLexicalDeclarationのstartである。previous editionsでは、そのようなsequenceはExpressionStatementのstartであった。

14.6.2:ECMAScript 2015では、IfStatementのnormal resultは決してvalue emptyではない。Statement partがevaluatedされない場合、またはevaluatedされたStatement partがempty含むnormal completionをproduceする場合、IfStatementのresultはundefinedである。

14.7:ECMAScript 2015では、for statementの( tokenの直後にtoken sequence let [が続く場合、そのletLexicalDeclarationのstartとしてtreatedされる。previous editionsでは、そのようなtoken sequenceはExpressionのstartであった。

14.7:ECMAScript 2015では、for-in statementの( tokenの直後にtoken sequence let [が続く場合、そのletForDeclarationのstartとしてtreatedされる。previous editionsでは、そのようなtoken sequenceはLeftHandSideExpressionのstartであった。

14.7:ECMAScript 2015より前、initialization expressionはin keywordにprecedeするVariableDeclarationのpartとしてappearできた。ECMAScript 2015では、同じpositionのForBindingはそのようなinitializerのoccurrenceをallowしない。ECMAScript 2017では、そのようなinitializerはnon-strict codeでのみpermittedされる。

14.7:ECMAScript 2015では、IterationStatementをevaluatingしたresultは、[[Value]]emptyであるnormal completionには決してならない。IterationStatementStatement partがevaluatedされない場合、またはStatement partのfinal evaluationが[[Value]]emptyであるnormal completionをproduceする場合、IterationStatementをevaluatingしたresultは[[Value]]undefinedであるnormal completionである。

14.11.2:ECMAScript 2015では、WithStatementをevaluatingしたresultは、[[Value]]emptyであるnormal completionには決してならない。WithStatementStatement partのevaluationが[[Value]]emptyであるnormal completionをproduceする場合、WithStatementをevaluatingしたresultは[[Value]]undefinedであるnormal completionである。

14.12.4:ECMAScript 2015では、SwitchStatementをevaluatingしたresultは、[[Value]]emptyであるnormal completionには決してならない。SwitchStatementCaseBlock partのevaluationが[[Value]]emptyであるnormal completionをproduceする場合、SwitchStatementをevaluatingしたresultは[[Value]]undefinedであるnormal completionである。

14.15:ECMAScript 2015では、Catch clauseがCatch clause parameterとしてappearする同じIdentifierに対するvar declarationをcontainすることはearly errorである。previous editionsでは、そのようなvariable declarationはenclosing variable environment内でinstantiatedされるが、declarationのInitializer valueはCatch parameterにassignedされていた。

14.15, 19.2.1.3:ECMAScript 2015では、Catch clauseがnon-strict direct evalをevaluatesし、そのeval codeがCatch clause parameterとしてappearする同じIdentifierをbindするvarまたはFunctionDeclaration declarationを含む場合、runtime SyntaxErrorがthrownされる。

14.15.3:ECMAScript 2015では、TryStatementのresultは決してvalue emptyではない。TryStatementBlock partがempty含むnormal completionへevaluatesする場合、TryStatementのresultはundefinedである。TryStatementBlock partがthrow completionへevaluatesし、empty含むnormal completionへevaluatesするCatch partを持つ場合、Finally clauseがない、またはそのFinally clauseがempty normal completionへevaluatesするなら、TryStatementのresultはundefinedである。

15.4.5 ECMAScript 2015では、ObjectLiteral内のaccessor properties[[Get]]または[[Set]] attributeのvaluesとしてcreatedされるfunction objectsconstructor functionsではなく、"prototype" own propertyを持たない。previous editionでは、それらはconstructorsであり、"prototype" propertyを持っていた。

20.1.2.6:ECMAScript 2015では、Object.freezeへのargumentがobjectでない場合、それはown propertiesを持たないnon-extensible ordinary objectであるかのようにtreatedされる。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.8:ECMAScript 2015では、Object.getOwnPropertyDescriptorへのargumentがobjectでない場合、ToObjectを使用してそのargumentをcoerceするattemptが行われる。coercionがsuccessfulなら、resultがoriginal argument valueの代わりに使用される。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.10:ECMAScript 2015では、Object.getOwnPropertyNamesへのargumentがobjectでない場合、ToObjectを使用してそのargumentをcoerceするattemptが行われる。coercionがsuccessfulなら、resultがoriginal argument valueの代わりに使用される。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.12:ECMAScript 2015では、Object.getPrototypeOfへのargumentがobjectでない場合、ToObjectを使用してそのargumentをcoerceするattemptが行われる。coercionがsuccessfulなら、resultがoriginal argument valueの代わりに使用される。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.16:ECMAScript 2015では、Object.isExtensibleへのargumentがobjectでない場合、それはown propertiesを持たないnon-extensible ordinary objectであるかのようにtreatedされる。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.17:ECMAScript 2015では、Object.isFrozenへのargumentがobjectでない場合、それはown propertiesを持たないnon-extensible ordinary objectであるかのようにtreatedされる。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.18:ECMAScript 2015では、Object.isSealedへのargumentがobjectでない場合、それはown propertiesを持たないnon-extensible ordinary objectであるかのようにtreatedされる。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.19:ECMAScript 2015では、Object.keysへのargumentがobjectでない場合、ToObjectを使用してそのargumentをcoerceするattemptが行われる。coercionがsuccessfulなら、resultがoriginal argument valueの代わりに使用される。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.20:ECMAScript 2015では、Object.preventExtensionsへのargumentがobjectでない場合、それはown propertiesを持たないnon-extensible ordinary objectであるかのようにtreatedされる。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.1.2.22:ECMAScript 2015では、Object.sealへのargumentがobjectでない場合、それはown propertiesを持たないnon-extensible ordinary objectであるかのようにtreatedされる。previous editionでは、non-object argumentは常にTypeErrorをthrowさせていた。

20.2.3.2:ECMAScript 2015では、bound functionの[[Prototype]] internal slotは、そのtarget functionの[[GetPrototypeOf]] valueに設定される。previous editionでは、[[Prototype]]は常に%Function.prototype%に設定されていた。

20.2.4.1:ECMAScript 2015では、function instancesの"length" propertyはconfigurableである。previous editionsではnon-configurableであった。

20.5.6.2:ECMAScript 2015では、NativeError constructor[[Prototype]] internal slotはError constructorである。previous editionsではFunction prototype objectであった。

21.4.4 ECMAScript 2015では、Date prototype objectはDate instanceではない。previous editionsでは、TimeValueがNaNであるDate instanceであった。

22.1.3.12 ECMAScript 2015では、String.prototype.localeCompare functionはUnicode Standardに従ってcanonically equivalentであるStringsをidenticalとしてtreatしなければならない。previous editionsでは、implementationsはcanonical equivalenceをignoreし、代わりにbit-wise comparisonを使用することがpermittedされていた。

22.1.3.28および22.1.3.30 ECMAScript 2015では、lowercase/upper conversion processingはcode points上でoperatesする。previous editionsでは、そのようなconversion processingはindividual code unitsにのみappliedされていた。affectedされるcode pointsはUnicodeのDeseret block内のものだけである。

22.1.3.32 ECMAScript 2015では、String.prototype.trim methodはUnicode BMP外にexistしうるwhite space code pointsをrecognizeするようにdefinedされる。しかし、Unicode 7時点ではそのようなcode pointsはdefinedされていない。previous editionsでは、そのようなcode pointsはwhite spaceとしてrecognizedされなかった。

22.2.4.1 ECMAScript 2015では、pattern argumentがRegExp instanceでありflags argumentがundefinedでない場合、patternと同じだがpatternのflagsがargument flagsでreplacedされたnew RegExp instanceがcreatedされる。previous editionsでは、patternがRegExp instanceでありflagsundefinedでない場合、TypeError例外がthrownされていた。

22.2.6 ECMAScript 2015では、RegExp prototype objectはRegExp instanceではない。previous editionsでは、patternがempty StringであるRegExp instanceであった。

22.2.6 ECMAScript 2015では、"source""global""ignoreCase"、および"multiline"RegExp prototype object上でdefinedされるaccessor propertiesである。previous editionsでは、それらはRegExp instances上でdefinedされるdata propertiesであった。

25.4.10:ECMAScript 2019では、Atomics.waitとのconfusionをpreventするため、Atomics.wakeAtomics.notifyへrenamedされた。

27.1.5.4, 27.9.3.6:ECMAScript 2019では、awaitによってenqueuedされるJobsのnumberがreducedされ、これはthen() callとawait expressionの間のresolution orderにobservable differenceをcreateしうる。