falsy JavaScript

rada·2025년 4월 6일
0

개발

목록 보기
34/43

✅ " " vs false

표현결과
"" == falsetrue 😮 (느슨한 비교)
"" === falsefalse ❌ (엄격한 비교)

🔍 이유는?

"" == false가 true인 이유:
자바스크립트의 느슨한 비교(==)는 타입을 강제로 변환(coercion)해서 비교합니다.

"" == false""0 (빈 문자열 → 숫자 0)
false0
0 == 0true

✅ === (엄격한 비교)는 안전

"" === false
↓
타입 다름 (string vs boolean)false

📌 falsy 값 목록

JavaScript에서 false처럼 동작하는 값들 (falsy):

false
0
-0
0n      // BigInt 0
""
null
undefined
NaN

위 값들은 if (value)처럼 검사했을 때 모두 false로 취급됩니다.

🧠 실전 팁

  • 항상 타입을 정확히 알고 비교할 때는 === 사용하세요.
  • 느슨한 비교는 가끔 유용하지만, 예측 불가능한 버그의 원인이 될 수 있어요.

✅ [] == false

[] == false // ✅ true
[] === false // ❌ false

🔍 왜 [] == false가 true인가요?

자바스크립트의 느슨한 비교(==)는 양쪽 타입이 다르면 타입 강제 변환(coercion)을 시도합니다.
Object vs Boolean일 경우, 아래 단계를 따릅니다:

✨ 비교 과정 상세히:

[] == falsefalse0          // Boolean → Number
[]""0        // Array → String → Number
0 == 0 → ✅ true

🧠 배열이 어떻게 숫자 0으로 되냐고요?

자바스크립트는 [](빈 배열)을 비교 연산에 쓸 때:

[]toPrimitive() 호출 → toString()""
""Number("")0

즉:

Number([]) === 0

✅ ===에서는?

[] === false // ❌ false

엄격한 비교는 타입이 다르면 무조건 false입니다.

  • typeof [] → "object"
  • typeof false → "boolean"

📌 요약

표현결과이유
[] == false✅ true[] → "" → 0, false → 0, 0 == 0
[] === false❌ false타입이 다름 (object vs boolean)
Boolean([])✅ true배열은 truthy — 이건 또 반대같이 느껴짐

⚠️ 잠깐! Boolean([])는 true!?

맞아요. 이게 자바스크립트에서 혼동 포인트:

if ([]) {
  console.log("truthy!"); // ✅ 실행됨
}

배열(심지어 빈 배열)도 객체니까 truthy로 취급됨.
하지만 == false 비교에선 타입 변환이 개입돼서 true가 되는 거예요.

🔥 결론

  • == 쓸 때는 자동 형 변환에 유의하세요.
  • 확실한 비교 원하면 === 사용하세요.
  • [] == false → true
    Boolean([]) → true ← 여기서 자바스크립트 마법이 일어납니다.

✅ null == false 결과는?

null == false   // ❌ false
null === false  // ❌ false

🔍 이유는?

자바스크립트의 느슨한 비교(==)는 특정 규칙에 따라 타입을 변환해서 비교합니다.
그런데 null은 아주 특별한 취급을 받아요.

✨ 규칙 요약 (중요!)

  • null은 오직 undefined하고만 느슨하게 같음.
  • 그 외 어떤 값(0, false, "", [], {} 등)과는 느슨한 비교도 false.
null == undefined  // ✅ true
null == false      // ❌ false
null == 0          // ❌ false
null == ""         // ❌ false

📌 왜 null == false가 false인가?

자바스크립트의 == 비교 규칙 중에서:

If Type(x) is null and Type(y) is boolean, return false (no coercion!).

즉, null과 false는 서로 변환해서 비교하지 않음. 그냥 false임.

⚠️ 그런데 Boolean(null)은?

Boolean(null) // false ✅

그래서 조건문에서는 이렇게 동작해요:

if (null) {
  console.log("truthy");
} else {
  console.log("falsy"); // ✅ 이게 출력됨
}

✅ 요약 정리

표현결과이유
null == false❌ falsenull은 false와 느슨한 비교도 안 함
null === false❌ false타입 다름 (object vs boolean)
Boolean(null)✅ falsenull은 falsy 값
null == undefined✅ trueJS에서 유일하게 null과 같다고 보는 값
profile
So that my future self will not be ashamed of myself.

0개의 댓글