ES2020 / ECMAScript 2020
optional chaining
객체의 undefined 체크시 여러번 해야하는 경우가 생기는데 아래처럼 사용하면 가독성도 향상되고 간단하게 사용이 가능하다.
const data = { board: { title: 'title' } }; // before const title = data && data.board && data.board.title // after const title = data?.board?.title // 배열에서도 사용이 가능하다. const list = [ ['1', '2'], ]; const one = list?.[0]?.[1]; const two = list?.[0]?.[2];
matchAll
문자열에서 일치하는 정규식을 iteratior 형태로 반환. 기존 match와 사용법은 동일
// 1. 정규표현식 - for of 사용법 const str = 'abca'; const result = str.matchAll(/a/g); for (const item of result) { console.log(item) } /* ['a', index: 0, input: 'abca', groups: undefined] ['a', index: 3, input: 'abca', groups: undefined] */ // 2. 문자열 - next 사용법 const str = 'abca'; const result = str.matchAll('a'); result.next(); // { value: ['a', index: 1, input: 'abca', groups: undefinded], done: false } result.next(); // { value: ['a', index: 3, input: 'abca', groups: undefinded], done: false } result.next(); // { value: undefined, done: true }
Promise.allSettled
기존 Promise.all 사용시 하나의 promise라도 reject가 된다면 나머지는 처리가 불가능하다.
allSettled를 사용하면 각각의 promise들을 관리할수 있다
const promiseList = [ fetch("url1").then(data => data.json()), fetch("url2").then(data => data.json()) ]; Promise.allSettled(promiseList) .then(results => { // results에 url1, url2의 처리 결과에 대한 내용이 배열로 담겨있다. console.log(results); });
globalThis
Javascript 최상위 객체 global 객체에 접근하기 위해 추가된 방식
브라우저에서는 window, node.js 에서는 global객체를 사용하기때문에 추가된것으로 보인다.
//브라우저 실행 환경 기준 globalThis === window // true; //Node 실행 환경 기준 globalThis === global // true;
null 병합 연산자 (Nullish coalescing Operator)
왼쪽 피연산자 값이 null이나 undefined일 경우에만 오른쪽값 반환
// || 연산자 const A1 = '' || 'default value' // 'default value' // ?? 연산자 오직 null, undefined 일때만 const A2 = '' ?? 'default value' // '' const A3 = null ?? 'default value' // 'default value' const A4 = undefined ?? 'default value' // 'default value'
Dynamic import
import문을 비동기적으로 처리할때 사용
// then import('/module.js') .then((module) => { module.default(); }); // async/await (async () => { const moduleUrl = '/module.js'; const module = await import(moduleUrl) const total = module.sum(2, 2); })();
BigInt
Number.MAX_SAFE_INTEGER 제한없이 사용이 가능하다.
Number.MAX_SAFE_INTEGER // 9007199254740991 Number.MAX_SAFE_INTEGER + 10 -10 // 9007199254740990 👎 BigInt(Number.MAX_SAFE_INTEGER) + 10n -10n // 9007199254740991n 👍