티스토리 뷰
728x90
반응형
단락 회로 평가
논리 연산자 (&& , ||) 를 사용하여 연산을 진행 할 때 좌측 식의 값에 따라 우측 식의 실행 여부를 판단하는 동작을 단락 회로 평가라고 한다.
예제
getName = (param) => {
if(!param){
return "객체가 아닙니다.";
}
return param.name;
}
위 소스를 단락 회로 평가를 사용해서 간단히 표현 할 수 있다.
getName = (param) => {
const name = param && param.name;
return name || "객체가 아닙니다.";
}
단락 회로 평가를 사용한 함수를 통해 param의 값에 따라 getName을 호출 했을 때 결과는 다음과 같다.
let person = "";
console.log(getName(person)); //객체가 아닙니다.
person = null;
console.log(getName(person)); //객체가 아닙니다.
person = undefined;
console.log(getName(person)); //객체가 아닙니다.
person = 0;
console.log(getName(person)); //객체가 아닙니다.
person = NaN;
console.log(getName(person)); //객체가 아닙니다.
person = [];
console.log(getName(person)); //객체가 아닙니다. (첫번째 getName 함수로 호출할 경우 undefined)
person = {};
console.log(getName(person)); //객체가 아닙니다. (첫번째 getName 함수로 호출할 경우 undefined)
여기서 첫번째 함수와 단락회로 평가를 사용한 두번째 함수의 차이점은 빈 객체와 빈 배열의 return 값이 다르다는 것이다. 두번째 함수에서 빈 객체 또는 빈 배열을 param으로 넘겼을 경우, param.name의 값(undefined) 가 name 값이 되고, name(nudfined) || "객체가 아닙니다." 연산을 하게 되면 undefined가 falsy 이기 때문에 "객체가 아닙니다" 가 출력 된다.
참고
728x90
'JavaScript' 카테고리의 다른 글
| [javascript] 싱글 스레드 작업 수행 방식이 어떻게 될까요?? (0) | 2022.02.23 |
|---|---|
| [javascript] 비 구조화 할당 / 배열, 객체 비교 / 완벽 설명 (0) | 2022.02.23 |
| [javascript] Truthy & Falsy (0) | 2022.02.22 |
| [javascript] 함수 선언식과 함수 표현식 (0) | 2022.02.22 |
| [javascript] JSON.stringify 쉬운 설명 (0) | 2022.02.15 |
댓글