Contents
see List작성일 2025. 11. 30.
JavaScript ES2024 새 기능
ES2024(ECMAScript 2024)는 JavaScript의 최신 표준으로, 개발자 경험을 향상시키는 여러 새로운 기능을 포함합니다. 주요 기능들을 실용적인 예제와 함께 살펴봅니다.
1. Array groupBy
배열을 특정 키로 그룹화하는 메서드가 추가되었습니다.
const products = [
{ name: "사과", category: "과일", price: 1000 },
{ name: "바나나", category: "과일", price: 1500 },
{ name: "당근", category: "채소", price: 800 },
{ name: "오이", category: "채소", price: 600 }
];
// Object.groupBy
const grouped = Object.groupBy(products, p => p.category);
// {
// 과일: [{name: "사과"...}, {name: "바나나"...}],
// 채소: [{name: "당근"...}, {name: "오이"...}]
// }
// Map.groupBy (Map 반환)
const groupedMap = Map.groupBy(products, p => p.category);2. Promise.withResolvers()
Promise와 resolve/reject 함수를 동시에 반환합니다.
// 기존 방식
let resolve, reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
// ES2024 새 방식
const { promise, resolve, reject } = Promise.withResolvers();
// 활용 예시
function createDeferred() {
const { promise, resolve, reject } = Promise.withResolvers();
return { promise, resolve, reject };
}
const deferred = createDeferred();
setTimeout(() => deferred.resolve("완료!"), 1000);
await deferred.promise; // "완료!"3. Well-Formed Unicode Strings
// 잘못된 Unicode 문자열 확인
const str = "hello\\uD800world"; // lone surrogate
str.isWellFormed(); // false
// 잘못된 문자 수정
str.toWellFormed(); // "hello�world"
// 정상 문자열
"안녕하세요".isWellFormed(); // true4. ArrayBuffer 전송 및 리사이징
// 리사이징 가능한 ArrayBuffer
const buffer = new ArrayBuffer(8, { maxByteLength: 16 });
buffer.resize(12); // 크기 조정
buffer.byteLength; // 12
// 다른 스레드로 전송
const transferred = buffer.transfer();
buffer.detached; // true (원본은 분리됨)
// 복사 전송
const copy = buffer.transferToFixedLength(16);5. Atomics.waitAsync()
메인 스레드를 블로킹하지 않고 대기합니다.
const buffer = new SharedArrayBuffer(4);
const view = new Int32Array(buffer);
// 비동기 대기
const result = Atomics.waitAsync(view, 0, 0);
if (result.async) {
result.value.then(status => {
console.log("깨어남:", status);
});
}
// 다른 스레드에서 알림
Atomics.notify(view, 0);6. RegExp v 플래그 (유니코드 집합)
// v 플래그로 유니코드 집합 사용
const emojiRegex = /[\\p{Emoji}--\\p{ASCII}]/v;
emojiRegex.test("😀"); // true
emojiRegex.test("a"); // false
// 문자열 프로퍼티
/^\\p{RGI_Emoji}$/v.test("👨👩👧👦"); // true
// 집합 연산
const korean = /[\\p{Script=Hangul}&&\\p{L}]/v;브라우저 지원
| 기능 | Chrome | Firefox | Safari |
|---|---|---|---|
| groupBy | 117+ | 119+ | 17.4+ |
| withResolvers | 119+ | 121+ | 17.4+ |
| v 플래그 | 112+ | 116+ | 17+ |
Polyfill 예시
// groupBy polyfill
if (!Object.groupBy) {
Object.groupBy = function(arr, fn) {
return arr.reduce((acc, item) => {
const key = fn(item);
(acc[key] ??= []).push(item);
return acc;
}, {});
};
}javascript
| No | 작성일 | Title |
|---|---|---|
| 2045 | 2025. 11. 30. | TypeScript 타입 시스템 완벽 가이드 |
| 2044 | 2025. 11. 30. | React 18 새 기능 - Concurrent Features |
| 1864 | 2022. 07. 27. | [vue3] vue3 setup 에서 자식 컴포넌트 메소드(함수) 호출하기 |
| 1848 | 2022. 06. 11. | [ vuejs ] router 데이터 전달방식 |
| 1847 | 2022. 06. 11. | [ vuejs ] this.$router.push 혹은 link-to 를 setup() 에서 구현 |
| 1846 | 2022. 06. 10. | [ vuejs3 , spring-boot ] 웹개발은 어떻게 구성해야 하는가 |
| 1825 | 2022. 05. 24. | [ vuejs ] 부모,자식 요소의 메소드 호출 |
| 1421 | 2018. 12. 06. | [ angualrjs ] ajax header 포함시켜 $http 사용하기 |
| 1381 | 2017. 11. 30. | 문자열을 숫자로 바꾸는 방법 parseInt 와 Number 비교 |
| 1220 | 2017. 03. 28. | [ AngularJs] bootstrap nav dropdown |