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_Separator(Zs)categoryにあり、したがってwhitespaceとしてtreatedされていたが、(Unicode 6.3.0以降)Format(Cf)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 codeはearly errorをproduceしない。代わりにruntime errorをproduceする。
14.2:ECMAScript 2015では、token letで始まり、その後にinput elements LineTerminator、次にIdentifierが続くStatementListはLexicalDeclarationのstartである。previous editionsでは、automatic semicolon insertionは常にIdentifier input elementの前にsemicolonをinsertしていた。
14.5:ECMAScript 2015では、token letで始まりtoken [が続くStatementListItemはLexicalDeclarationの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 [が続く場合、そのletはLexicalDeclarationのstartとしてtreatedされる。previous editionsでは、そのようなtoken sequenceはExpressionのstartであった。
14.7:ECMAScript 2015では、for-in statementの( tokenの直後にtoken sequence let [が続く場合、そのletはForDeclarationの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には決してならない。IterationStatementのStatement 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には決してならない。WithStatementのStatement 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には決してならない。SwitchStatementのCaseBlock 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ではない。TryStatementのBlock partがemptyを含むnormal completionへevaluatesする場合、TryStatementのresultはundefinedである。TryStatementのBlock 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 objectsはconstructor 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でありflagsがundefinedでない場合、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.wakeはAtomics.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しうる。