김 양의 멋따라 개발따기
JavaScript !! (느낌표 두 개) 완전 정리: 왜 쓰고, 언제 위험할까? 본문
1) !와 !!의 의미
!value : 부정(논리 NOT)
- value를 truthy/falsy로 평가한 뒤 결과를 뒤집는다.
- 결과 타입은 항상 boolean이다.
!!value : boolean으로 강제 변환(정규화)
- !를 두 번 적용해서 뒤집고 다시 뒤집음 → “참/거짓 여부만” 남긴다.
- 결과는 무조건 true 또는 false.
2) truthy / falsy 한 번에 정리
JS에서 조건문은 boolean이 아니어도 동작하고, 값은 크게 두 종류로 평가된다.
falsy (조건문에서 false 취급)
- false
- 0, -0
- 0n (BigInt)
- "" (빈 문자열)
- null
- undefined
- NaN
truthy (그 외 전부 true 취급)
- "0" (문자열)
- "false" (문자열)
- [] (빈 배열)
- {} (빈 객체)
- function() {} 등…
포인트: 빈 배열/빈 객체도 truthy다
3) !!를 쓰는 이유 (장점)
1) 타입을 boolean으로 “고정”
설정값이 1, "Y", 객체 같은 형태로 들어올 수 있을 때도
한 번 !!로 플래그 형태(booleans)로 정규화할 수 있다.
2) 조건문/비교에서 실수 줄이기
아래처럼 엄격 비교를 하거나, 다른 함수에 넘길 때도 안정적이다.
3) “없으면 false” 기본값 처리
값이 없으면 undefined → !!undefined는 false라서
기본 OFF 동작을 쉽게 만든다.
4) BUT: !!가 “정확한 의미”를 보장하진 않는다 (주의)
!!는 값의 의미를 해석하지 않고, JS의 truthy/falsy 규칙만 적용한다.
✅ 결론:
- !!는 타입 일관성에는 도움
- 하지만 "false", "0" 같은 값이 들어오면 의도와 다른 결과가 될 수 있음
5) 한 줄 요약
- !!value는 값을 boolean(true/false)로 강제 변환한다.
- 조건문에서 타입 혼란을 줄여주는 장점이 있다.
- 하지만 "false" 같은 문자열은 truthy라서 의도와 다른 결과가 날 수 있어,
입력이 문자열일 가능성이 있으면 명시적으로 파싱하자.
'TIL' 카테고리의 다른 글
| 2.0 + 4.4 + 6.2 + 2.4 = 15.000000000000002 이 되는 자바스크립트의 부동소수점 오차 (0) | 2025.11.21 |
|---|---|
| 변수 선언하지 않고 JS에서 HTML 요소 사용할 수 있다? (0) | 2025.09.26 |
| JavaScript - Pinch Zoom 보완하기 (4) | 2025.07.24 |
| 집에 가고 싶을 때 퇴근 타이머 만들기 (2) | 2025.07.11 |
| Index DB 사용해보기 (2) | 2025.06.19 |