논리 연산자의 왼쪽에서 오른쪽 방향으로 연산하는 특성을 이용한 문법
단락회로 평가
- 단락회로 평가 : 두 개의 피연산자 중 뒤에 위치한 피연산자를 확인할 필요없이 그냥 연산을 끝내버리는 것을 의미
const getName=(person)=> {
return person && person.name};
let person;
const name = getName(person);
console.log(name);
- person이라는 변수에는 객체가 정의되지 않았으므로 person type은 undefined type이다.
- 매개변수에 이 undefined type인 person을 넣으면 논리 연산자 (&&) 에서는 falsy 속성으로 인해 person을 false로 인식하게 된다.
- 단락회로 평가 문법에 의해 &&는 앞의 피연산자가 false이므로 뒤의 피연산자를 볼 필요도 없이 false인 person의 type, undefined을 반환한다.
- 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);
- person이 undefined 하지 않고 프로퍼티가 있는 객체 형태이다.
- 매개변수에는 객체 리터럴이 전달된다.
- 논리 연산자 && 에서 앞의 피연산자는 객체 리터럴로 truthy한 속성을 갖고있으므로 뒤의 피연산자까지 확인해준다.
- 뒤의 피연산자가 person.name 즉, “최영서”라는 문자열이므로 역시 truthy하다.
- 상수 name에는 truthy한 속성의 뒤의 피연산자의 값 “최영서” 가 대입된다.
- 따라서 출력 시 “최영서” 가 출력된다.
- 예시 2
const getName=(person)=> {
const name = person && person.name;
return name || "객체가 아닙니다."
};
let person;
const name = getName(person);
console.log(name);
- const name = person && person.name; 에서 name에는 undefined이 대입된다.
- 논리 연산자 || 는 앞의 피연산자가 false이면 뒤의 피연산자가 true인지까지 확인하므로 falsy 속성인 name을 확인한 후 뒤의 피연산자인 “객체가 아닙니다” 문자열을 확인한다.
- 문자열은 truthy 속성이므로 반환 시 truthy 속성인 “객체가 아닙니다” 문자열이 그대로 반환된다.
'프론트엔드 > Java Script' 카테고리의 다른 글
JavaScript Sec 02_5 비 구조화 할당 (구조 분해 할당) (0) | 2024.02.20 |
---|---|
JavaScript Sec02_4 조건문 Upgrade (0) | 2024.02.20 |
JavaScript Sec02_2 삼항 연산자 (0) | 2024.02.20 |
JavaScript Sec02_1 Truthy & Falsy (0) | 2024.02.20 |
JavaScript Sec01_12 배열 내장함수 (0) | 2024.02.20 |