[JavaScript] 자바스크립트 Truthy & Falsy

S0ju·2022년 5월 20일
0

JavaScript

목록 보기
13/22

자바스크립트의 신기한 기능!

참이 아니라 참 같은 값인 Truthy
거짓이 아니라 거짓 같은 값인 falsy에 대해 알아보자

let a = ""; //a라는 변수는 true도, false도 아닌 string이라는 자료형으로 이루어져있음

if(a //조건식에 변수a를 입력한 상태
  console.log("TRUE");
}else{
  console.log("FALSE");
} //FALSE

불리언 값을 넣지 않게 되면 다 거짓으로 인식되는 것일까?

let a = "string"; //비어있지 않은 문자열

if(a //조건식에 변수a를 입력한 상태
  console.log("TRUE");
}else{
  console.log("FALSE");
} //TRUE

자바스크립트의 조건식에는 불리언 값을 넣지 않아도 참이나 거짓으로 인식이 되는 속성이 있음

let a = []; //빈 배열

if(a //조건식에 변수a를 입력한 상태
  console.log("TRUE");
}else{
  console.log("FALSE");
} //TRUE

빈 배열을 넣어도 TRUE로 인식

let a = undefined; //undefined

if(a //조건식에 변수a를 입력한 상태
  console.log("TRUE");
}else{
  console.log("FALSE");
} //FALSE

undefined는 FALSE로 인식

불리언식의 true가 아니어도 자바스크립트가 조건식에서 참으로 평가하는 값들이 몇개 있음

true가 아니어도 참으로 분류하는 자바스크립트의 값
-> 참 같은 값 : truthy 👇

  • [] : 빈 배열
  • {} : 객체 리터럴
  • 42 : 숫자값
  • "0" : 문자열
  • "false" : 문자열
  • Infinity : 양의 무한대

false가 아니어도 거짓으로 분류하는 자바스크립트의 값
-> 거짓 같은 값 : falsy 👇

  • null : null
  • undefined : undefined
  • 0 : 숫자 0
  • -0 : 마이너스 숫자 0
  • NaN : NaN
  • "" : 빈 문자열

-> 코딩할 때 활용하기 굉장히 좋은 성질😊

객체를 매개변수로 받아서 받은 객체에서 특정한 프로퍼티를 반환하는 함수를 포함한 프로그램👇

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

let person = { name : "영주"};
const name = getName(person);
console.log(name); // 영주

지금은 getName함수에 전달하는 person 파라미터가 name이라는 프로퍼티를 가지고 있는 객체를 전달해서 아무런 문제 발생 X

만약 person 값을 undefined로 전달하면?👇

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

let person;
const name = getName(person);
console.log(name); // 에러 발생

undefined의 점 표기법을 사용하려 했기 때문에 에러 발생
undefined는 객체가 아니기 때문에 내부 프로퍼티에 접근 불가

이런 상황에서는 조건문을 통해 전달받은 파라미터가 객체인지, undefined이 아닌지, null이 아닌지를 판단해줘야 함

const getName = (person) => {
  if(person === undefined){
    return "객체가 아닙니다"; //예외처리
  }
  return person.name;
};

let person;
const name = getName(person);
console.log(name); // 객체가 아닙니다

getName함수에 person을 undefined로 전달했기 때문에 조건식이 참이됨 -> 위의 리턴 return "객체가 아닙니다"; 이 실행 -> 아래 리턴 return person.name; 이 실행 안되어 에러 발생 X

이건 undefined일 때만 해당하는 예외처리
person에 null을 넣게되면 다시 에러 발생

const getName = (person) => {
  if(person === undefined){
    return "객체가 아닙니다"; //예외처리
  }
  return person.name;
};

let person = null;
const name = getName(person);
console.log(name); // 에러 발생

이런상황에는 null까지 추가로 예외처리 해줘야함

const getName = (person) => {
  if(person === undefined || person === null){
    return "객체가 아닙니다"; //예외처리
  }
  return person.name;
};

let person = null;
const name = getName(person);
console.log(name); // 객체가 아닙니다

이렇게 모든 함수마다 전달받는 파라미터가 undefined나 null이 아니라는 것을 if문을 통해 예외처리하는 것은 힘들듯..😓

이것을 falsy 속성을 이용해 쉽게 해결하는 방법!👇

const getName = (person) => {
  if(!person){ //false NOT => true
    return "객체가 아닙니다"; //예외처리
  }
  return person.name;
};

let person = null; // undefined도 동일
const name = getName(person);
console.log(name); // 객체가 아닙니다

위에 배웠던 것처럼 null과 undefined는 조건식에서 false로 판단되는 falsy한 성격을 가짐

false에다 NOT을 붙이면 true가 되는 성질 이용

자바스크립트의 falsy한 값들과 논리연산(NOT)을 활용해서 null과 undefined의 예외처리 가능

profile
프론트엔드 개발자가 되기 위해 공부중입니다 : )

0개의 댓글

관련 채용 정보