티스토리 뷰

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

'[개발] - Front > Mega-JavaScript' 카테고리의 다른 글

동기와 비동기  (0) 2024.04.12
조건문 업그레이드  (0) 2024.04.11
콜백 함수  (0) 2024.04.10
배열 내장 함수  (0) 2024.04.09
15. 문서 객체 모델 (3) DOM에 노드 추가/삭제하기  (0) 2023.05.24
Comments
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
250x250