참고: 이웅모 《모던 자바스크립트 Deep Dive》 9장 · MDN Type coercion · MDN Nullish coalescing

== 한 번에 타입이 바뀌고, ||로 기본값을 넣다 0이 사라졌다. 타입 변환은 암묵(엔진이) 과 명시(내가) 로 나눈다. 단축 평가·옵셔널·null 병합은 “값 없을 때” 실무 도구다.

flowchart TB
  V[값] --> IMP[암묵 변환]
  V --> EXP[명시 변환]
  IMP --> STR[문자열 문맥]
  IMP --> NUM[숫자 문맥]
  IMP --> BOOL[불리언 문맥]
  SHORT[단축 평가 || &&] --> BOOL
  NULLISH[??] --> NULLISH2[null/undefined만]

9.1 타입 변환이란?

기존 값을 다른 타입의 값으로 만드는 것. 원본 변수를 바꾸기보다 연산 과정에서 임시 값이 생기는 그림이 많다.

9.2 암묵적 변환

문자열 문맥

+에 문자열이 있으면 연결 쪽으로 기울기 쉽다.

console.log(1 + '2'); // '12'
console.log('1' + 2 + 3); // '123'

숫자 문맥

산술·비교 등.

console.log(1 - '2'); // -1
console.log('6' * '2'); // 12
console.log(+'10'); // 10

불리언 문맥

if, &&, ||, ! — Truthy/Falsy.

Falsy: false, 0, -0, 0n, '', null, undefined, NaN.

if ('') console.log('no');
if ([]) console.log('yes array'); // 빈 배열 truthy

9.3 명시적 변환

String(1);
(1).toString();
Number('1');
parseInt('1px', 10);
Boolean(1);
!!value;

의도를 드러낼 때는 명시를 선호.

9.4 단축 평가