// Truthy한 값
let true1 = 123;
let true2 = "Hi";
let true3 = {};
let true4 = [];
let true5 = () => {};
// Falsy한 값
let false1 = null;
let false2 = undefined;
let false3 = 0;
let false4 = -0;
let false5 = 0n;
let false6 = NaN;
let false7 = "";
// 예제 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 (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);
let person
; 혹은 let person = null
을 담으면 falsy인 3번이 호출됩니다.