ECMAScript 2021
Mar 13, 2021
1. String.prototype.replaceAll
const str = 'Hello World! Hello Javascript!';
str.replace('Hello', 'Hi'); // Hi World! Hello Javascript!
str.replace(/Hello/g, 'Hi'); // Hi World! Hi Javascript!
str.replaceAll('Hello', 'Hi'); // Hi World! Hi Javascript!
2. Promise.any()
Promise.all()
이 모든 promise들이 resolve 되면 resolve 되는 함수라면, Promise.any()
는 하나라도 resolve 된다면 resolve 된다.
const p1 = new Promise((resolve, reject) => {
setTimeout(() => resolve('promise_1'), 100);
});
const p2 = new Promise((resolve, reject) => {
setTimeout(() => resolve('promise_2'), 500);
});
const t0 = performance.now();
async function test1() {
await Promise.all([p1, p2]);
console.log(performance.now() - t0); // 약 500ms
}
test1();
const t1 = performance.now();
async function test2() {
await Promise.any([p1, p2]);
console.log(performance.now() - t1); // 약 100ms
}
test2();
3. WeakRef
WeakRef
인스턴스는 등록한 객체가 메모리에 있으면 해당 객체를 반환하고, 가비지 콜렉터가 객체를 삭제했다면 undefined
를 반환한다.
const obj = { key: 'value' };
const weakRef = new WeakRef(obj);
// ...
weakRef.deref(); // obj or undefined
FinalizationRegistry
인스턴스는 등록한 객체가 가비지 콜렉티드 되면 콜백 함수를 실행한다.
const obj = { key: 'value' };
const registry = new FinalizationRegistry((value) => {
console.log(`${value} has been garbage collected`);
});
registry.register(obj, 'registered object');
4. Logical assignment operators (??=
, &&=
, ||=
)
a += 3
처럼 ??
, &&
, ||
도 할당 연산자를 사용할 수 있다.
a &&= b; // a = a && b
a ||= b; // a = a || b
a ??= b; // a = a ?? b
5. Separators for numeric literals (1_000
)
숫자가 커질수록 자릿수 구분이 어려운데 _
로 구분을 넣을 수 있다.
let number = 1_000_000;
let binary = 0b1010_0001_1000;
let hex = 0xa0_b0_c0;