SUE 개발 블로그

자바스크립트 참 같은 값, 거짓 같은 값 Truthy & Falsy 본문

JavaScript

자바스크립트 참 같은 값, 거짓 같은 값 Truthy & Falsy

이수광 2023. 11. 30. 02:45

let a = "";

if (a) {
  console.log("TRUE");
} else {
  console.log("FALSE");
}

// FALSE가 출력된다.
// 조건식에 a처럼 변수를 입력했다.
// a는 true도 false도 아닌 string 이란 자료형으로 이루어져있다.
// 빈 문자열 string을 가진 a라는 변수를 if문의 조건식에 넣으면 거짓으로 인지한다.

let a = []; // TRUE
let a = undefined // FALSE
// 위와 같은 값이 나오는 특이한 성질을 가지고 있다.
// 자바스크립가 자신만의 특정한 기준으로 갑슬 참이나 거짓으로 분류하는
// Truthy 와 Falsy 개념을 알아보자. ( 그 자신만의 기준이란? )
let a = [];
//    = {};
//    = 12;
//    = "0";
//    = "false";
//    = Infinity;

// 위와 같이 true가 아니여도
// 참으로 분류하는 자바스크립트이 값들을 참값은 값.
// Truthy 라고 부른다.

let a = null;
//    = undefined;
//    = 0;
//    = -0;
//    = NaN;
//    = "";

// Falsy한 값들의 대표.
// 이러한 사례들을 코딩할 때 활용하기 좋은 성질이다.

이러한 개념을 어떻게 활용할 것인지. 함수를 통한 프로그램으로 알아보자.

객체를 매개변수로 받아서 받은 객체에서 특정한 프로퍼티를 반환하는 함수를 포함한 프로그래밍이다.

 const getName = (person) => {
   return person.name;
 };

 let person = { name: "이수광" };
 const name = getName(person);

 console.log(name);

// 문제없이 작동한다.

// ------------------------------------------------------------

 const getName = (person) => {
   return person.name;
 };

 let person;
 const name = getName(person);

 console.log(name);

// 프로퍼티를 undefined 라 읽을 수 없다 오류가 뜬다.
// undefined에 점 표기법 person.name 을 사용했기 때문.
// undefined는 객체가 아니기 때문에 내부 프로퍼타애 접근이 불가능하다.

// 이러한 상황에서 우린 조건문을 통해 전달받은 파리미터가 객체인지
// 또는 undefined 나 null 이 아닌지 판단해줘야 한다.

// ------------------------------------------------------------

 const getName = (person) => {
   if (person === undefined || null) {
     return "객체가 아님";
   }
   return person.name;
 };

 let person;
 const name = getName(person);

// console.log(name); // 객체가 아님.

// 위와 같이 person 이 undefined나 null일 경우 "객체가 아님"
// 을 반환하고 멈추기 때문에 오류를 내지 않는다.
// 모든 함수마다 파라미터가 undefined와 null이 아니라는 것을
// if 문으로 예외처리하기는 힘들다.
// 그래서 Falsy 속성을 이용해서 쉽게 해결한다.

// ------------------------------------------------------------

const getName = (person) => {
  if (!person) {
    // false 에 NOT(!)을 붙이면 true
    return "객체가 아님";
  }
  return person.name;
};

let person;
const name = getName(person);

console.log(name); // 객체가 아님.