[개발] - Front/Mega-JavaScript
단락회로 평가
완벽한 장면
2024. 4. 11. 13:54
단락회로 평가
논리 연산에서 첫 번째 피연샂나의 값만으로 해당 식의 결과가 확실할 때, 두 번째 값은 평가하지 않는 것.
truthy와 falsy에서
const getName = (person) => {
if(!person) {
return "객체가 아닙니다."
}
return person.getName;
};
let person;// undefined로 할당했으나 저 분기에 걸려서 에러 안 났음.
const name = getName(person);
console.log(name);
이 코드는
"객체가 아닙니다." 출력됨.
const getName = (person) => {
return person && person.name; // person이 undefined기 때문에 뒤의 값을 고려할 필요가 x
};
let person;
const name = getName(person);
console.log(name);
앞의 값이 falsy하므로 굳이 person.name에 접근할 필요가 없어지는 것.
이제 변형을 좀 해보자.
const getName = (person) => {
return person && person.name; // person이 undefined기 때문에 뒤의 값을 고려할 필요가 x
};
let person;
const name = getName(person);
console.log(name);
"객체가 아닙니다." 출력됨.
이제 실제 객체를 넣어보면
const getName = (person) => {
const name = person && person.name;
return name || "객체가 아닙니다.";
};
let person = {name : "뉴진스"};
const name = getName(person);
console.log(name);
"뉴진스" 출력됨.
여기서 const name 이 truthy 한 값이 됨.
따라서 return 도 앞의 값인 name만 고려하면 된다.
반대로
const getName = (person) => {
const name = person && person.name; // name이 null -> falsy한 값
return name || "객체가 아닙니다.";
};
let person = null;
const name = getName(person);
console.log(name);
이러면
"객체가 아닙니다." 출력됨.
728x90
반응형