[JS] 논리 연산자

학미새🐥·2023년 4월 9일
0

모던자스 튜토리얼 공부 후 정리한 내용입니다

JS에서 쓰이는 논리 연산자
1.|| OR
2. && AND
3. ! NOT

논리 연산자의 피연산자로 모든 타입의 값이 올 수 있다!

1️⃣ OR연산자 ||

  • 인수 중 하나라도 true면 true 반환, 모두 false면 false 반환
  • 피연산자가 boolean형이 아닐 경우에도 boolean형으로 변환되는데,
    • 1 -> true
    • 0 -> false
      (이전 글에서 언급된 truthy값, falsy값이 이러한 예시이다)

JS만의 기능 : boolean형이 아닌 반환값

  • OR 연산자와 피연산자가 여러 개인 경우의 연산 과정은 다음과 같다.
  1. 가장 왼쪽 피연산자부터 차례대로 boolean형으로 변환하여 평가한다
  2. 변환된 값이 true일 경우 연산을 멈추고 해당 피연산자의 원래 값을 반환한다.
  3. 마지막 피연산자까지 false일 경우 마지막 피연산자를 반환한다.

반환 값이 변환하기 전 원래 값, 즉 boolean형이 아니어도 된다!

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 name = "";
let nickName = "숭숭";

alert ( name || nickName || "익명");	// 결과 -> 숭숭
let name = "";
let nickName = "";

alert ( name || nickName || "익명");	// 결과 -> 익명

다음과 같은 활용이 가능하다.

활용2 : 단락 평가

  • 단락 평가 : short circuit evaluation
  • 왼쪽 피연산자부터 차례대로 평가하다가 truthy 값을 만나면 더이상의 평가를 하지 않고 멈추는 식의 프로세스를 말한다.
true || alert("not printed");  	// true를 만나면 평가를 종료함으로 alert 실행 X
false || alert("printed");		// false를 지나 alert가 실행됨 

2️⃣ AND연산자 &&

  • 인수 중 하나라도 false면 false 반환, 모두 true면 true 반환
  • OR 연산자와 같이 AND연산자도 피연산자에 모든 타입이 올 수 있음 (평가 시 boolean으로 변환됨)

첫번째 falsy 값 찾기

  • AND 연산자와 피연산자가 여러 개인 경우의 연산 과정은 다음과 같다.
  1. 가장 왼쪽 피연산자부터 차례대로 boolean형으로 변환하여 평가한다
  2. 변환된 값이 false일 경우 연산을 멈추고 해당 피연산자의 원래 값을 반환한다.
  3. 마지막 피연산자까지 true일 경우 마지막 피연산자를 반환한다.
  • OR연산과 프로세스는 동일한데 첫번째 truthy를 찾냐, falsy를 찾냐의 차이
  • 예시 :
alert( 1 && 2 && null && 3 ); // null 반환

💡 and(&&)가 or(||)보다 우선순위가 높다
💡 and나 or연산자가 if문을 대체할 수 있지만, 가독성을 위해 지양하자!


3️⃣ NOT연산자 !

형태 :

변수명 = !피연산자;

(피연산자의 앞에 느낌표를 사용한다)

  • NOT 연산자만 인수가 하나다
  • 피연산자는 boolean형이 아니어도 되고, 그럴 경우 boolean형으로 변환되어 평가된다.
  • 반환 값은 피연산자의 변환된 값의 역이다. (true -> false, false-> true)

!! (NOT연산자두개)

  • not연산이 연달아 중복으로 오는 것은 결국 역의 기능이 모두 상쇄됨
  • 따라서 반환 값으로 피연산자의 boolean형으로 변환된 값이 나옴
alert( !!"non-empty string" ); // true
alert( !!null ); // false
  • !! 와 같이 boolean 형으로 변환시켜주는 내장함수 Boolean이 있음
alert( Boolean("non-empty string") ); // true
alert( Boolean(null) ); // false

💡 not 연산자는 우선순위가 가장 높은 논리 연산자이다. (AND, OR보다 먼저 실행)

profile
뭐든 다해보려는 공대생입니다

0개의 댓글