티스토리 뷰
논리 연산자란?
논리연산 진위표
x |
y |
x && y |
false |
false |
false |
false |
true |
false |
true | false | false |
true |
true |
true |
AND(&&)연산의 진위표 |
표를 보시면 x && y 일 때 true 값을 가지는 것은 하나밖에 없습니다. 즉 AND를 쓸 때엔 피연산자(x, y를 뜻합니다.)가 모두 true일 때만 true를 나타냅니다. 한 쪽이라도 false일 경우 false를 반환합니다.
x && y일 경우 피연산자 모두가 true여야 true가 됩니다.
x |
y |
x || y |
false |
false |
false |
false |
true |
true |
true |
false |
true |
true |
true |
true |
OR(||)연산의 진위표 |
표에서 x || y일 때 false가 되는 것은 하나밖에 없죠? OR을 쓸 때엔 피연산자 중 하나라도 true면 true가 됩니다. 피연산자가 모두 false여야만 false를 반환합니다.
x || y일 경우 피연산자가 모두 false 일 때만 false 값을 가집니다.
x |
!x |
false |
true |
true |
false |
NOT(!)연산의 진위표 |
NOT 연산자는 값을 반대로 바꿉니다.
false일 경우엔 true로, true일 경우 false로 바꾸는 것이 !(not)입니다.
단축평가
const foo = true; let bar = 0; const result = foo || bar++;
소스코드를 살펴볼까요. foo의 값은 true입니다. 그래서 bar의 값과 상관없이 foo || bar의 값은 true입니다. 이럴때 단축평가가 일어난다고 했죠? 단축평가가 일어나면 bar라는 피연산자에 ++라는 부수효과가 붙어있더라도 그 효과는 일어나지 않습니다. bar의 값을 확인해보시면 0이 나오는 것을 볼 수 있습니다.
단축평가가 일어나면 확인할 필요가 없는 피연산자에 부수효과가 있더라도 효과가 발생하지 않습니다.
그럼 foo의 값이 false일 경우에는 어떻게 될까요? foo의 값이 false면 bar의 값에 따라 true인지 false인지를 결정할 수 있기 때문에 값을 평가해야합니다. 그러면 result에는 0이라는 값이 담기고, bar의 값이 1 증가합니다.
피연산자가 불리언(true나 false)이 아니면 값이 반환됩니다.
x |
y |
x && y |
falsy |
falsy |
x(falsy) |
falsy |
truthy |
x(falsy) |
truthy |
falsy |
y(falsy) |
truthy | truthy | y(truthy) |
x |
y |
x || y |
falsy |
falsy |
y(falsy) |
falsy |
truthy |
y(truthy) |
truthy |
falsy |
x(truthy) |
truthy |
truthy |
x(truthy) |
표가 이해가 되지 않으시면 단축평가부분을 더 공부하시는 것을 추천드립니다. 결과를 결정한 값이 반환됩니다.
NOT(!)은 불리언이 아닌 값을 반환할 수 없으므로 피연산자가 무엇이든 항상 불리언(true나 false)를 반환합니다.
논리연산자에 대해서 적다보니 포스팅이 많이 길어졌습니다. 이해가 되지 않는 부분이 있으시면 댓글에 적어주세요.
공감은 제작자에게 큰 힘이 됩니다.
'Frontend-dev > HTML-CSS-JS' 카테고리의 다른 글
매개변수에 구조분해 활용 (0) | 2018.02.21 |
---|---|
조건 연산자(삼항 연산자)와 if else문 (0) | 2018.02.19 |
자바스크립트에서 배열과 객체 값 나열하기 (0) | 2018.02.18 |
break와 continue를 통해 반복문 종료하기 (0) | 2018.02.18 |
자바스크립트의 반복문 (0) | 2018.02.17 |