ECMAScript 2021
-
해당 포스트는 2021년 5월 기준으로 3월 9일날 올라온 ES2021 후보자들에 대해서 기술합니다.
-
tc39 finished-proposals의 리스트에서도 확인할수있습니다.
String.prototype.replaceAll
-
기존의 string prototype 함수중 replace 함수를 보완? 한 replace All 함수가 생겼습니다.
-
기존의 replace 함수는 문자열 or 정규 표현식을 사용하여 단일 or 모든 부분을 교체 하였습니다.
1 |
|
- 이번에 ES2021 에서 추가된 replaceAll 을 사용하면 문자열 만으로도 모든 부분을 교체 할수 있게되었습니다.
1 |
|
-
console 이미지
-
Code stackblitz
Promise.any + AggregateError
-
Promise 배열 에서 1개 라도 resolve 되면 Promise.any 가 Resolve 된다.
-
1개의 Resolve 된 값만 리턴 된다.
-
Promise 배열 에서 모든 Promise 가 Reject 되면 AggregateError 발생한다.
-
모든 Promise가 Reject 되면 AggregateError 에 모든 에러가 발생한다.
-
Promise.race 와 차이점은 fulfils 되는 Promise 는 Promise 배열에서 resolve 된 값만 된다.
- 자세한 차이점은 Promise Combinators 포스트를 작성하고 그곳에서 설명하겠습니다.
AggregateError
- AggregateError 객체는 다수의 에러가 한 에러로 랩핑 되어야 할 때의 오류를 나타냅니다.
- 한 작업에서 여러개의 오류가 보고될 때 발생하는데, 대표적으로 Promise.any 에 전달된 promise들이 거부되었을 떄 발생합니다.
1 |
|
-
console 이미지
-
Code stackblitz
WeakRefs && FinalizationRegistry
-
ES2021 에서는 객체의 참조에 관하여 도와주는 2가지 클래스가 추가되었습니다.
- objects 에 관한 약한 참조를 만들어주는 WeakRefs class
- 어떤 objects 가 가비지 콜렉티드 되면 콜백 함수를 실행해주는 FinalizationRegistry class
WeakRefs
- WeakRef 인스턴스는 등록한 객체가 메모리에 있으면 해당 객체를 반환하고, 가비지 콜렉티드 되었으면 undefined를 반환한다.
- 약한 참조의 주요 용도는 캐시 또는 대형 개체에 대한 매핑을 구현하는 것
1 |
|
-
올바른 사용에는 신중한 생각이 필요하며 가능하면 피하는 편이 제일 좋다.
-
아래는 MDN에 정의된 WeakRef 사용성에 대한 주의성을 알려주는 글 입니다.
1 |
|
FinalizationRegistry
- FinalizationRegistry의 인스턴스는 등록된 객체가 가비지 콜렉티드 되면 콜백 함수를 실행한다
1 |
|
Logical Assignment Operators
- MD 문서
- javascript 세계에서는 많은 할당 연산자가 있다. 이번 ES2021 에서는 논리 할당 연산자가 추가되었다.
- 기존의 a = a + b 를 a +=b 로 처럼 할당 연산자를 하는것과 비슷하다.
- 바로 코드를 보면서 확인해 보자
1 |
|
- tmi: Typescript 4.0 에서 추가된 기능 인데 이번에 Javascript 에도 추가가 되었다고 한다.
Numeric separators
- MD 문서
- 기존의 javascript 에서의 숫자는 단위 표시가 되지 않아서 딱 봤을때 얼마 인지 알아 보기가 어려웠다.
- Numeric separators MD 문서의 동기에서도 이렇게 표시한다.
- 1000000000 // Is this a billion? a hundred millions? Ten millions?
- 그래서 이번에 ES2021 에서 숫자 사에에 _를 추가할수있게 되어 단위 표시를 할수 있게 되었다.
- 꼭 3자리 단위 마다 _를 해야되는것이 아니라 숫자형인 어디에서나 _ 가 입력이 되었다.
- 물론 협업을 할라면 상식적으로 표시 하는게 맞겠지
1 |
|
-
console 이미지
-
Code stackblitz