"단락 평가"란, 논리 연산자(`&&`, `||`)가 왼쪽 값만으로 결과가 확정되면 오른쪽은 평가하지 않는 것을 의미함
1. 기본개념
function returnFalse() {
console.log("False 함수");
return false;
}
function returnTrue() {
console.log("True 함수");
return true;
}
console.log(returnFalse() && returnTrue());
// 출력:
// False 함수
// false
설명
- `&&`는 왼쪽이 `false`면 이미 전체가 false -> 오른쪽 실행 X
- 그래서 `returnTrue()`는 호출되지 않음
-> 이게 "단락 평가"의 핵심
2. 동작 비교
console.log(returnTrue() && returnFalse());
// True 함수
// False 함수
// false
여기선 `returnTrue()`가 `true`를 반환했으므로 결과를 확정하려면 오른쪽도 실행해야 해서 두 함수 모두 실행됨.
3. OR(`||`) 연산의 단락 평가
console.log(returnFalse() || returnTrue());
// False 함수
// True 함수
// true
console.log(returnTrue() || returnFalse());
// True 함수
// true
`||`는 왼쪽이 true면 이미 전체가 true -> 오른쪽은 실행되지 않음 즉,
`&&` -> 첫 번째가 false면 멈춤
`||` -> 첫 번째가 true면 멈춤
4. `truthy` / `falsy` 값과 단락 평가
- 단락 평가는 true / false 뿐 아니라 truthy / falsy 값 전체에도 적용됨
function returnFalse1() {
console.log("False 함수");
return undefined; // falsy
}
function returnTrue1() {
console.log("True 함수");
return 10; // truthy
}
console.log(returnFalse1() && returnTrue1());
// False 함수
// undefined
console.log(returnTrue1() && returnFalse1());
// True 함수
// False 함수
// undefined
console.log(returnFalse1() || returnTrue1());
// False 함수
// True 함수
// 10
console.log(returnTrue1() || returnFalse1());
// True 함수
// 10
`undefined`, `null`, `0`, `NaN`, `""` 같은 falsy 값도 false처럼 평가됨
5. 단락 평가 활용 예시
function printName(person) {
const name = person && person.name;
console.log(name || "person의 값이 없음");
}
printName(); // person의 값이 없음
printName({ name: "도서" }); // 도서
동작 해석
- `person && person.name`
-> `person`이 falsy(예: `undefined`, `null`)이면 바로 falsy로 멈춤
-> 안전하게 접근 가능 (`person.name` 접근 에러 방지) - `name || "person의 값이 없음"`
-> `name`이 falsy면 `"person의 값이 없음"`을 출력
즉,
`&&` : 왼쪽이 falsy면 멈춤 (안전한 접근)
`||` : 왼쪽이 falsy면 오른쪽 대체값 사용 (기본값 설정)
'React > JavaScript 심화' 카테고리의 다른 글
| [JavaScript 심화] 배열 메서드 (요소 조작) (0) | 2025.11.10 |
|---|---|
| [JavaScript 심화] 순회 정리 (0) | 2025.11.10 |
| [JavaScript 심화] Spread & Rest (0) | 2025.11.03 |
| [JavaScript 심화] 구조 분해 할당 (0) | 2025.11.03 |
| [JavaScript 심화] Truthy & Falsy (0) | 2025.11.03 |