논리연산자는 많은 프로그래밍 언어에서 단순히 True와 False만을 반환하는 것으로 알려져 있으나 JavaScript 의 논리 연산자 중 Or와 And는 조금 다르게 작동한다.
Or
Or 연산자는 → 방향으로 연산을 진행하며 True인 값이 나오면 해당 값을 반환하고 연산을 종료한다.
때문에 비교값 중 가장 먼저 나오는 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인 값이 나오면 해당 값을 반환하고 연산을 종료한다.
때문에 비교값 중 가장 먼저 나오는 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 라는 정상적인 명령어를 사용하게 한다.
📌 참조
'Languages' 카테고리의 다른 글
[HTML] Semantic tag (0) | 2023.08.22 |
---|---|
[Python] List * 연산으로 2차원 배열 이상 확장했을 때 Index 참조 문제 (0) | 2023.07.04 |
[JavaScript] 정규표현식의 전역 플래그와 .test() (0) | 2023.07.02 |
[JavaScript] Template literal & Tagged template (0) | 2023.07.02 |
[JavaScript] 정규표현식 (RegExp) (0) | 2023.07.02 |