본문 바로가기

프론트엔드/Java Script

JavaScript Sec 02_3 단락회로 평가

논리 연산자의 왼쪽에서 오른쪽 방향으로 연산하는 특성을 이용한 문법

단락회로 평가


  • 단락회로 평가 : 두 개의 피연산자 중 뒤에 위치한 피연산자를 확인할 필요없이 그냥 연산을 끝내버리는 것을 의미
const getName=(person)=> {
  return person && person.name};
let person;
const name = getName(person);
console.log(name);
  1. person이라는 변수에는 객체가 정의되지 않았으므로 person type은 undefined type이다.
  2. 매개변수에 이 undefined type인 person을 넣으면 논리 연산자 (&&) 에서는 falsy 속성으로 인해 person을 false로 인식하게 된다.
  3. 단락회로 평가 문법에 의해 &&는 앞의 피연산자가 false이므로 뒤의 피연산자를 볼 필요도 없이 false인 person의 type, undefined을 반환한다.
  4. let person=null;이라고 해도 마찬가지로 getName() 함수에서는 null을 반환한다.
  • 예시 1
const getName=(person)=> {
const name = person && person.name;
return name || "객체가 아닙니다."
};
let person={name : "최영서"};
const name = getName(person);
console.log(name);
  1. person이 undefined 하지 않고 프로퍼티가 있는 객체 형태이다.
  2. 매개변수에는 객체 리터럴이 전달된다.
  3. 논리 연산자 && 에서 앞의 피연산자는 객체 리터럴로 truthy한 속성을 갖고있으므로 뒤의 피연산자까지 확인해준다.
  4. 뒤의 피연산자가 person.name 즉, “최영서”라는 문자열이므로 역시 truthy하다.
  5. 상수 name에는 truthy한 속성의 뒤의 피연산자의 값 “최영서” 가 대입된다.
  6. 따라서 출력 시 “최영서” 가 출력된다.
  • 예시 2
const getName=(person)=> {
const name = person && person.name;
return name || "객체가 아닙니다."
};
let person;
const name = getName(person);
console.log(name);
  1. const name = person && person.name; 에서 name에는 undefined이 대입된다.
  2. 논리 연산자 || 는 앞의 피연산자가 false이면 뒤의 피연산자가 true인지까지 확인하므로 falsy 속성인 name을 확인한 후 뒤의 피연산자인 “객체가 아닙니다” 문자열을 확인한다.
  3. 문자열은 truthy 속성이므로 반환 시 truthy 속성인 “객체가 아닙니다” 문자열이 그대로 반환된다.