Annex F (informative) Prior 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됩니다. 특히 이는 ECMAScript 2015에서 Space_Separator (Zs) category에 있어 whitespace로 treated되었던 U+180E MONGOLIAN VOWEL SEPARATOR가 Unicode 6.3.0부터 Format (Cf) category로 moved되도록 했습니다. 이는 whitespace-sensitive methods가 differently behave하게 합니다. 예를 들어, "\u180E".trim().length는 previous editions에서는 0이었지만 ECMAScript 2016 이후에는 1입니다. Additionally, 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에서 Automatic Semicolon Insertion은 do-while statement의 semicolon이 missing이면 그 end에 semicolon을 adds합니다. 이 change는 specification을 대부분의 existing implementations의 actual behaviour와 aligns합니다.
13.2.5.1: ECMAScript 2015에서 Object Initializers에 duplicate property names가 있는 것은 더 이상 early error가 아닙니다.
13.15.1: ECMAScript 2015에서 FunctionExpression의 function name과 같은 immutable binding에 대한 assignment를 containing하는 strict mode code는 early error를 produce하지 않습니다. 대신 runtime error를 produces합니다.
14.2: ECMAScript 2015에서 token let 다음에 input elements LineTerminator, then Identifier가 followed되는 StatementList는 LexicalDeclaration의 start입니다. previous editions에서는 automatic semicolon insertion이 always Identifier input element 앞에 semicolon을 insert했을 것입니다.
14.5: ECMAScript 2015에서 token let 다음에 token [가 followed되는 StatementListItem은 LexicalDeclaration의 start입니다. previous editions에서 그러한 sequence는 ExpressionStatement의 start였을 것입니다.
14.6.2: ECMAScript 2015에서 IfStatement의 normal result는 never value empty입니다. Statement part가 evaluated되지 않았거나 evaluated된 Statement part가 empty를 containing하는 normal completion을 produces하면, IfStatement의 result는 undefined입니다.
14.7: ECMAScript 2015에서 for statement의 ( token이 immediately token sequence let [로 followed되면 let은 LexicalDeclaration의 start로 treated됩니다. previous editions에서 그러한 token sequence는 Expression의 start였을 것입니다.
14.7: ECMAScript 2015에서 for-in statement의 ( token이 immediately token sequence let [로 followed되면 let은 ForDeclaration의 start로 treated됩니다. previous editions에서 그러한 token sequence는 LeftHandSideExpression의 start였을 것입니다.
14.7: ECMAScript 2015 이전에는 initialization expression이 in keyword를 precedes하는 VariableDeclaration의 일부로 appear할 수 있었습니다. ECMAScript 2015에서 같은 position의 ForBinding은 그러한 initializer의 occurrence를 allow하지 않습니다. ECMAScript 2017에서는 그러한 initializer가 non-strict code에서만 permitted됩니다.
14.7: ECMAScript 2015에서 IterationStatement를 evaluating한 result는 never [[Value]]가 empty인 normal completion입니다. IterationStatement의 Statement part가 evaluated되지 않았거나 Statement part의 final evaluation이 [[Value]]가 empty인 normal completion을 produces하면, IterationStatement를 evaluating한 result는 [[Value]]가 undefined인 normal completion입니다.
14.11.2: ECMAScript 2015에서 WithStatement를 evaluating한 result는 never [[Value]]가 empty인 normal completion입니다. WithStatement의 Statement part의 evaluation이 [[Value]]가 empty인 normal completion을 produces하면, WithStatement를 evaluating한 result는 [[Value]]가 undefined인 normal completion입니다.
14.12.4: ECMAScript 2015에서 SwitchStatement를 evaluating한 result는 never [[Value]]가 empty인 normal completion입니다. SwitchStatement의 CaseBlock part의 evaluation이 [[Value]]가 empty인 normal completion을 produces하면, SwitchStatement를 evaluating한 result는 [[Value]]가 undefined인 normal completion입니다.
14.15: ECMAScript 2015에서 Catch clause가 Catch clause parameter로 appears하는 동일한 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가 Catch clause parameter로 appears하는 동일한 Identifier를 binds하는 var 또는 FunctionDeclaration declaration을 포함하는 eval code를 가진 non-strict direct eval을 evaluates하면 runtime SyntaxError가 thrown됩니다.
14.15.3: ECMAScript 2015에서 TryStatement의 result는 never value empty입니다. TryStatement의 Block part가 empty를 containing하는 normal completion으로 evaluates되면 TryStatement의 result는 undefined입니다. TryStatement의 Block part가 throw completion으로 evaluates되고, normal completion containing empty로 evaluates되는 Catch part를 가지며, Finally clause가 없거나 its 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가 always TypeError를 thrown하게 했습니다.
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가 always TypeError를 thrown하게 했습니다.
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가 always TypeError를 thrown하게 했습니다.
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가 always TypeError를 thrown하게 했습니다.
20.1.2.16: ECMAScript 2015에서 Object.isExtensible의 argument가 object가 아니면 own properties가 없는 non-extensible ordinary object인 것처럼 treated됩니다. previous edition에서는 non-object argument가 always TypeError를 thrown하게 했습니다.
20.1.2.17: ECMAScript 2015에서 Object.isFrozen의 argument가 object가 아니면 own properties가 없는 non-extensible ordinary object인 것처럼 treated됩니다. previous edition에서는 non-object argument가 always TypeError를 thrown하게 했습니다.
20.1.2.18: ECMAScript 2015에서 Object.isSealed의 argument가 object가 아니면 own properties가 없는 non-extensible ordinary object인 것처럼 treated됩니다. previous edition에서는 non-object argument가 always TypeError를 thrown하게 했습니다.
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가 always TypeError를 thrown하게 했습니다.
20.1.2.20: ECMAScript 2015에서 Object.preventExtensions의 argument가 object가 아니면 own properties가 없는 non-extensible ordinary object인 것처럼 treated됩니다. previous edition에서는 non-object argument가 always TypeError를 thrown하게 했습니다.
20.1.2.22: ECMAScript 2015에서 Object.seal의 argument가 object가 아니면 own properties가 없는 non-extensible ordinary object인 것처럼 treated됩니다. previous edition에서는 non-object argument가 always TypeError를 thrown하게 했습니다.
20.2.3.2: ECMAScript 2015에서 bound function의 [[Prototype]] internal slot은 target function의 [[GetPrototypeOf]] value로 set됩니다. previous edition에서 [[Prototype]]은 always %Function.prototype%으로 set되었습니다.
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을 사용할 수 있었습니다.
22.1.3.28 및 22.1.3.30 ECMAScript 2015에서 lowercase/upper conversion processing은 code points에 대해 operates합니다. previous editions에서는 such conversion processing이 individual code units에만 applied되었습니다. affected되는 유일한 code points는 Unicode의 Deseret block에 있는 것들입니다.
22.1.3.32 ECMAScript 2015에서 String.prototype.trim method는 Unicode BMP 밖에 존재할 수 있는 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 exception이 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.wake는 Atomics.wait와의 confusion을 prevent하기 위해 Atomics.notify로 renamed되었습니다.
27.1.5.4, 27.9.3.6: ECMAScript 2019에서 await에 의해 enqueued되는 Jobs의 수가 reduced되었으며, 이는 then() call과 await expression 사이의 resolution order에 observable difference를 create할 수 있었습니다.