논리 연산식(and, or)에서 왼쪽 피연산자의 값 만으로 결과를 확정할 수 있을 때, 오른쪽 피연산자를 실행하지 않는 동작을 의미한다.
// 예시문
let varA = false;
let varB = true;
// 01. And 연산자 예시
console.log(false && "Hello"); // 결과: false
console.log(0 && "Hello"); // 결과: 0
console.log("" && "Hello"); // 결과: ""
console.log("JavaScript" && "Hello"); // 결과: "Hello"
/*
왼쪽 피연산자가 false 같은 값 즉, falsy 값이면
오른쪽 피연산자를 호출하지 않아도 이미 false 이므로
첫번째 피연선자 값을 바로 반환
*/
// 02. OR 연산자 예시
console.log(true || "Hello"); // 결과: true
console.log(1 || "Hello"); // 결과: 1
console.log("JavaScript" || "Hello"); // 결과: "JavaScript"
console.log("" || "Hello"); // 결과: "Hello"
console.log(0 || "Hello"); // 결과: "Hello"
/*
왼쪽 피연산자가 true 같은 값 즉, truthy 값이면
오른쪽 피연산자를 호출하지 않아도 이미 true 이므로
첫번째 피연산자 값을 바로 반환
*/
위처럼 단락평가를 활용하면 조건문을 이용하지 않아도
특정 상황에서 어떤 함수를 호출하지 않도록 방지하거나,
어떠한 값들을 굳이 계산하지 않도록 제한하는 등의
다양한 기능을 개발할 수 있다.
function returnFalse() {
console.log("False 함수");
return undefined;
}
function returnTrue() {
console.log("True 함수");
return 10;
}
console.log(returnFalse() && returnTrue());
// 선 입력이 false이기 때문에 뒷 피연산자를 호출 할 필요가 없음.
// 어차피 false이기 때문에 returnFalse 함수만 호출
console.log(returnTrue() && returnFalse());
// 선 입력이 true 이기 때문에 뒷 피연산자까지 호출해서 확인함.
// returnTrue 와 returnFalse 함수 둘 다 호출
console.log(returnTrue() || returnFalse());
// 선 입력이 true 이기 때문에 뒷 피연산자가 뭐가 나오든 어차피 true 이다.
// 따라서 returnTrue 함수만 호출
function printName(person) {
if (!person) {
console.log("person에 값이 없음");
return;
}
console.log(person.name);
}
위 코드처럼 falsy값으로 조건문을 활용해 예외사항을 처리할 수 있지만
function printName(person) {
const name = person && person.name;
console.log(name || "person의 값이 없음");
}
printName();
/*
매개변수가 비어있으므로 name은 falsy 값이 된다.
즉, console.log 안에서 오른쪽 피연산자까지 호출되기 때문에
결과는 "person의 값이 없음" 이 된다.
*/
printName({name: "박종찬"});
/*
name 속성값이 선언되었기 때문에 객체로서 truthy 값이 되고
console.log 안에서 왼쪽 피연산자만으로 true가 확정이 된다.
결과는 "박종찬" 이 나올것이다.
*/
단락평가를 적용시킨다면 코드가 훨씬 간결해진다.
function printMessage() {
console.log("메시지를 출력합니다.");
}
let shouldPrint = false;
shouldPrint && printMessage(); // 아무것도 출력되지 않음
1 번과 비슷하지만 방지의 기능이 더 확실하다.
변수 shouldPrint 가 true, truthy 가 되지 않는 이상
메세지는 출력되지 않는다.
Truthy 와 Falsy 와 같이 코드의 간결성과 효율에 도움을 주는 기능이지만
자유자재로 활용하려면 계속 시도해봐야 할 것 같다.