ECMAScript 2019
JavaScript 버전 번호
오래된 JS 버전은 숫자로 명명됩니다: ES5 (2009)과 ES6 (2015)
2016년부터 버전은 연도로 명명됩니다: ECMAScript 2016, 2017, 2018, 2019, ...
ES2019의 새로운 기능:
- String.trimStart()
- String.trimEnd()
- Object.fromEntries
- 선택적 catch 바인딩
- Array.flat()
- Array.flatMap()
- 재정의된 Array.Sort()
- 재정의된 JSON.stringify()
- 문자열 텍스트에 허용되는 구분자
- 재정의된 Function.toString()
경고
이 기능들은 상대적으로 새로운 기능입니다.
오래된 브라우저는 대체 코드(Polyfill)가 필요할 수 있습니다
JavaScript 문자열 메서드 trimStart()
ES2019가 JavaScript에 String 메서드를 추가했습니다 trimStart()
。
trimStart()
메서드의 작동 방식은 trim()
유사하지만, 문자열 시작 부분의 공백만 제거합니다.
예제
let text1 = " Hello World! "; let text2 = text1.trimStart();
2020년 1월부터 모든 현대 브라우저가 JavaScript String trimStart()를 지원합니다:
크롬 | 에지 | 파이어폭스 | 사파리 | 오페라 |
---|---|---|---|---|
크롬 66 | 에지 79 | 파이어폭스 61 | 사파리 12 | 오페라 50 |
2018년 4월 | 2020년 1월 | 2018년 6월 | 2018년 9월 | 2018년 5월 |
JavaScript 문자열 메서드 trimEnd()
ES2019는 JavaScript에 추가했습니다: trimEnd()
문자열 메서드와 같습니다.
trimEnd()
메서드의 작동 방식은 trim()
유사하지만, 문자열 끝의 공백만 제거합니다.
예제
let text1 = " Hello World! "; let text2 = text1.trimEnd();
2020년 1월부터 모든現代브라우저는 JavaScript String trimEnd()를 지원합니다:
크롬 | 에지 | 파이어폭스 | 사파리 | 오페라 |
---|---|---|---|---|
크롬 66 | 에지 79 | 파이어폭스 61 | 사파리 12 | 오페라 50 |
2018년 4월 | 2020년 1월 | 2018년 6월 | 2018년 9월 | 2018년 5월 |
JavaScript 객체 메서드 fromEntries()
ES2019는 JavaScript에 추가했습니다: fromEntries()
객체 메서드.
fromEntries()
메서드는 탐색 가능한 키/값 쌍으로부터 객체를 생성합니다.
예제
const fruits = [ ["apples", 300], ["pears", 900], ["bananas", 500] ]; const myObj = Object.fromEntries(fruits);
2020년 1월부터 모든現代브라우저는 JavaScript Object fromEntries()를 지원합니다:
크롬 | 에지 | 파이어폭스 | 사파리 | 오페라 |
---|---|---|---|---|
크롬 73 | 에지 79 | 파이어폭스 63 | 사파리 12.1 | 오페라 60 |
2019년 3월 | 2020년 1월 | 2018년 10월 | 2019년 3월 | 2019년 4월 |
선택적 catch 바인딩
ES2019부터 필요하지 않으면 catch 매개변수를 생략할 수 있습니다:
예제
2019년 전:
try { // 코드 catch (err) { // 코드 }
2019년 후:
try { // 코드 catch { // 코드 }
2020년 1월부터 모든現代브라우저는 선택적 catch 바인딩을 지원합니다:
크롬 | 에지 | 파이어폭스 | 사파리 | 오페라 |
---|---|---|---|---|
크롬 66 | 에지 79 | 파이어폭스 58 | 사파리 11.1 | 오페라 53 |
2018년 4월 | 2020년 1월 | 2018년 1월 | 2018년 3월 | 2018년 5월 |
JavaScript 배열 메서드 flat()
ES2019는 JavaScript에 추가했습니다: flat()
배열 메서드.
flat()
메서드는 중첩 배열을 평평하게 만들어 새 배열을 생성합니다.
예제
const myArr = [[1,2],[3,4],[5,6]]; const newArr = myArr.flat();
2020년 1월부터 모든現代브라우저는 JavaScript Array flat()를 지원합니다:
크롬 | 에지 | 파이어폭스 | 사파리 | 오페라 |
---|---|---|---|---|
크롬 69 | 에지 79 | 파이어폭스 62 | 사파리 12 | 오페라 56 |
2018년 9월 | 2020년 1월 | 2018년 9월 | 2018년 9월 | 2018년 9월 |
JavaScript 배열 메서드 flatMap()
ES2019는 JavaScript에 추가했습니다: flatMap()
배열 메서드.
flatMap()
메서드는 먼저 배열의 모든 요소를 매핑한 후, 새 배열을 생성하기 위해 배열을 평평하게 만듭니다.
예제
const myArr = [1, 2, 3, 4, 5, 6]; const newArr = myArr.flatMap((x) => x * 2);
안정적인 배열 메서드 sort()
ES2019 개정Array sort() 메서드.
2019년 이전에는, 규범은 QuickSort와 같은 불안정적인 정렬 알고리즘을 허용했습니다.
ES2019 이후, 브라우저는 안정적인 정렬 알고리즘을 사용해야 합니다:
한 값에 따라 요소를 정렬할 때, 이 요소들은 같은 값을 가진 다른 요소들과의 상대 위치를 유지해야 합니다.
예제
const myArr = [ {name:"X00",price:100 }, {name:"X01",price:100 }, {name:"X02",price:100 }, {name:"X03",price:100 }, {name:"X04",price:110 }, {name:"X05",price:110 }, {name:"X06",price:110 }, {name:"X07",price:110 } ];
위의 예제에서, 가격에 따라 정렬할 때, 결과는 다른 상대 위치의 이름이 나타나지 않도록 합니다.
X01 100 X03 100 X00 100 X03 100 X05 110 X04 110 X06 110 X07 110
재정의된 JSON.stringify()
ES2019 개정JSON의 stringify() 메서드.
2019년 이전에는 JSON이 \ 인코딩된 문자를 문자열화할 수 없었습니다.
예제
let text = JSON.stringify("\u26D4");
ES2019 이전에는, UTF-8 코드 포인트(U+D800부터 U+DFFF까지)에서 JSON.stringify()를 사용하면 손상된 Unicode 문자를 반환합니다. 예를 들어, ���입니다.
이번 개정 이후, UTF-8 코드 포인트를 가진 문자열은 JSON.stringify()를 통해 안전하게 변환되고, JSON.parse()를 통해 원래 문자열로 복원될 수 있습니다.
구분 기호
문자열 텍스트에서 지금은 행 분리 기호와 구분 기호를 사용할 수 있습니다(\u2028
와 \u2029
)
2019년 이전에는 이들은 행 종료 기호로 간주되어 오류 예외를 유발했습니다:
예제
// 이는 ES2019에서 유효합니다: let text = "\u2028";
주의
지금, JavaScript와 JSON은 같은 규칙을 가집니다.
ES2019 이전에:
text = JSON.parse('"\u2028"') 은 ''로 해석됩니다.
text = '"\u2028"' 은 제공합니다.문법 오류。
재정의된 Function toString()
ES2019 개정Function toString() 메서드에 대해 설명합니다.
toString() 메서드는 함수 소스 코드를 나타내는 문자열을 반환합니다.
2019년부터, toString()는 함수의 소스 코드를 포함한 주석, 공백 및 문법 세부 사항을 반환해야 합니다.
2019년 이전에는, 다른 브라우저는 다른 함수 변형을 반환했습니다. 예를 들어, 주석과 공백이 없었습니다. 2019년부터는, 함수는 작성된 방식으로 완전히 반환되어야 합니다.
예제
function myFunction(p1, p2) { return p1 * p2; }