불리언(Boolean) 값을 사용할 때, true와 false만 사용할 수 있는게 아니다.
true 혹은 false로 간주되는 값들이 존재하기 때문.
Falsy 값에 해당하지 않는 모든 값은 Truthy로 간주한다.
Boolean의 기본 거짓 값.
양의 0과 음의 0(+0, -0) 모두 포함.
"Not-a-Number" 값.
값이 없음을 나타내는 값.
초기화되지 않은 변수나 정의되지 않은 값.
길이가 0인 문자열.
음의 0 (일반적으로 0과 같은 값으로 간주).
1, -1, 42, Infinity, -Infinity 등 0이 아닌 모든 숫자.
"hello", "false", " " (빈칸만 있는 문자열 포함).
{}, [] (빈 객체와 빈 배열 포함).
function() {}, 화살표 함수 등.
Symbol(), BigInt(10) 등.
let value = "Hello, World!";
if (value !== null && value !== undefined && value !== "") {
console.log("Value is valid");
} else {
console.log("Value is invalid");
}
let value = "Hello, World!";
if (value) {
console.log("Value is valid");
} else {
console.log("Value is invalid");
}
let value = "Hello, World!";
if (!value) {
console.log("Value is valid");
} else {
console.log("Value is invalid");
}
!
를 사용하면 된다.빈 객체 {}와 빈 배열 []은 Truthy.
요청 혹은 응답에서 들어오는 데이터가 없는 상황에서 조건문을 사용할 때, 데이터를 관리하는 데이터 형식은 흔히 객체 혹은 배열이다.
그런데 데이터가 없다 = 객체 혹은 배열이 비어있다. 이렇게 되는데, 빈 객체와 배열도 Truthy로 간주되기 때문에 데이터가 없는 상황을 가정하고 작성한 조건문이 의도대로 동작하지 않을 가능성이 있다.
if ({}) {
console.log("This is truthy!");
}
if ([]) {
console.log("This is also truthy!");
}
let items = [];
if (items.length) {
console.log("Items are present");
} else {
console.log("No items found");
}
console.log(Boolean(0)); // false
console.log(Boolean("0")); // true