본문 바로가기

💻 개발IT/기타

Javascript ES2021 정리

1. replaceAll

기존 replace는 발견한 첫 요소만 변경되었지만, replaceAll을 통해 지정된 모든 요소를 변경할 수 있다.

이전에는 regex의 g(전역)을 통해 전체 요소를 변경했지만 

여기서 특수문자를 사용하는 경우 \을 사용해야해서 가독성이 떨어지는 문제가 있었다. 

// old
'test'.replace('t', 'a') // aest
'test'.replace(/t/g, 'a') // aesa

// new
'test'.replaceAll('t', 'a') // aesa

 

2. Promise.any()

Promise 배열 중 가장 먼저 성공한 객체를 리턴한다.

만약, 모두 reject된다면 catch문이 실행되며 AggregateError를 리턴한다. 

const rejectPromise = new Promise((res, rej) => {
	setTimeout(() => {
    	rej("failed");
	}, 1000);
});

const successPromise = new Promise((res, rej) => {
	setTimeout(() => {
    	res("success");
	}, 1000);
});

Promise.any([rejectPromise, successPromise])
	.then(() => console.log("success"))
    .catch(e => console.log(e));
// success

 

3. 논리연산자

let x = 5
const y = 10

x &&= y // 
x ||= y // x 값이 false(0)이면 y
x ??= y // x 값이 null or undefined 이면 y

 

 

4. 숫자 separator

보통 ,  대신 _을 적는 것으로

큰 숫자를 작성할 때 가독성을 위해 사용한다. 

y = 10_00_00_000;
console.log(y); // 100000000

 

5. WeakRef()

객체에 대한 weak reference를 생성할 수 있다. 

weak reference는 가비지 컬렉터 대상으로 특정 객체를 일정 시간 캐싱하는 방법으로 사용할 수 있다. 

 

아래 코드를 돌려보면 abc가 출력되었다가 deleted가 출력됨을 확인할 수 있다. 

let person = {
	name: "abc",
    address: "seoul"
}

const copyPerson = new WeakRef(person);
person = null;

const timer = setInterval(() => {
	const cPerson = copyPerson.deref();
    if(cPerson) console.log(cPerson.name);
    else console.log("deleted");
}, 1000);

 

반응형