[JavaScript] 논리연산자- &&(and), ||(or)

&& (and) - 조건이 하나라도 false이면 false

&&연산자의 경우 조건 두개(피연산자) 중 먼저 앞에서 true나 false가 나오는 경우 결과가 정해지므로 뒤에 조건은 확인하지 않는다.

(true && true)  -> true 반환 

(true && false)  -> false 반환

(false && true)  -> false 반환

(false && false)  -> false 반환


if( a > 0 && b < 0 ){
...
}

앞 연산자 a > 0 이 거짓이라면 뒤 조건의 참/거짓 여부에 관계없이 거짓이므로 { }안의 연산을 하지 않는다.



AND 연산자와 피연산자가 여러 개인 경우를 살펴보자.

ex) result = value1 && value2 && value3;


AND 연산자 && 는 아래와 같은 순서로 동작한다.

1. 가장 왼쪽 피연산자부터 시작해 오른쪽으로 나아가며 피연산자를 평가한다.

2. 각 피연산자는 불린형으로 변환된다. 변환 후 값이 false이면 평가를 멈추고 해당 피연산자의 변환 전 원래 값을 반환한다.

3. 피연산자 모두가 평가되는 경우(모든 피연산자가 true로 평가되는 경우)엔 마지막 피연산자가 반환된다.


ex1)ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

( 1 && 2 && null && 3 ); // null

ex2)ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

( 1 && 2 && 3 ); // 마지막 값, 3

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


|| (or) - 조건이 하나라도 true이면 true

|| 연산자의 경우 먼저 앞에 나온(피연산자) 조건에서 true나 false가 나오더라도 조건 두개를 모두 확인하여 결과를 반환한다. 그러나 먼저 앞조건이 true이면 뒤에 조건을 확인하지 않는다.(단락평가)

(true || true)  -> true 반환

(true || false)  -> true 반환

(false || true)  -> true 반환

(false || false)  -> false 반환


if( a > 0 || alert("피연산자") ){
...
}

앞 연산자 a > 0 이 참이라면 위 연산자는 참으로 간주되어 { }안의 연산을 진행한다. 그러므로 alert("피연산자")는 출력되지 않는다.



추가적으로 or 연산자 여러 개인 경우를 확인해보려 한다.

ex) result = value1 || value2 || value3;


이때, OR ||연산자는 다음 순서에 따라 연산을 수행한다.

1. 가장 왼쪽 피연산자부터 시작해 오른쪽으로 나아가며 피연산자를 평가한다.

2. 각 피연산자를 불린형으로 변환한다. 변환 후 그 값이 true이면 연산을 멈추고 해당 피연산자의 변환 전 원래 값을 반환한다.

3. 피연산자 모두를 평가한 경우(모든 피연산자가 false로 평가되는 경우)엔 마지막 피연산자를 반환한다.


정리해보면 || (or) 연산자를 사용하면 첫번째 truthy한 값을 반환한다.

 
ex1)ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

( undefined || null || 0 ); // 결과: 0 (모두 false이므로, 마지막 값을 반환함)

ex2)ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

let first = "";
let second = "";
let third = "세번째";

( first || second || third || "마지막" ) 

// 결과: "세번째" 

모든 변수가 false이면 "마지막"이 출력되었을 것이다. 문자열도 true로 취급된다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ



댓글