자바스크립트 논리 연산자

kiki97 ㅣ 2022. 8. 14. 19:43

반응형

논리 연산자

자바스크립트에는 세 종류의 논리 연산자 || (OR), && (AND), !(NOT)이 있다.

 

|| (OR)

인수 중 하나라도 true 이면 true를 반환하고 아니면 false를 반환한다.

if문에서 주어진 조건 중 하나라도 참 인지를 테스트하는 용도로 자주 사용된다.

let hour = 9;

if (hour < 10 || hour > 18) {
  alert( '영업시간이 아닙니다.' );
}

 

첫 번째 truthy를 찾는 OR 연산자 ‘||’

OR "||" 연산자를 여러 개 체이닝 하면 왼쪽에서부터 시작해서 피연산자의 불린 변환 값이

true인 첫번째 피연산자를 반환한다. 피연산자에 true가 하나도 없다면 마지막 피연산자를 반환한다.

 

OR 연산자와 피연산자가 여러 개인 경우 아래와 같은 알고리즘으로 동작한다.

result = value1 || value2 || value3;
  • 가장 왼쪽 피연산자부터 시작해 오른쪽으로 가면서 피연산자를 평가한다.
  • 각 피연산자를 불린형으로 변환해 그 값이 true이면 연산을 멈추고 해당 피연산자의 변환 전 원래 값을 반환한다.
  • 피연산자 모두를 평가한경우(모두 false인 경우)엔 마지막 피연산자를 반환한다.
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이므로, 마지막 값을 반환함)
  • 핵심은 반환 값이 형 변환을 하지 않은 원래 값이라는 것이다.

 

변수 또는 표현식으로 구성된 목록에서 첫 번째 truthy 얻기

let firstName = "";
let lastName = "";
let nickName = "바이올렛";

alert( firstName || lastName || nickName || "익명"); // 바이올렛
  • 모든 변순가 false이면 "익명"이 출력된다.

 

단락 평가(short circuit evaluation)

OR || 연산자는 왼쪽부터 시작해서 오른쪽으로 평가를 진행하는데, true를 만나면

나머지 값은 건드리지 않은 채 평가를 멈춘다. 이런 프로세스를 '단락 평가'라고 한다.

true || alert("not printed");
false || alert("printed");
  • 첫 번째 줄은 true를 만나자마자 평가를 멈추기 때문에 alert가 실행되지 않음
  • 단락 평가는 연산자 왼쪽 조건이 false일 때만 명령어를 실행하고자 할 때 자주 쓰인다.

&& (AND)

두 피연산자가 모두 참일 때 true를 반환하고 그 외의 경우에는 false

let hour = 12;
let minute = 30;

if (hour == 12 && minute == 30) {
  alert( '현재 시각은 12시 30분입니다.' );
}
  • or연산자와 마찬가지로 and 연산자의 피연산자도 타입에 제약이 없다.

 

첫 번째 falsy를 찾는 AND 연산자 ‘&&’

AND 연산자는 첫 번째 false를 반환한다. 피연산자에 false가 없다면 마지막 값을 반환한다.

OR연산자의 알고리즘과 유사하며 AND는 첫 번째 false, OR은 첫번째 true를 반환한다.

result = value1 && value2 && value3;
  • 가장 왼쪽 피연산자부터 시작해서 오른쪽으로 나아가며 피연산자를 평가한다.
  • 각 피연산자는 불린 형으로 변환되고 값이 false이면 평가를 멈추고 해당 피연산자를 변환 전 원래 값으로 반환
  • 피연산자가 모두 평가되는 경우(모두 true인 경우) 마지막 피연산자가 반환된다
// 첫 번째 피연산자가 truthy이면,
// AND는 두 번째 피연산자를 반환합니다.
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5

// 첫 번째 피연산자가 falsy이면,
// AND는 첫 번째 피연산자를 반환하고, 두 번째 피연산자는 무시합니다.
alert( null && 5 ); // null
alert( 0 && "아무거나 와도 상관없습니다." ); // 0

! (NOT)

피연산자를 불린 형( true / false)으로 변환한 뒤, 변환된 값의 역을 반환한다.

alert( !true ); // false
alert( !0 ); // true

 

NOT을 두 개 연달아 사용(!!)하면 값을 불린 형으로 변환할 수 있다.

alert( !!"non-empty string" ); // true
alert( !!null ); // false
  • 내장 함수 Boolean()와 같은 결과

 

반응형