AR삽질러

JavaScript - 단락평가(Short-circuit Evaluation) (13) 본문

WEB/JavaScript

JavaScript - 단락평가(Short-circuit Evaluation) (13)

아랑팡팡 2024. 8. 20. 11:28
728x90

 

단락평가(Short-circuit Evaluation)

 

1. 단락평가(Short-circuit Evaluation)란

 - 논리연산자 &&, || 가 평가 도중에 불필요한 연산을 생락하는 것으로 성능을 최적화하고 코드를 간결하게 작성하는데 유용하다.

 - 논지연산자가 좌항의 값만으로 결과를 결정할 수 있을 경우 우항의 표현식은 평가하지 않고 결과를 반환하는 것을 의미한다.

let varA = false;
let varB = true;

console.log(varA && varB);
console.log(varA || varB);

 

  • varA && varB
    • varA가 false이기 때문에 varB는 평가되지 않고 결과는 false가 된다.
  • varA || varB
    • varA가 false이기 때문에 varB가 평가되고 결과는 true가 된다.
  • &&(AND) 연산자는 좌항Falsy 값일 경우, 우항을 평가하지 않고 바로 좌항의 값을 반환합니다. 좌항이 Truthy 값일 경우, 우항을 평가하여 그 결과를 반환합니다.
  • ||(OR) 연산자는 좌항Truthy 값일 경우, 우항을 평가하지 않고 바로 좌항의 값을 반환합니다. 좌항이 Falsy 값일 경우, 우항을 평가하여 그 결과를 반환합니다.

2. || (OR) 연산자의 단락 평가

function returnFalse() {
  console.log("False함수");
  return false;
}

function returnTrue() {
  console.log("True함수");
  return true;
}

console.log(returnFalse() && returnTrue());

 

 - returnFalse 함수가 먼저 호출되어 False함수 메시지를 출력후 false를 반환한다.

- 좌항이 Falsy값이기 때문에 우항을 평가하지 않아 returnTrue()함수는 호출되지 않는다.

 

 

console.log(returnTrue() && returnFalse());

- returnTrue 함수가 먼저 호출되어 True함수 메시지를 출력한 후 true를 반환한다.

 - && 연산자는 좌항이 Truthy값일 경우 우항을 평가해 returnFasle() 함수도 호출된다.

 

 

function returnFalse() {
  console.log("False함수");
  return undefined;
}

function returnTrue() {
  console.log("True함수");
  return 100;
}

console.log(returnTrue() || returnFalse());

returnFalse()

 - False함수 메시지를 출력하고 undefined를 반환한다.

returnTrue()

 - True함수 메시지를 출력하고 100을 반환한다.

 

returnTrue()함수가 먼저 호출되고 True함수 메시지를 출력한후 100을 반환하는데 좌항이 Truthy값이라면 우항을 평가하지 않는다. 100은 Truthy값으로 returnFalse함수는 호출되지 않는다.

 

3. 단락평가 예제

function printUserName(person) {
  const name = person && person.name;
  console.log(name || "person의 값이 없습니다.");
}

printUserName();
printUserName({ name: "AR" });

 

person && person.name

 - persion이 전달되었을 때만 persion.name을 사용한다.

 - name이 없다면 person의 값이 없습니다. 라는 기본 메시지를 출력하게된다.

 

printUserName();

 - person을 전달하지 않아 undefined가 된다.

 

&&연산자

 - person && person.name 에서 person이 존재하면 person.name의 값을 그렇지 않을 경우 undefined로 처리된다.

||연산자

 - console.log(name || "person의 값이 없습니다."); 에서 name이 없다면 메지시를 출력하게된다.

 

 

 

 

 

728x90
반응형
LIST