Annex F (informative) 이전 판과의 비호환성을 도입하는 추가 및 변경

6.2.5: ECMAScript 2015에서 함수 호출은 Reference Record 를 반환할 수 없다.

7.1.4.1: ECMAScript 2015에서 ToNumber 는 String 값에 적용될 때 BinaryIntegerLiteralOctalIntegerLiteral 숫자 문자열을 인식하고 변환한다. 이전 판에서는 그러한 문자열이 NaN 으로 변환되었다.

9.3: ECMAScript 2018에서 템플릿 객체는 이전 판의 Realm 내 템플릿 리터럴 또는 태그된 템플릿 모든 출현 간이 아니라 Parse Node (소스 위치) 기반으로 정규화된다.

12.2: ECMAScript 2016에서 Unicode 8.0.0 이상이 요구된다(2015판은 Unicode 5.1 요구). 특히 U+180E MONGOLIAN VOWEL SEPARATOR 가 Space_Separator (Zs) 범주에서 Format (Cf) 범주로 이동(Unicode 6.3.0)하여 공백 처리 메서드의 동작이 달라진다. 예: "\u180E".trim().length 는 이전 판에서 0 이었지만 ECMAScript 2016 이후 1. 또한 ECMAScript 2017은 항상 최신 Unicode 표준 사용을 요구.

12.7: ECMAScript 2015에서 IdentifierName 유효 코드 포인트는 Unicode 속성 “ID_Start”, “ID_Continue” 로 지정된다. 이전 판에서는 유효 IdentifierName 또는 Identifier 코드 포인트가 다양한 Unicode 범주를 열거하여 지정되었다.

12.10.1: ECMAScript 2015에서 자동 세미콜론 삽입은 do-while 문 끝에 세미콜론이 없으면 추가한다. 이 변경은 대부분 구현의 실제 동작과 일치.

13.2.5.1: ECMAScript 2015에서 Object Initializer 내 중복 프로퍼티 이름은 더 이상 초기 에러가 아니다.

13.15.1: ECMAScript 2015에서 FunctionExpression 의 함수 이름과 같은 불변 바인딩에 대한 대입을 포함한 엄격 모드 코드는 초기 에러를 발생시키지 않고 런타임 에러를 발생시킨다.

14.2: ECMAScript 2015에서 토큰 let 으로 시작하고 그 뒤에 입력 요소 LineTerminatorIdentifier 가 따라오는 StatementListLexicalDeclaration 시작이다. 이전 판에서는 자동 세미콜론 삽입이 항상 Identifier 입력 요소 앞에 세미콜론 삽입.

14.5: ECMAScript 2015에서 토큰 let 으로 시작하고 토큰 [ 가 뒤따르는 StatementListItemLexicalDeclaration 시작이다. 이전 판에서는 그러한 시퀀스가 ExpressionStatement 시작이었다.

14.6.2: ECMAScript 2015에서 IfStatement 의 정상 결과는 결코 empty 값이 아니다. 어떤 Statement 부분도 평가되지 않거나 평가된 Statement 부분이 empty 를 포함하는 정상 완료를 생성하면 결과는 undefined.

14.7: ECMAScript 2015에서 for 문 ( 토큰 바로 뒤에 토큰 시퀀스 let [ 가 오면 letLexicalDeclaration 시작으로 처리된다. 이전 판에서는 그 시퀀스가 Expression 시작.

14.7: ECMAScript 2015에서 for-in 문 ( 토큰 바로 뒤에 토큰 시퀀스 let [ 가 오면 letForDeclaration 시작으로 처리된다. 이전 판에서는 그 시퀀스가 LeftHandSideExpression 시작.

14.7: ECMAScript 2015 이전에는 초기화 식이 in 키워드 앞 VariableDeclaration 일부로 나타날 수 있었다. ECMAScript 2015에서 동일 위치의 ForBinding 은 그러한 초기화자의 출현을 허용하지 않는다. ECMAScript 2017에서 그러한 초기화자는 비엄격 코드에서만 허용.

14.7: ECMAScript 2015에서 IterationStatement 평가 결과는 결코 [[Value]]empty 인 정상 완료가 아니다. Statement 부분이 평가되지 않았거나 최종 평가가 [[Value]] empty 인 정상 완료를 생성하면 결과 [[Value]]undefined 인 정상 완료.

14.11.2: ECMAScript 2015에서 WithStatement 평가 결과는 결코 [[Value]]empty 인 정상 완료가 아니다. Statement 부분 평가가 [[Value]] empty 인 정상 완료를 생성하면 결과 [[Value]]undefined.

14.12.4: ECMAScript 2015에서 SwitchStatement 평가 결과는 결코 [[Value]]empty 인 정상 완료가 아니다. CaseBlock 부분 평가가 [[Value]] empty 인 정상 완료를 생성하면 결과 [[Value]]undefined.

14.15: ECMAScript 2015에서 Catch 절이 매개변수와 동일한 Identifier 에 대해 var 선언을 포함하면 초기 에러이다. 이전 판에서는 그러한 변수 선언이 둘러싼 변수 환경에서 인스턴스화되지만 선언의 Initializer 값이 Catch 매개변수에 할당되었다.

14.15, 19.2.1.3: ECMAScript 2015에서 Catch 절이 동일한 Identifier 를 바인딩하는 var 또는 FunctionDeclaration 을 포함하는 비엄격 direct eval 을 평가하면 런타임 SyntaxError 가 던져진다.

14.15.3: ECMAScript 2015에서 TryStatement 결과는 결코 empty 값이 아니다. Block 부분이 empty 를 포함하는 정상 완료로 평가되면 결과는 undefined. Block 부분이 throw 완료로 평가되고 Catch 부분이 empty 정상 완료를 평가하면 Finally 가 없거나 Finallyempty 정상 완료로 평가되는 경우 결과는 undefined.

15.4.5: ECMAScript 2015에서 ObjectLiteral접근자 프로퍼티 [[Get]] 또는 [[Set]] 속성 값으로 생성된 함수 객체생성자 함수가 아니며 "prototype" own 프로퍼티를 갖지 않는다. 이전 판에서는 생성자이며 "prototype" 프로퍼티가 있었다.

20.1.2.6: ECMAScript 2015에서 Object.freeze 인수가 객체가 아니면 자체 프로퍼티가 없는 비확장 ordinary 객체처럼 취급된다. 이전 판에서는 비객체 인수는 항상 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 인수가 객체가 아니면 자체 프로퍼티 없는 비확장 ordinary 객체처럼 취급. 이전 판에서는 TypeError.

20.1.2.17: ECMAScript 2015에서 Object.isFrozen 인수가 객체가 아니면 자체 프로퍼티 없는 비확장 ordinary 객체처럼 취급. 이전 판에서는 TypeError.

20.1.2.18: ECMAScript 2015에서 Object.isSealed 인수가 객체가 아니면 자체 프로퍼티 없는 비확장 ordinary 객체처럼 취급. 이전 판에서는 TypeError.

20.1.2.19: ECMAScript 2015에서 Object.keys 인수가 객체가 아니면 ToObject 강제를 시도. 성공 시 결과 사용. 이전 판에서는 TypeError.

20.1.2.20: ECMAScript 2015에서 Object.preventExtensions 인수가 객체가 아니면 자체 프로퍼티 없는 비확장 ordinary 객체처럼 취급. 이전 판에서는 TypeError.

20.1.2.22: ECMAScript 2015에서 Object.seal 인수가 객체가 아니면 자체 프로퍼티 없는 비확장 ordinary 객체처럼 취급. 이전 판에서는 TypeError.

20.2.3.2: ECMAScript 2015에서 바운드 함수의 [[Prototype]] 내부 슬롯은 대상 함수의 [[GetPrototypeOf]] 값으로 설정된다. 이전 판에서는 항상 %Function.prototype%.

20.2.4.1: ECMAScript 2015에서 함수 인스턴스의 "length" 프로퍼티는 설정 가능(configurable)하다. 이전 판에서는 불가능.

20.5.6.2: ECMAScript 2015에서 NativeError 생성자[[Prototype]] 내부 슬롯은 Error 생성자이다. 이전 판에서는 Function prototype 객체.

21.4.4: ECMAScript 2015에서 Date 프로토타입 객체는 Date 인스턴스가 아니다. 이전 판에서는 TimeValue 가 NaN 인 Date 인스턴스였다.

22.1.3.12: ECMAScript 2015에서 String.prototype.localeCompare 는 Unicode 표준에 따라 정규 동등(canonical equivalence)한 문자열을 동일하게 취급해야 한다. 이전 판에서는 구현이 이를 무시하고 비트 단위 비교 사용 가능.

22.1.3.2822.1.3.30: ECMAScript 2015에서 소문자/대문자 변환 처리는 코드 포인트에 작동한다. 이전 판에서는 개별 코드 유닛에만 적용. 영향받는 코드는 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 의 플래그를 flags 로 교체한 새로운 RegExp 인스턴스 생성. 이전 판에서는 pattern 이 RegExp 인스턴스이고 flagsundefined 가 아니면 TypeError.

22.2.6: ECMAScript 2015에서 RegExp 프로토타입 객체는 RegExp 인스턴스가 아니다. 이전 판에서는 패턴이 빈 문자열인 RegExp 인스턴스였다.

22.2.6: ECMAScript 2015에서 "source", "global", "ignoreCase", "multiline"RegExp 프로토타입 객체에 정의된 접근자 프로퍼티이다. 이전 판에서는 RegExp 인스턴스에 정의된 데이터 프로퍼티.

25.4.15: ECMAScript 2019에서 Atomics.wakeAtomics.wait 와의 혼동을 방지하기 위해 Atomics.notify 로 이름 변경.

27.1.6.4, 27.6.3.6: ECMAScript 2019에서 await 가 큐에 넣는 Job 수가 감소하여 then() 호출과 await 표현식 간 해석 순서의 관찰 가능 차이가 생길 수 있음.