전통적인 프로그래밍에서 OR 연산자는 불린값을 조작하는 데 쓰입니다. 인수 중 하나라도 true
이면 true
를 반환하고, 그렇지 않으면 false
를 반환하죠.
alert( true || true ); // true
alert( false || true ); // true
alert( true || false ); // true
alert( false || false ); // false
OR 연산자와 피연산자가 여러 개인 경우:
result = value1 || value2 || value3;
이때, OR ||
연산자는 다음 순서에 따라 연산을 수행합니다.
true
이면 연산을 멈추고 해당 피연산자의 변환 전 원래 값을 반환합니다.false
로 평가되는 경우)엔 마지막 피연산자를 반환합니다.여기서 핵심은 반환 값이 형 변환을 하지 않은 원래 값이라는 것입니다.
정리해 보자면 이렇습니다. OR "||"
연산자를 여러 개 체이닝(chaining) 하면 첫 번째 truthy를 반환합니다. 피연산자에 truthy가 하나도 없다면 마지막 피연산자를 반환합니다.
예시:
alert( 1 || 0 ); // 1 (1은 truthy임)
alert( null || 1 ); // 1 (1은 truthy임)
alert( null || 0 || 1 ); // 1 (1은 truthy임)
alert( undefined || null || 0 ); // 0 (모두 falsy이므로, 마지막 값을 반환함)
이런 OR 연산자의 추가 기능을 이용하면 여러 용도로 OR 연산자를 활용할 수 있습니다.
전통적인 프로그래밍에서 AND 연산자는 두 피연산자가 모두가 참일 때 true
를 반환합니다. 그 외의 경우는 false
를 반환하죠.
alert( true && true ); // true
alert( false && true ); // false
alert( true && false ); // false
alert( false && false ); // false
AND 연산자와 피연산자가 여러 개인 경우를 살펴봅시다.
result = value1 && value2 && value3;
AND 연산자 &&
는 아래와 같은 순서로 동작합니다.
false
이면 평가를 멈추고 해당 피연산자의 변환 전 원래 값을 반환합니다.true
로 평가되는 경우)엔 마지막 피연산자가 반환됩니다.정리해 보자면 이렇습니다. AND 연산자는 첫 번째 falsy를 반환합니다. 피연산자에 falsy가 없다면 마지막 값을 반환합니다.
위 알고리즘은 OR 연산자의 알고리즘과 유사합니다. 차이점은 AND 연산자가 첫 번째 falsy를 반환하는 반면, OR은 첫 번째 truthy를 반환한다는 것입니다.
예시:
// 첫 번째 피연산자가 truthy이면,
// AND는 두 번째 피연산자를 반환합니다.
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// 첫 번째 피연산자가 falsy이면,
// AND는 첫 번째 피연산자를 반환하고, 두 번째 피연산자는 무시합니다.
alert( null && 5 ); // null
alert( 0 && "아무거나 와도 상관없습니다." ); // 0
AND 연산자에도 피연산자 여러 개를 연속해서 전달할 수 있습니다. 첫 번째 falsy가 어떻게 반환되는지 예시를 통해 살펴봅시다.
alert( 1 && 2 && null && 3 ); // null
아래 예시에선 AND 연산자의 피연산자가 모두 truthy이기 때문에 마지막 피연산자가 반환됩니다.
alert( 1 && 2 && 3 ); // 마지막 값, 3
논리 연산자 NOT은 느낌표 !
를 써서 만들 수 있습니다.
NOT 연산자의 문법은 매우 간단합니다.
result = !value;
NOT 연산자는 인수를 하나만 받고, 다음 순서대로 연산을 수행합니다.
true / false
)으로 변환합니다.예시:
alert( !true ); // false alert( !0 ); // true
NOT을 두 개 연달아 사용(!!
)하면 값을 불린형으로 변환할 수 있습니다.
alert( !!"non-empty string" ); // true alert( !!null ); // false
이때, 첫 번째 NOT 연산자는 피연산자로 받은 값을 불린형으로 변환한 후 이 값의 역을 반환하고, 두 번째 NOT 연산자는 첫 번째 NOT 연산자가 반환한 값의 역을 반환합니다. 이렇게 NOT을 연달아 사용하면 특정 값을 불린형으로 변환할 수 있습니다.
참고로, 내장 함수 Boolean
을 사용하면 !!
을 사용한 것과 같은 결과를 도출할 수 있습니다.
NOT
연산자의 우선순위는 모든 논리 연산자 중에서 가장 높기 때문에 항상 &&
나 ||
보다 먼저 실행됩니다.
&&
의 우선순위가 ||
보다 높습니다.
따라서 a && b || c && d
는 (a && b) || (c && d)
와 동일하게 동작합니다.