Boolean Operator &&, ||

From. 자바스크립트 개론

앞에서 불리언 연산자 &&와 || 를 살펴볼 때 두 연산자가 불리언 값을 만들어 낸다고 설명했었다. 이것은 약간 과도하게 단순화한 면이 있다. 불리언 값에 두 연산자를 적용하면 실제로 불리언 값이 반환될 것이다. 하지만 다른 종류의 값에도 두 연산자를 적용할 수 있으며, 이 경우 인자 중 하나가 반환될 것이다.

|| 이 실제로 하는 일은 다음과 같다. 먼저 왼쪽 값을 살핀다. 이 값을 불리언 값으로 변환해 true가 반환되면 왼쪽 값을 반환하고, 그렇지 않으면 오른쪽 값을 반환한다. 인자가 불리언 값일 때 이렇게 하는 것이 올바른지 직접 확인해보기 바란다. 왜 그런 식으로 작동할까? 실제로 이렇게 하면 아주 효율적이다. 다음과 같은 예제를 생각해보자.

							var input  = prompt("성함이 어떻게 되십니까?", "홍길동");
							alert("안녕하세요 "+(input || "고객님"));
						

사용자가 이름을 입력하지 않고 어떻게든 취소를 클릭하거나 promp 대화상자를 닫으면 input 변수에 null 이나 "" 값이 담길 것이다. 이런 두 값은 불리언으로 변환했을 때 모두 false를 반환한다. 따라서 이겨우 input || "고객님" 이라는 표현식은 input 변-수의 값 혹은 "고객님"이라는 무문자열로 읽힐 것이다. 이는 '실패처리' 값을 제공하는 아주 쉬운 방법이다.

&& 연산자도 이와 비슷하게 동작하지만, 결과는 반대다. 왼쪽 값을 불리언으로 변환했을 때 false가 반환된다면 그 값을 반환하고, 그렇지 않으면 오른쪽 값을 반환한다.

이 두 연산자의 또 한 가지 중요한 특성은 오른쪽 표현식을 필요할 때만 평가한다는 점이다. true || X 의 경우 X와는 상관없이 결과는 항상 true이므로 X는 절대로 평가되지 않으며, X에 부수효과가 있더라도 절대로 일어나지 않는다. 이것은 false && X에서도 마찬가지다. 다음 예제를 실행하면 단 하나의 경고창만 나타날 것이다.

							false || alert("전 나타납니다.");
							false && alert("전 아니에요.");