자바스크립트의 신기한 기능!
참이 아니라 참 같은 값인 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 👇
false가 아니어도 거짓으로 분류하는 자바스크립트의 값
-> 거짓 같은 값 : falsy 👇
-> 코딩할 때 활용하기 굉장히 좋은 성질😊
객체를 매개변수로 받아서 받은 객체에서 특정한 프로퍼티를 반환하는 함수를 포함한 프로그램👇
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의 예외처리 가능