자바스크립트에는 다음과 같은 세 종류의 논리 연산자가 있다.
OR(||)는 여러 개 중 하나라도 true면 true이다. 즉 모든 값이 false일 때만 false를 반환한다.
AND(&&)는 모든 값이 true일 때만 true이다. 즉 하나라도 false가 있으면 false를 반환한다.
NOT(!)은 true와 false를 반대 값으로 바꿔준다.
OR는 첫 번째 true를 발견하는 즉시 평가를 멈춘다. 그러니까 다음과 같이 아무리 많은 조건이 있어도 남자라는 조건이 true이므로 true를 반환한다.
반대로 AND는 첫 번째 false를 발견하는 즉시 평가를 멈춘다. 다음의 경우는 두 번째 조건인 '한국인이며'에서 false가 반환되며 평가가 중단된다.
간단한 평가로 true와 false를 판단할 수 있다면 복잡한 작업 전에 해주는 것이 좋다. 만약 군대에서 운전면허를 소지하고 있고 시력이 좋으며 여군인 사람을 선정하는 프로그램을 작성할 때는 어떻게 하는 게 좋을까? 이럴 때는 조건의 순서를 조정해 '여군인데 시력이 좋고 운전면허가 있는 사람'순으로 코딩하는 게 좋다. 첫 번째 조건에서 93%를 걸러낼 수 있으니 눈에 띄게 작업 시간이 줄어든다. 이런 작업은 성능 최적화
에 도움을 준다.
예를 살펴보자. 먼저 OR 연산자이다. 다음은 이름이 TOM이거나 성인이면 통과하는 코드이다. 이 경우 이름은 TOM이 아니지만 성인이므로 통과가 되었다.
다음은 AND 연산자이다. 이름이 MIKE이고 성인이면 통과하는 코드이다. 두 조건에 모두 부합하므로 통과된다.
나이가 10이거나 이름이 MIKE가 아닌 경우에는 통과하지 못한다.
마지막으로 NOT에 관한 예를 살펴보자. 다음은 사용자에게 나이를 입력받아 성인이 아니면 "돌아가"라는 메시지를 반환하는 코드이다. 나이에 10을 입력하면 콘솔 창에 "돌아가"라는 메시지가 뜬다.
나이에 30을 입력하면 다른 메시지가 뜬다.
비교 연산자에도 우선순위가 있다. AND가 OR보다 우선순위가 높다. 다음은 성별이 남자이고 이름이 MIKE이거나 성인이면 통과, 아니면 "돌아가"라는 메시지가 나타나는 코드이다. 성별도 이름도 조건에 부합하지 않는데 이 코드가 통과한 이유는 AND가 OR보다 우선순위가 높아서 먼저 평가되기 때문이다. 그러니까 뒤에 붙은 OR 연산자로 인해 성인이기 때문에 통과가 된 것이다.
위 코드는 다음 코드와 같다고 할 수 있다.
처음에 의도한 대로 만들려면 이렇게 묶어주면 된다. 남자이고 동시에 이름이 MIKE이거나 성인. 테스트해보면 실패해서 "돌아가"라는 콘솔 창에 메시지가 보인다.
성별을 남자로 바꿔 다시 테스트해보면 통과한다.
출처: 자바스크립트 기초 강좌 #7 - 논리 연산자 (AND, OR, NOT)