[항해 플러스 프론트엔드 7기] 사전 스터디 2주차 - TS

Jaehyun Ahn·2025년 9월 22일
0

항해 플러스

목록 보기
3/7

ES2021

String.replaceAll(searchValue, replaceValue)

문자열 내에서 특정 문자열 또는 정규식 패턴과 일치하는 모든 항목을 새 문자열로 교체하는 메서드. 교체된 새 문자열을 반환

  • searchValue에는 찾는 문자열, 전역 플래그 g가 있는 정규식 객체가 들어올 수 있음
  • replaceValue에는 교체할 문자열, 매치된 값에 따라 동적으로 결과를 생성하는 함수가 들어올 수 있음

하나만 바꾸고 싶을 땐 replace, 모두 바꾸고 싶을 땐 replaceAll 사용

const text = "apple apple";

// replace (첫 번째만 치환)
console.log(text.replace("apple", "orange"));
// "orange apple"

// replaceAll (전체 치환)
console.log(text.replaceAll("apple", "orange"));
// "orange orange"

Promise.any

여러 개의 프로미스 중에서 가장 먼저 성공한(fullfilled) 프로미스를 반환하는 메서드. 모든 프로미스가 실패(rejected) 했을 때만 AggregateError와 함께 rejected됨


// 가장 먼저 성공한 결과 반환
const p1 = new Promise((_, reject) => setTimeout(() => reject("fail1"), 100));
const p2 = new Promise((resolve) => setTimeout(() => resolve("success"), 200));
const p3 = new Promise((resolve) => setTimeout(() => resolve("another success"), 300));

Promise.any([p1, p2, p3])
  .then(result => console.log(result))  // "success"
  .catch(error => console.log(error));


// 모든 Promise가 rejected일 때 => AggregateError 발생
const p1 = Promise.reject("fail1");
const p2 = Promise.reject("fail2");

Promise.any([p1, p2])
  .then(result => console.log(result))
  .catch(error => {
    console.log(error instanceof AggregateError); // true
    console.log(error.errors); // ["fail1", "fail2"]
  });

Nullish coalescing 할당 (??=)

왼쪽 피연산자가 nullish(null or undefined)일 때, 오른쪽 피연산자 값을 할당


let a = null;
a ??= 10;
console.log(a); // 10

let b = 0;
b ??= 20;
console.log(b); // 0

let c;
c ??= "default";
console.log(c); // "default"

논리적 AND 할당 (&&=)

왼쪽 피연산자가 truthy일때 오른쪽 피연산자 값을 할당


let a = 5;
a &&= 20;
console.log(a); // 20

let b = 0;
b &&= 30;
console.log(b); // 0

논리적 OR 할당 (||=)

왼쪽 피연산자가 falsy일때 오른쪽 피연산자 값을 할당


let a = 0;
a ||= 10;
console.log(a); // 10

let b = "hi";
b ||= "hello";
console.log(b); // "hi"

WeakRef

  • 객체를 변수에 저장할 때 강한 참조로 관리됨. 누군가 참조하고 있는 한 GC가 해당 객체를 제거하지 않음
  • WeakRef로 감싼 객체를 변수에 저장하면 약한 참조로 관리되며, 객체에 대한 다른 강한 참조가 모두 사라지면 GC에 의해 메모리에서 제거됨

주의점

  • GC 타이밍은 예측 불가, 메모리에서 바로 제거 되는 것이 아님
  • 캐싱, 메모리 관리 등의 상황에서만 사용 권장 (일반적인 데이터 저장 용도로는 적합하지 않음)

숫자 리터럴 구분자

숫자의 가독성을 높이기 위해 _를 사용하여 숫자를 구분

const number = 1_000_000;

ES2022

Top level await

ES 모듈의 최상위 수준에서 await 키워드를 사용할 수 있게 됨. async 래퍼 함수가 필요하지 않아 오류 처리가 개선됨

#private

# 로 시작하는 이름을 지정하여 클래스 멤버(프로퍼티, 메서드)를 비공개로 설정. 클래스 자체에서만 접근할 수 있으며 삭제 및 동적 할당 불가능
TS 프로젝트에선 이 방법을 권장하지 않음. 기존 private 키워드 사용하자

정적 클래스 멤버

클래스 멤버를 정적으로 표시 (static 키워드)

클래스에서의 정적 초기화 블록

클래스가 초기화될 때 실행되는 블록, 정적 멤버의 생성자

Import Assertions

import ... from ... assert { type: 'json' }와 같이 가져온 모듈의 타입을 단언하는 방법

정규식 매치 인덱스

정규식 일치 및 캡처 그룹에 대한 시작 및 끝 인덱스를 가져옴. RegExp.exec()String.match() 및 String.matchAll()에서 동작

음수 인덱싱 (.at(-1))

배열, 문자열 인덱싱 시 at()을 이용하여 끝부터 인덱싱 가능 arr[arr.length - 1]과 동일 (할당은 불가능)

Object.hasOwn(obj, property)

obj.hasOwnProperty(property) 와 같이 객체가 특정 프로퍼티를 가지고 있는지 판별할 때 사용하는 메서드

객체 자체가 hasOwnProperty를 덮어쓴 경우, hasOwn 메서드를 통해 안전하게 판별할 수 있음

Error cause

error에 선택적인 원인을 지정할 수 있음.


Auto-Accessor

자동으로 프로퍼티를 비공개로 설정하고 해당 프로퍼티에 대한 get/set 접근자를 생성

profile
미래 프론트 어쩌고

0개의 댓글