0w0

Es2023 신기능이 어째서인지 이제와 추가되었다.

ES2023 신기능이 어째서인지 이제와 추가되었다.

ES2023+ / ES2023 / ES2022 / ES2021

이전에 ES2023에는 신기능이 2개 밖에 없다 이야기했지만, 왜인지 2023/01/30에 와서 2개가 더 추가되었습니다.

이유는 모르겠지만, 아무래도 1월까지가 전년인가 봅니다.

아마.

이들은 2023/01/30에 있었던 TC39 회의에서 결정되었습니다.

그 외에 Intl.NumberFormat V3도 스테이지4로 올라왔습니다만, 이는 각하된 것 같습니다.

왜 이런 표현이냐면 어젠다밖에 없기때문에 자세한 건 알 수없기 때문입니다.

Finished Proposals

Change Array by copy

배열 파괴없이 조작하는 메서드가 추가되었습니다.

기존 배열 조작 메서드는, 변경 후 값을 반환함과 동시에 본래 값을 변경했습니다.

const a = [2, 3, 1];

const b = a;
b[1] = 4;
console.table(b); // [2, 4, 1]
console.table(a); // [2, 4, 1] ← ?

const c = a.sort();
console.table(c); // [1, 2, 4]
console.table(a); // [1, 2, 4] ← ??

const d = a.reverse();
console.table(d); // [4, 2, 1]
console.table(a); // [4, 2, 1] ← ????

이건 너무하죠.

덕분에 매번 Array.concat(), Array.slice() 같은 부정한 사용이 강제되어버렸습니다.

이번 Proposal이 통과함에 따라, 드디어 제대로 된 배열 조작 함수를 다룰 수 있습니다.

const a = [2, 3, 1];

const b = a.with(1, 4);
console.table(b); // [2, 4, 1]
console.table(a); // [2, 3, 1]

const c = a.toSorted();
console.table(c); // [1, 2, 3]
console.table(a); // [2, 3, 1]

const d = a.toReversed();
console.table(d); // [1, 3, 2]
console.table(a); // [2, 3, 1]

Chrome에서는 Dev Trial 108에 의해 겨우 사용할 수 있게 되었으며, 일반판 출시는 미정, Firefox도 구현은 되었지만 출시 우선도는 높지 않습니다, 이런 단계이므로 평범하게 사용할 수 있는 건 아직 나중 일입니다.

그런데 이런 상태인데 Finished Propsal에 들어온건가 싶네요

Symbols as WeakMap keys

WeakMap 키로 Symbol 사용 가능하다는 Proposal.

const weakmap = new WeakMap();

const key = Symbol('key');
weakmap.set(key, 1); // OK

const key = 'key';
weakmap.set(key, 1); // Uncaught TypeError: Invalid value used as weak map key

애초에 인스턴스를 사용하고 버리는 JavaScript에서 약한 참조를 사용하는 이유가 여전히 이해되지 않습니다.

분명 라이브러리나 툴체인에 사용되겠죠. 아마.

여담으로 다른 분이 제기한 우려점 2개 중에, Symbol.for() 만든 Symbol 등록은 금지되었습니다.

well-known한 심볼은 허용됩니다.

weakmap.set(Symbol.iterator, 1); // OK
weakmap.set(Symbol.for('key'), 1); // Uncaught TypeError: Invalid value used as weak map key

이는 2022/11/29 출시한 Chrome 108부터 이용할 수 있습니다.

CanIUse에는 왜인지 반영되지 않았지만요

감상

출시도 안 된 것이 Finished이지 않나, 링크에는 RFC가 스테이지 3에서 아무 갱신도 되지 않지를 않나, 뭔가 정치적인 사정이 느껴지기도 합니다.

구체적으로 어떤 경위가 있는가는 모릅니다.

미팅은 비공개, 라이브 X, 아카이브 X 같고, 더욱이 의사록이 공개될 때까지 수 개월은 걸리므로, 이때까지는 어떤 이야기를 했는지 알 수 없으니까요.

이렇게 생각했지만, 조금만 생각해보면 어차피 듣기가 안되므로 라이브 방송이 있었도 모르겠네요.

아마 분명, 더 밀접한 누군가가 조만간 상세한 경위를 포함한 설명을 해주겠죠.

글쓴이 댓글

Babel은 Intl.NumberFormat도 Stage4가 되었다말하는데.

대체 뭐지?