[javascript] 논리 연산자(logical operator) or와 and의 단축 평가 논리 계산법
javascript 내 OR와 AND 연산자의 단축 평가 논리 계산법
논리연산자는 많은 프로그래밍 언어에서 단순히 true와 false만을 반환하는 것으로 알려져 있으나 javascript 의 논리 연산자 중 or와 and는 조금 다르게 작동한다
-
OR
or 연산자는 → 방향으로 연산을 진행하며 true인 value가 나오면 해당 연산자를 반환하고 연산을 종료한다. 때문에 비교값 중 가장 먼저 나오는 true 값을 반환하며, 값이 모두 true일 경우 가장 앞에 위치한 피연산자를, 값이 모두 false일 경우 가장 뒤에 위치한 피연산자를 반환한다.
null || 7 // 7 → true 조건의 값을 반환 4 || 7 // 4 → 피연산자 모두 true일 경우 가장 앞쪽의 피연산자를 반환한다. null || undefined // undefined → 피연산자 모두 false일 경우 가장 뒤쪽의 피연산자를 반환한다.
※ null, undefined, NaN는 Boolean으로 형 변환 시 false 값으로 판단되며 이러한 값을들 falsy한 값이라고 부른다. ※ Infinity는 Boolean으로 형 변환 시 true 값으로 판단된다.
-
AND and 연산자도 → 방향으로 연산을 진행하며 false인 value가 나오면 해당 연산자를 반환하고 연산을 종료한다. 때문에 비교값 중 가장 먼저 나오는 false 값을 반환하며 값이 모두 true일 경우 가장 뒤에 위치한 피연산자를, 값이 모두 false일 경우 가장 앞에 위치한 피연산자를 반환한다.
7 && null // null → false 조건의 값을 반환 4 && 7 // 7 → 피연산자 모두 true일 경우 가장 뒤쪽의 피연산자를 반환한다. null && undefined // null → 피연산자 모두 false일 경우 가장 앞쪽의 피연산자를 반환한다.
두 연산자 모두 반환값을 찾으면 연산이 중도에 종료되기 때문에 아래와 같은 상황이 발생할 수 있다.
let arr = []
true || arr.push('Rolling')
console.log(arr) // [] → true 값을 찾은 후 or 연산이 종료되어 arr.push() 함수가 실행되지 않았다.
이를 이용하여 falsy한 값이 문제가 될 가능성이 있을 때의 예외처리를 할 수 있다.
let str = ""
(str.match(/\d/g)|| []).length
정규표현식 조건에 맞는 값이 없을 경우 match()
함수는 null을 반환시키며, null.length
명령어는 Uncaught TypeError로 동작을 멈춘다.
|| []
를 추가하여 match 함수의 반환값이 null일 경우 빈 array를 반환하게 하여 [].length
라는 정상적인 명령어를 사용하게 한다.
참조
- https://mynameisdabin.tistory.com/10