[자바스크립트] Truthy와 Falsy

휘루·2025년 3월 16일
0

자바스크립트

목록 보기
43/44

Truthy

// Truthy한 값
let true1 = 123;
let true2 = "Hi";
let true3 = {};
let true4 = [];
let true5 = () => {};

Falsy

// Falsy한 값
let false1 = null;
let false2 = undefined;
let false3 = 0;
let false4 = -0;
let false5 = 0n;
let false6 = NaN;
let false7 = "";

예시와 undefined

// 예제 1
function screenName (person) {
	console.log(person.name);
};

let person;
screenName(person);

위와 같이 예제 1에서 let person으로 이름만 정의하고 대입을 하지 않으면 properties of undefined 에러가 생깁니다.

person이 undefined가 되어있다는 뜻입니다.

이는 person이 property에 접근하려 하는데 대입된 게 없어 접근할 수가 없다는 에러입니다.
매개변수가 들어올 거라 생각했는데 undefined 값이 들어오는 상황입니다.

이 상황에서 person이 null인지 undefined인지 확인할 수 있는 방법이 있는데

function screenName (person) {
	if (person === undefined) {
    	console.log("person 값이 없습니다.");
        return;
    }
    console.log(person.name);
};
let person;
screenName(person);

이러면 if 조건문에서만 실행이 되고 return에서 끝나기 때문에
if 조건문 아래에 있는 console.log(person.name); 점 표기법 실행에 접근이 어렵습니다.

결과는

처럼 나옵니다. 이때 person의 값이 undefined가 아니라 null이게 되면

function screenName (person) {
	if (person === undefined || person === null) { // 여기에 person값이 null인 경우를 추가
    	console.log("person 값이 없습니다.");
    }
    console.log(person.name);
};
let person = null;
screenName(person);

이면 똑같이

라는 결과가 나옵니다.

if문 조건 더 줄이기

여기서 더 조건문을 줄일 수 있는데
if (person === undefined || person === null 이 조건을
if (!person) 으로 바꾸면 됩니다.

그러면 전체 코드는

function screenName (person) {
	if (!person) {
    	console.log("person 값이 없습니다.");
        return;
    }
	console.log(person.name);
};
let person = null;  // 또는 let person;
screenName(person);

이 됩니다.

그런데 let person에 실제 객체(오브젝트)를 대입하여 값을 넣으면

function screenName (person) {
	if (!person) {
    	console.log("person 값이 없습니다.");
        return;
    };
    console.log(person.name);
};

let person = {
	name: "경기도",
};
screenName(person);

이렇게 실행하면 객체(오브젝트)인 경기도가 출력됩니다.

해본 결과 해석 달자면

1. function screenName (person) {
	2. if(!person) {
    	3. console.log("person 값이 없어요.");
        4. return;
    };
    5. console.log(person.nation);
};
6. let person = {
	nation: "대한민국",
};
7. screenName(person);

  1. 함수 screenName 이라는 이름으로 매개변수 (person)을 선언합니다.
  2. if 만약 person이 아니면 (!person은 Falsy한 값이어서 Falsy 값들이 모두 해당 됩니다.)
  3. 3인 "person 값이 없어요"가 출력되고
  4. return 반환됩니다. (if문 여기까지 실행)
  5. person이면 person.name이 콘솔로그로 출력됩니다.
  6. let person; 이 위치는 어디든 상관 없는 것 같습니다.
    전역변수여서 그런 것 같고 현재 person의 객체로 담은 nation은 대한민국을 담았습니다.
    만약 let person; 혹은 let person = null 을 담으면 falsy인 3번이 호출됩니다.
  7. screenName(person)은 screenName의 (person)을 호출하는 명령어입니다.
profile
반가워요

0개의 댓글