자바스크립트에는 세가지 논리 연산자가 있음 : || (OR 연산자), && (AND 연산자), ! (NOT 연산자)
논리적이라고 말하지만, 이 세 연산자는 boolean 타입 뿐만 아니라 어떠한 타입의 값에도 적용 가능함. 이 결과 또한 해당 타입이 될 수 있음.
|| (OR 연산자)
OR 연산자는 두 개의 세로 선으로 나타냄
1 | result = a || b; | cs |
1 2 3 4 | alert( true || true ); // true alert( false || true ); // true alert( true || false ); // true alert( false || false ); // false | cs |
위에서 보다시피, 두 피 연산자가 모두 false가 아니라면 모두 true를 반환함!
피연산자가 boolean 타입이 아니라면 피연산자의 구문을 true인지 false인지를 판단한 다음 boolean타입으로 리턴함.
예를 들어서 숫자 1은 true를 반환하고 숫자 0은 false를 반환함.
1 2 3 | if (1 || 0) { //works just like if(true || false) alert("truthy"); } | cs |
1 2 3 4 5 | let hour = 9; if (hour < 10 || hour > 18) { alert("The Office is closed."); } | cs |
1 2 3 4 5 6 | let hour = 12; let isWeekend = true; if (hour < 10 || hour > 18 || isWeekend) { alert("The Office is closed."); } | cs |
OR 연산자는 첫 true값을 찾으려고 합니다!
위에서 설명한 로직은 일반적인 로직을 보여줌. 이제 자바스크립트의 추가적인 로직을 알아보자!
OR연산자는 아래와 같은 확장된 기능도 제공함
1 | result = value1 || value2 || value3; | cs |
1 2 3 4 5 6 | alert(1 || 0); // 1 (1 is truthy) alert(true || 'no matther what'); // true is truthy alert(null || 1); // 1 (1 is the first truthy value) alert(null || 0 || 1); // 1 alert(undefined || null || 0); // 0 (all falsy, returns the last value(0)) | cs |
이런 형식들은 boolean만 반환하는 기존의 OR(||) 로직과 비교해서 흥미로운 특징이라고 볼 수 있음!
1. 변수나 구문들 중에서 첫 번째로 true가 되는 값을 갖는 것
: 데이터를 포함하거나 null/undefined가 되는 변수들을 가정하면 어떻게 첫 번째로 true가 되는 값을 갖게 될까
1 2 3 4 5 6 | let currentUser = null; let defaultUser = "John"; let name = currentUser || defaultUser || "unnamed"; alert(name); //John | cs |
1 2 3 4 5 | let x; true || (x = 1); alert(x); // undefined, becuase (x = 1) not evaluated | cs |
1 2 3 4 5 | let x; false || (x = 1); alert(x); // 1 | cs |
일반적으로 프로그래밍을 짤 때, AND 연산자는 두 개의 피연산자가 모두 true일 경우에 true를 리턴하고 아니면 false를 리턴함.
1 2 3 4 | alert( true && true ); // true alert( false && true ); // false alert( true && false ); // false alert( false && false ); // false | cs |
if 구문에서 사용되는 && 연산자를 보자
1 2 3 4 5 6 | let hour = 12; let minute = 30; if (hour == 12 && minute == 30) { alert("The time is 12:30"); } | cs |
1 2 3 | if (1 && 0) { alert("won't work, beause the result if falsy"); } | cs |
AND 연산자는 OR연산자와 마찬가지로 여러개의 && 를 사용할 수 있음.
1 | result = value1 && value2 && value3; | cs |
AND(&&) 연산자는 아래와 같은 특징을 갖는다.
* 피연산자를 왼쪽에서 오른쪽 순서대로 판별함.
* 각 피연산자는 결과 값을 boolean으로 반환하고, 그 결과가 false이면 멈추고 해당 피연산자의 원래 값을 리턴함.
* 만약 모든 피연산자가 true면, 마지막 피연산자의 값을 리턴함.
즉, AND은 처음으로 false가 되는 값을 리턴하고 모두 true인 경우에 마지막 값을 리턴함.
이 규칙은 OR연산자와 비슷함. 차이는 AND은 처음으로 false가 되는 값을 리턴하고 OR는 처음으로 true가 되는 값을 리턴함.
1 2 3 4 5 6 7 8 9 | // if the first operand is truthy, // AND returns the second operand: alert( 1 && 0 ); // 0 alert( 1 && 5 ); // 5 // if the first operand is falsy, // AND returns it. The second operand is ignored alert( null && 5 ); // null alert( 0 && "no matter what" ); // 0 | cs |
OR연산자와 마찬가지고 &&의 연산자는 if구문으로 대체될 수 있음.
1 2 3 | let x = 1; (x > 0) && alert( 'Greater than zero!' ); | cs |
1 2 3 4 5 | let x = 1; if (x > 0) { alert("Greater than zero!"); } | cs |
boolean NOT 연산자는 느낌표(!)로 나타냄.
구문은 꽤 간단함!
1 | result = !value; | cs |
즉, 처음에 NOT 연산자는 값을 boolean 타입으로 바꾸고 그 결과의 반대를 리턴함. 두 번째 NOT연산자는 이걸 다시 반대로 리턴함. 결국, 값을 boolean으로 형변환하는 것이 됨!
이건 내장된 Boolean 함수를 사용하는 것과 같은 방식으로 동작함.
1 2 | alert(Boolean("non-empty string")); //true alert(Boolean(null)); // false | cs |
NOT(!)의 우선순위는 모든 논리 연산자 중에서 가장 높기 때문에 항상 &&나 || 전에 먼저 실행됨!
'자바스크립트' 카테고리의 다른 글
[Canvas] text 랜덤으로 나오다가 하나씩 나타나도록 하기 (0) | 2020.08.10 |
---|---|
[Canvas] Canvas로 비내리는 화면 만들기 (0) | 2020.08.10 |
[JavaScript공부 - 11] 조건 연산자 : if, '?' (0) | 2019.02.18 |
[JavaScript공부 - 10] Interaction(상호작용):alert, prompt. comfirm (0) | 2019.02.11 |
[JavaScript공부 - 9] Comparisons(비교) (0) | 2019.02.01 |
댓글