[개발] - 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
반응형