TIL : 250418금 (nullish 병합(??)과 단축 평가(||))

2025. 4. 21. 09:03·Developer/TIL

아래의 코드

let bookmarkMenu = bookmarks.value[menu.name];
if (!bookmarkMenu) {
  bookmarks.value[menu.name] = { ...menu, isMarked: false };
  bookmarkMenu = bookmarks.value[menu.name];
}

를 한 줄로 합쳐서 간결하게 쓰고 싶다면, nullish 병합(??) 또는 단축 평가(||)를 사용 가능하다.

 

 

✅ 단축 평가 버전 (가장 간단)

let bookmarkMenu = bookmarks.value[menu.name] ||= { ...menu, isMarked: false };
  • `||=`는 "값이 falsy일 때만 할당"
  • 즉, 기존에 값이 없으면 `{ ...menu, isMarked: false }`를 넣음

 

위 코드의 동작 순서

let bookmarkMenu = bookmarks.value[menu.name] ||= { ...menu, isMarked: false };

 

 

✅ 평가 순서

  1. bookmarks.value[menu.name] 을 먼저 확인함.
  2. 그 값이 falsy (undefined, null, false, 0, '', NaN) 이면 → bookmarks.value[menu.name] = { ...menu, isMarked: false }; 실행
  3. 최종적으로 bookmarkMenu에 그 값을 할당함.

 

✅ 예제

const bookmarks = ref({});
const menu = { name: 'menu1' };

let bookmarkMenu = bookmarks.value[menu.name] ||= { ...menu, isMarked: false };
  • `bookmarks.value.menu1`이 `undefined`면 → 새로 객체 만들어서 넣음.
  • 이미 값이 있으면 → 기존 값을 그대로 사용.

 

💡 참고: `||=` 는 단축 평가

  • `a ||= b` 는 `a = a || b` 와 같은 의미.
  • 즉, 좌측이 falsy면 우측으로 할당되는 구조.

 

 

✅ nullish 병합 버전 (값이 null 또는 undefined일 때만)

let bookmarkMenu = (bookmarks.value[menu.name] ??= { ...menu, isMarked: false });
  • `??=`는 null 또는 undefined일 때만 할당
  • 값이 false, 0, '' 같은 falsy라도 그대로 유지함

 

 

✳️ 정리

  조건 설명
||= 좌변이 falsy한 값일 때 좌변이 false, 0, '', null, undefined, NaN 중 하나일 경우에만 우변 값을 할당
??= null 또는 undefined일 때만 더 정확하게 "없을 때만" 할당

👉 `bookmarks.value[menu.name]`이 0이나 빈 문자열일 수도 있는 상황이면 `??=`를 쓰는 게 안전하다.

저작자표시 비영리 변경금지 (새창열림)

'Developer > TIL' 카테고리의 다른 글

TIL: 20250421월 ~ 20250502금  (0) 2025.05.01
TIL : 250428월 (JS문법: slice와 splice 차이/사용 용도)  (0) 2025.04.29
TIL : 20250424목 (테이블 헤더 세로 정렬, 오라클 문법 regexp_count, nvl)  (0) 2025.04.24
TIL : 250417목 (오늘 한 일)  (0) 2025.04.18
TIL : 250416수 (BE 업무 처리 대비 오라클 DB 함수 공부)  (0) 2025.04.16
TIL: 20250415화 (백엔드 인수인계 (엔드포인트 트래킹 방법 등), 오라클 함수 outer join, 별칭 지정, nvl)  (0) 2025.04.15
'Developer/TIL' 카테고리의 다른 글
  • TIL : 250428월 (JS문법: slice와 splice 차이/사용 용도)
  • TIL : 20250424목 (테이블 헤더 세로 정렬, 오라클 문법 regexp_count, nvl)
  • TIL : 250417목 (오늘 한 일)
  • TIL : 250416수 (BE 업무 처리 대비 오라클 DB 함수 공부)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    자바스크립트
    구현
    파이썬
    컴퓨터네트워크
    d3
    프로그래머스
    Jiraynor Programming
    웹사이트
    ZeroCho
    뉴렉처
    프로젝트
    React
    bfs
    백준
    자바
    리액트
    mysql
    SWEA
    공식문서
    AWS
    spring boot
    Til
    알고리즘
    Next.js
    타입스크립트
    플러터
    클론 프로젝트
    강의내용정리
    블로그 제작
    포트폴리오
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
TIL : 250418금 (nullish 병합(??)과 단축 평가(||))
상단으로

티스토리툴바