타입스크립트에서의 `truthy`와 `falsy`

타입스크립트에서의 `truthy`와 `falsy`

이 기사에서는 타입스크립트의 truthyfalsy에 대해 설명합니다.

YouTube Video

타입스크립트에서의 truthyfalsy

타입스크립트의 truthyfalsy 개념은 프로그램의 조건문에서 매우 중요한 역할을 합니다. 여기에서 우리는 이 개념들을 자세히 설명하고 실제로 어떻게 사용되는지 살펴보겠습니다. 또한, truthyfalsy 값이 어떻게 처리되는지 이해하기 위해 구체적인 타입스크립트 코드 예제를 제공합니다.

truthyfalsy란 무엇인가요?

JavaScript와 TypeScript에서는, 모든 값이 조건식에서 true(true) 또는 false(false)로 평가됩니다. 이 값들은 논리적으로 truthy 또는 falsy로 분류됩니다.

  • **truthy**는 조건식에서 true로 평가되는 값을 나타냅니다.
  • **falsy**는 조건식에서 false로 평가되는 값을 나타냅니다.

TypeScript에서, 다음의 값들은 falsy로 간주됩니다:.

  1. 숫자 0
  2. "" (빈 문자열)

그 외의 모든 값들은 truthy로 간주됩니다.

truthyfalsy의 구체적인 예시

 1// Examples of falsy values
 2console.log("0 is", Boolean(0) ? "truthy" : "falsy");
 3console.log('"" is', Boolean("") ? "truthy" : "falsy");
 4console.log("null is", Boolean(null) ? "truthy" : "falsy");
 5console.log("undefined is", Boolean(undefined) ? "truthy" : "falsy");
 6console.log("NaN is", Boolean(NaN) ? "truthy" : "falsy");
 7
 8// Examples of truthy values
 9console.log("1 is", Boolean(1) ? "truthy" : "falsy");
10console.log('"hello" is', Boolean("hello") ? "truthy" : "falsy");
11console.log("[] is", Boolean([]) ? "truthy" : "falsy");
12console.log('" " (space) is', Boolean(" ") ? "truthy" : "falsy");

truthyfalsy를 사용한 조건문

truthyfalsy 개념은 조건문과 반복문에서 자주 사용됩니다. 예를 들어, if 문이나 while 루프에서 이러한 값을 직접 사용하여 간단한 조건 평가를 수행할 수 있습니다.

 1// Checking if the length of the array is 0
 2let items: string[] = [];
 3
 4if (items.length) {
 5    console.log("The array is not empty");
 6} else {
 7    console.log("The array is empty");
 8}
 9
10// Checking if the input value is empty
11let input = "";
12
13if (input) {
14    console.log("Input has value");
15} else {
16    console.log("Input is empty"); // This will be executed
17}

?? (널 병합 연산자) 및 || (논리 OR)을 사용한 falsy 값 처리

TypeScript에서는 falsy 값을 다룰 때 유용한 여러 연산자가 있습니다. 특히 Nullish 병합 연산자 (??)와 논리 OR 연산자 (||)가 자주 사용됩니다.

|| (논리적 OR)

논리 OR 연산자는 falsy 값을 기본값으로 대체하는 데 사용됩니다. 그러나, 모든 falsy 값(null이나 undefined뿐만 아니라 0, "" 등도 포함)이 대상이 됩니다.

1let username = "";
2let displayName = username || "Guest"; // Since username is empty, "Guest" is assigned
3
4console.log(displayName); // "Guest"

??(Nullish Coalescing)

Nullish 병합 연산자는 null 또는 undefined에만 기본값을 적용하며, 0이나 ""와 같은 다른 falsy 값은 변경하지 않습니다.

1let username2 = "";
2let displayName2 = username2 ?? "Guest";
3// The empty string is retained
4// since username2 is not null or undefined
5
6console.log(displayName2); // ""

truthyfalsy와 관련된 함정

truthyfalsy를 이해할 때 유의해야 할 주요 사항은 의도하지 않은 값들이 falsy로 처리될 수 있다는 점입니다. 예를 들어, 0과 빈 문자열 ""은 유효한 값이지만, 조건문에서는 falsy로 간주되어 잘못된 평가가 이루어질 수 있습니다.

1let score = 0;
2
3if (score) {
4    console.log("You have a score!"); // This will not be executed
5} else {
6    console.log("No score available"); // This will be executed
7}

이와 같은 경우, 엄격한 비교 연산자를 사용하면 0false와 같은 값을 정확히 구분할 수 있습니다.

1let score = 0;
2
3if (score === 0) {
4    console.log("Score is zero"); // Correctly evaluated
5}

falsyNaN과 관련된 함정

NaN은 비교 연산자를 사용할 때 자신을 포함하여 어떤 값과도 같지 않기 때문에 특별한 처리가 필요합니다.

1console.log("NaN === NaN:", NaN === NaN); // false

따라서 NaN을 정확히 감지하려면 Number.isNaN()을 사용하는 것이 더 안전합니다.

 1// Bad Example
 2let value = parseInt("0");
 3if (!value) {
 4    console.log("Value is NaN"); // Incorrectly treats 0 as NaN
 5}
 6
 7// Good Example
 8let value2 = parseInt("hello");
 9if (Number.isNaN(value2)) {
10    console.log("Value is NaN"); // Correctly identifies NaN
11}

이처럼, NaN은 자신과도 같지 않기 때문에, NaN과의 비교는 항상 false를 반환합니다. Number.isNaN()을 사용하면 더 신뢰성 있는 검사를 수행할 수 있습니다.

결론

TypeScript에서 truthyfalsy 개념은 매우 편리하지만, 특히 0과 빈 문자열을 사용할 때 주의가 필요합니다. 이 값을 조건 검사에 사용할 때, 느슨한 비교 (==) 대신 엄격한 비교 (===) 또는 Nullish 병합 연산자 (??)를 사용하면 예기치 않은 동작을 피할 수 있습니다.

위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video