JS VALUE MODEL

JavaScript 변수 타입 비교 규칙

var, let, const와 숫자, 문자열, 불리언을 나열하는 것만으로는 JavaScript 버그를 막기 어렵다. 선언 스코프, 재할당 가능성, 원시값과 객체 참조, 암묵적 변환, ==와 === 비교 차이가 실제 코드 흐름을 좌우한다.

01

선언 방식 선택

재할당이 없으면 const, 값이 바뀌어야 하면 let을 쓰고 var의 함수 스코프 함정을 피한다.

const는 값 불변이 아니라 바인딩 재할당 금지다
02

타입 확인

원시값과 객체 참조가 대입과 비교에서 어떻게 다른지 확인한다.

객체는 같은 모양이어도 같은 참조가 아니면 다르다
03

변환 경계 표시

폼 입력, URL query, JSON, localStorage에서 들어온 문자열을 필요한 타입으로 명시 변환한다.

암묵적 변환은 오답을 숨긴다
04

비교 규칙 적용

동등 비교는 기본적으로 ===를 쓰고 null/undefined 허용 여부를 별도로 처리한다.

==는 변환 규칙을 동반한다
05

빈값 처리

0, 빈 문자열, false, null, undefined를 같은 값처럼 다루지 않도록 조건을 쪼갠다.

truthy/falsy는 편하지만 위험하다
const
재할당 금지 바인딩을 바꾸지 못하지만 객체 내부 속성 변경은 가능하다.
불변 객체가 필요하면 별도 조치가 필요하다
primitive
값 자체 비교 number, string, boolean, null, undefined, symbol, bigint는 값 의미가 중심이다.
NaN은 자신과 같지 않다
object
참조 비교 배열과 객체는 같은 내용이어도 참조가 다르면 ===가 false다.
복사와 mutation을 구분한다
nullish
없음 처리 null과 undefined만 기본값 처리하려면 ??를 사용한다.
||는 0과 빈 문자열도 대체한다

코드 확인

입력 변환 사용자 입력 문자열을 숫자나 boolean으로 명시 변환하는지 확인한다.
비교 연산 == 사용이 의도적 변환인지, ===로 바꿀 수 있는지 본다.
빈값 분기 0과 빈 문자열이 유효한 값인데 조건문에서 사라지지 않는지 확인한다.