자바스크립트에서 boolean 타입은 논리적 값을 표현하는데 사용되며, **true**와 false 두 가지 값만을 가질 수 있습니다. 이는 조건문, 제어 흐름, 논리 연산 등에서 중요한 역할을 합니다. boolean 타입은 간단하지만, 자바스크립트에서 데이터의 논리적 상태를 표현하고, 프로그램의 결정을 내리는 데 필수적입니다.
Boolean 타입의 사용
boolean 값은 직접 할당할 수 있으며, 논리 연산자 (&&, ||, !)와 함께 사용되어 복잡한 논리 조건을 구성할 수 있습니다. 또한, 비교 연산자 (==, ===, !=, !==, <, >, <=, >=)의 결과도 boolean 값입니다.
let isReady = true; // 직접 할당
let isFinished = false;
if (isReady) {
console.log("Ready!");
}
let result = (5 > 3); // 비교 연산의 결과는 boolean 값임
console.log(result); // true 출력
Truthy와 Falsy 값
자바스크립트에서는 boolean 타입이 아닌 값을 조건문에 사용할 수 있습니다. 이때, 모든 값은 "truthy" 또는 "falsy"로 평가됩니다. "Falsy" 값은 조건문에서 **false**로 평가되는 값들을 말하며, 자바스크립트에서는 다음과 같은 값들이 "falsy"로 간주됩니다:
- false
- 0 (숫자 0)
- "" 또는 '' (빈 문자열)
- null
- undefined
- NaN (Not a Number)
이외의 모든 값은 "truthy"로 평가되어 조건문에서 **true**로 간주됩니다. 이러한 특성을 이용하여, 다양한 데이터 타입을 직접적인 논리적 조건으로 사용할 수 있습니다.
if ("hello") {
console.log("This string is truthy!");
}
if (0) {
// 이 블록은 실행되지 않음
} else {
console.log("0 is falsy.");
}
Boolean() 함수
자바스크립트에서는 Boolean() 함수를 사용하여 어떤 값을 명시적으로 boolean 타입으로 변환할 수 있습니다. 이 함수는 위에서 언급한 "truthy"와 "falsy" 규칙을 따릅니다.
console.log(Boolean(0)); // false 출력
console.log(Boolean("hello")); // true 출력
boolean 타입과 관련된 이러한 개념들은 자바스크립트에서 논리적인 결정을 내리고, 프로그램의 흐름을 제어하는 데 핵심적인 역할을 합니다.
자바스크립트의 논리 연산자 (&&, ||, !)는 불리언(boolean) 값과 함께 사용되기 위해 설계되었지만, 실제로는 불리언이 아닌 값을 직접 반환할 수 있는 "불리언이 아닌 척하는" 동작을 합니다. 이러한 특성 때문에, 논리 연산자는 때때로 "불리언이 아닌 척하기의 피해자"로 묘사될 수 있습니다. 이는 자바스크립트에서 논리 연산자들이 단순히 **true**나 **false**를 반환하는 것이 아니라, "Short-circuit" 평가를 통해 특정 연산의 결과값을 직접 반환하기 때문입니다.
Short-Circuit 평가
- OR (||) 연산자는 왼쪽 피연산자가 "truthy" 값이면 왼쪽 피연산자의 값을 반환합니다. 만약 왼쪽 피연산자가 "falsy"라면, 오른쪽 피연산자의 값을 반환합니다. 이는 OR 연산자가 첫 번째 "truthy" 값을 찾거나, 모두 "falsy"일 경우 마지막 값을 반환하는 방식으로 동작한다는 것을 의미합니다.
- AND (&&) 연산자는 왼쪽 피연산자가 "falsy" 값이면 왼쪽 피연산자의 값을 반환합니다. 만약 왼쪽 피연산자가 "truthy"라면, 오른쪽 피연산자의 값을 반환합니다. 즉, AND 연산자는 첫 번째 "falsy" 값을 찾거나, 모든 값이 "truthy"일 경우 마지막 값을 반환합니다.
- NOT (!) 연산자는 피연산자의 불리언 값을 반전시킵니다. "truthy" 값은 **false**로, "falsy" 값은 **true**로 변환됩니다. 이 연산자만이 항상 불리언 타입을 반환합니다.
예시
console.log("Hello" || "World"); // "Hello" 출력
console.log(0 || "Falsy"); // "Falsy" 출력
console.log("Hello" && "World"); // "World" 출력
console.log(0 && "Falsy"); // 0 출력
이러한 동작 방식은 유용할 수 있지만, 개발자가 이러한 특성을 잘 이해하지 못하면 예상치 못한 결과를 초래할 수 있습니다. 예를 들어, 개발자가 논리 연산의 결과가 항상 불리언 타입이라고 잘못 가정하고 코드를 작성하면, 논리 연산자가 실제로는 "truthy"나 "falsy" 값을 반환할 때 문제가 발생할 수 있습니다.
자바스크립트에서 논리 연산자는 그들의 유연성과 유용성 때문에 널리 사용되지만, 이들의 특별한 동작 방식으로 인해 때때로 혼란을 야기할 수 있습니다. 따라서, 논리 연산자를 사용할 때는 이러한 동작 방식을 잘 이해하고 있어야 하며, 코드의 가독성과 명확성을 위해 필요한 경우에는 명시적으로 불리언 타입으로 변환하는 것이 좋습니다.
자바스크립트에서 "truthy"와 "falsy" 값의 개념은 **true**와 false 값과는 구별되는 중요한 개념입니다. 이 차이점을 이해하는 것은 자바스크립트에서 조건문과 논리 연산자를 사용할 때 매우 중요합니다.
True와 False
**true**와 false는 자바스크립트의 불리언(boolean) 타입의 두 가지 리터럴 값입니다. 이들은 논리적인 조건을 평가하는데 사용되며, 명시적으로 조건문이나 비교 연산의 결과로 나타납니다.
Truthy와 Falsy
반면, "truthy"와 "falsy"는 true 또는 **false**로 직접적으로 평가되지 않는 값들이 조건문 내에서 갖게 되는 논리적 성질을 나타냅니다. 자바스크립트에서는 if 조건문이나 논리 연산자 등을 사용할 때, 모든 값은 불리언 컨텍스트에서 "truthy" 또는 "falsy"로 평가됩니다.
- Truthy 값: 조건문에서 **true**로 평가되는 값입니다. 이는 true 리터럴 이외에도, false, 0, 0, 0n, "", null, undefined, NaN 이외의 모든 값입니다. 즉, 빈 문자열이 아닌 문자열, **0**이 아닌 모든 숫자(음수 및 양수), 빈 배열, 빈 객체 등이 포함됩니다.
- Falsy 값: 조건문에서 **false**로 평가되는 값입니다. 자바스크립트에서는 명시적으로 false, 0, 0, 0n (BigInt에서의 0), "" (빈 문자열), null, undefined, **NaN**이 "falsy" 값입니다.
예시
if ("hello") {
console.log("This string is truthy.");
} // 이 코드는 실행됩니다.
if (0) {
console.log("This code will not execute.");
} // 이 코드는 실행되지 않습니다.
위의 예에서, "hello" 문자열은 "truthy" 값이기 때문에 조건문은 참으로 평가되고 코드 블록이 실행됩니다. 반면, **0**은 "falsy" 값이기 때문에 해당 조건문은 거짓으로 평가되고 코드 블록은 실행되지 않습니다.
"truthy"와 "falsy" 개념은 **true**와 **false**의 불리언 타입 값과는 다르며, 자바스크립트에서 불리언 컨텍스트에서의 값의 평가 방식을 설명합니다. 이러한 차이를 이해하는 것은 조건문의 올바른 사용과 예상치 못한 버그를 방지하는 데 중요합니다.
'javascript > 자바스크립트는 왜 그 모양일까' 카테고리의 다른 글
객체 (0) | 2024.03.09 |
---|---|
배열의 순수 함수, 비순수 함수 (2) | 2024.03.05 |
자바스크립트에서의 큰 유리수 (1) | 2024.03.05 |
큰 부동소수점 (0) | 2024.03.05 |
자바스크립트에서의 큰 정수 (0) | 2024.03.05 |