언어/JavaScript

[JavaScript] 단축평가 (short circuit evaluation)

Pasak 2024. 7. 7. 16:21

 

JavaScript 강의를 듣다가 단축평가라는 개념이 나왔다.

단순히 아래의 4가지 규칙을 외우라고 설명해주었다.

 

  • &&를 사용했을 때 좌측이 true면 우측값 반환
  • &&를 사용했을 때 좌측이 false면 좌측값 반환
  • ||를 사용했을 때 좌측이 true면 좌측값 반환
  • ||를 사용했을 때 좌측이 false면 우측값 반환

 

뭔가 잘 외워지지가 않아서 뭔가 이해가 가능한 부분이 있는지 좀 더 찾아보았다.

 

정의

논리 연산자가 표현식을 평가하는 도중에 결과가 확정되면 나머지 부분은 평가하지 않고 즉시 결정을 내리는 것을 의미

쉽게 말해 논리 연산자가 더 이상 확인할 필요가 없을 때 멈추는 것

 

AND(&&) 연산자

AND 연산자는 두 피연산자가 모두 true여야 true를 반환한다. 첫 번째 피연산자가 false인 경우, 두 번째 피연산자를 평가할 필요가 없기 때문에 평가를 중단하는 원리로 좌측값을 반환하는 것이다.

let c = true && false; // false
let d = false && 'Hello'; // false

 

OR(||) 연산자

OR 연산자는 두 피연산자 중 하나라도 true이면 true를 반환한다. 첫 번째 피연산자가 true인 경우, 두 번째 피연산자를 평가할 필요가 없기 때문에 평가를 중단하는 원리로 우측값을 반환하는 것이다.

let a = true || false; // true
let b = false || 'Hello'; // Hello

 

위와 같은 원리로 인해 앞서 언급했던 4가지 규칙이 만들어진 것이었다.

 

궁금한 점

이 내용을 찾아보는 중에 두 가지 궁금증이 생겼다.

 

Q1. 지금까지는 true나 false 값이 논리 연산자 앞쪽에 무조건 나오는 예시만 보았는데

       Hello라는 문자열이 앞쪽에 나오면 어떻게 되는 것인가?

 

Q2. 애초에 논리연산의 결과가 왜 Hello라는 문자열인가? 원래 true나 false만을 반환하는 것 아니었나?

       다른 언어도 이랬던거였나? 

 

위의 두 질문에 대해 검색을 해보던 도중 Q2에 대한 해답을 알고 Q1에 대한 궁금증도 풀렸다.

 

Q2

 

JavaScript, Python, Ruby, PHP 등은 논리 연산자가 피연산자 자체를 반환한다.

C 계열 언어(C, C++, Java, C#)에서는 논리 연산자가 항상 boolean 값을 반환한다.

 

JavaScript 언어에서는 피연산자 자체를 반환한다는 것을 알았다.

그렇다면 Hello라는 문자열은 논리 연산에서 참과 거짓 중 어떤 것에 해당하는지?

 

그것은 아래의 Falsy와 Truthy의 평가 기준을 보고 판단할 수 있다.

 

 

Falsy와 Truthy

JavaScript에서 다음 값들은 falsy로 평가된다.

  • false
  • 0
  • -0
  • 0n (BigInt)
  • "" (빈 문자열)
  • null
  • undefined
  • NaN

이 외의 모든 값은 truthy로 평가된다.

 

따라서 'Hello'라는 문자열은 truthy 값이다.

 

즉, Q1에서의 의문에 대한 코드는 다음과 같은 결과를 출력한다.

let a = 'Hello' || true; // Hello

 

 

 

 

'언어 > JavaScript' 카테고리의 다른 글

[JavaScript] 필수 배열 함수  (0) 2024.07.08
[JavaScript] Hoisting(호이스팅)  (0) 2024.07.06