JavaScript 17. 논리연산자 &&(AND) , ||(OR), !(NOT)

yricog·2021년 12월 21일
0

JavaScript_Basic

목록 보기
16/28
post-thumbnail

논리연산자 (Logical Operator)

논리연산자는 참(true) 또는 거짓(false)을 반영하는 불리언(Boolean) 값을 반환한다.
반환 시 단축평가(short circuit evaluation) 라는 것을 통해 왼쪽부터 오른쪽으로 평가를 진행하는데, 평가 도중 결과값이 나오면 다음 명제의 참,거짓 여부와 상관없이 결과값을 반환해 버린다.
연산자의 종류로는 논리곱이라 불리는 AND(&&) 연산자, 논리합이라 불리는 OR(||) 연산자, 그리고 참과 거짓을 뒤집는 NOT(!) 연산자가 있다.


1. 논리곱 = AND = &&

&& 연산자는 '그리고'의 의미를 갖기 때문에 양쪽의 값이 모두 true여야 true값이 반환된다. 고로 단축평가를 통해 앞의 명제가 false이면 뒤의 값까지 갈 것 없이 바로 false가 반환된다.

false && true;   //false
false && false;  //false
true && false;  //false
true && true;  //true ! 

문자열이 오는 경우를 살펴보자. 문자열은 빈 문자열이 아니므로 true를 반환한다.
만약 모든 명제가 true라면 오른쪽에 있는 문자열을 그대로 반환한다.

false && "apple";  //false
"apple" && true;  //true 
"apple" && false;  //false 
true && "apple";  //apple !
"apple" && "orange";  //orange ! 

null && false;  //null은 null값이 반환됨

논리합 = OR = ||

|| 연산자는 '또는'의 의미를 갖기 때문에 둘 중 하나만 true여도 true 값이 반환된다.
고로 앞의 명제가 true이면 뒤의 명제까지 갈 것 없이 바로 true가 반환된다.

true || false;  //true
true || true;  //true 
false || true;  //true
false || false;  //false ! 

문자열이 오는 경우, 문자열은 true를 반환하기 때문에 다른 명제가 무엇을 반환하든 상관없이 true 값이 반환된다. 왼쪽값이 최종 출력되며, 왼쪽에 false가 올 경우에만 true가 반환되는 자리에 있는 문자열이 출력된다. 양쪽 모두 문자열인 경우 뒤에 값은 볼 것도 없이 앞의 명제가 true로 평가되므로, 앞의 값을 반환한다.

"apple" || true;  //apple
"apple" || false;  //apple
flase || "apple";  //apple
true || "apple";  //true (앞의 값) 

"apple" || "orange";  //apple 

논리부정 = NOT = !

논리값을 부정하는 것으로 true는 false로, false는 true로 연산 결과를 뒤집는다.

!a  //a가 false이면 true, true이면 false

논리연산자의 우선순위

논리연산자에는 우선순위가 있는데, 바로 &&(AND)가 ||(OR)보다 먼저 평가되는 것이다.

다음 예시를 보면, name=='Jane' && age>19이 먼저 false가 나온 후에, || result가 실행된다. result는 true이므로 무조건 '입장가능'하게 되는 식이 되어 버리는 것.

<script>
    const name = 'Amy';
    const age = 21;
    const result = true; 

    if(name=='Jane' && age>19 || result){
        console.log('입장가능');
    } else {
        console.log('입장불가');
    }
    
    //무조건 '입장가능'이 출력됨 
</script>

name 값이 다르므로 '입장불가'를 출력해야 하기 때문에, 아래와 같이 식을 변경해준다.

<script>
    if(name='Jane' && (age>19 || result)){
        console.log('입장가능');
    } else {
        console.log('입장불가');
    }
    
    //'입장불가' 출력 
</script>

이렇게 외우자! ⭐️

  • 문자열일때
    &&(AND) 는 양쪽모두 true여야 하므로 뒤에까지 검사해야되서 뒤의 값을 반환!
    ||(OR) 은 한쪽만 true여도 되므로 앞의 값이 true이면 앞의 값을 반환!
    (앞의 값이 false일때만 뒤의 true값을 반환)
profile
의미와 가치를 쫓는 개발자 ✨

0개의 댓글