티스토리 뷰
논리 연산자
자바스크립트는 다음과 같은 기준으로 true와 false를 나눈다.
1 2 3 4 5 6 | var f1 = null; // !null returns true var f2 = 0; // !0 returns true var f3 = NaN; // !NaN returns true var f4 = ""; // !"" returns true var f5 = ''; // !'' returns true var f6 = undefined; // !undefined returns true | cs |
1. && (논리 곱)
두 피연산자가 모두 true 이면 true를, 그 외는 false를 반환
1 2 3 4 5 6 7 | var a1 = true && true; // t && t returns true var a2 = true && false; // t && f returns false var a3 = false && true; // f && t returns false var a4 = false && (3 == 4); // f && f returns false var a5 = "Cat" && "Dog"; // t && t returns Dog var a6 = false && "Cat"; // f && t returns false var a7 = "Cat" && false; // t && f returns false | cs |
2. || (논리 합)
두 피연산자 중 하나라도 true 이면 true를, 그 외는 false를 반환
1 2 3 4 5 6 7 | var o1 = true || true; // t || t returns true var o2 = false || true; // f || t returns true var o3 = true || false; // t || f returns true var o4 = false || (3 == 4); // f || f returns false var o5 = "Cat" || "Dog"; // t || t returns Cat var o6 = false || "Cat"; // f || t returns Cat var o7 = "Cat" || false; // t || f returns Cat | cs |
간단(하지만 강력)한 활용
논리 연산자에는 다음과 같은 강력한 기능이 있다.
1 2 3 | // Short-circuit evaluation(단축 계산) var s1 = false && 'anything'; // var s1 = false; var s2 = true || 'anything'; // var s2 = true; | cs |
논리 연산자의 연산 우선순위는 왼쪽에서 오른쪽이고, 앞의 조건이 일치하면 뒤의 조건을 검사하지 않는 특징으로 인해 위의 사례에선 'anything' 부분에 어떤 값이 오더라도 논리 연산자는 이를 검사하지 않는다.
따라서, 주석으로 표시한 것처럼 뒷부분을 생략해도 완전히 동일한 표현이 된다.
이 때문에, 조건문에서 논리 연산을 사용할 땐 피연산자의 순서를 효율적으로 배치하여 불필요한 연산을 줄이기도 한다.
이제, 자바스크립트에서 이런 특징을 활용하여 간단하지만 강력한 사용법을 살펴보도록 하자.
1. || (논리 합)을 이용한 단축 계산
1 2 3 4 5 | function documentTitle(theTitle) if (!theTitle) { theTitle = "Untitled Document"; } } | cs |
theTitle이라는 변수를 입력받고, 값이 없다면 "Untitled Document"를 넣어주는 함수가 있다.
1 2 3 | function documentTitle(theTitle) theTitle = theTitle || "Untitled Document"; } | cs |
||의 특징을 활용하면, 앞의 피연산자가 true일 경우 뒤의 피연산자를 체크하지 않기 때문에 if 문을 생략하고 간단히 표현이 가능하다.
2. && (논리 곱)을 이용한 단축 계산
1 2 3 4 5 6 7 8 | function isAdult(age) { if (age && age > 17) { return true; } else { return false; } } | cs |
age를 입력받아서, age의 값이 있고 17살 이상인 경우 true, 그 외에는 false를 리턴하는 함수가 있다.
1 2 3 | function isAdult(age) { return age && age > 17 ; } | cs |
&&의 특징을 활용하면, age의 값이 입력되지 않는다면 17보다 큰지 비교할 필요가 없으므로 age를 먼저 배치하였고, 두 조건 모두 일치하면 true를, 아니면 false를 리턴하도록 간단히 표현이 가능하다.
3. 조건문 활용(1)
1 2 3 4 5 6 | if (userName) { logIn (userName); } else { signUp (); } | cs |
userName의 값이 있다면 logIn, 없다면 signUp을 하는 함수가 있다.
1 | userName && logIn (userName) || signUp (); | cs |
이 경우 userName의 값이 없다면 &&의 특성상 logIn(userName)은 체크하지 않고 바로 || 뒤의 signUp으로 넘어갈 것이고, 반대로 값이 있다면 logIn(userName)까지 모두 true가 되므로 ||의 특성상 뒤의 signUp은 체크하지 않게 된다.
4. 조건문 활용(2)
1 2 3 4 5 6 7 | var userID; if (userName && userName.loggedIn) { userID = userName.id; } else { userID = null; } | cs |
userName이라는 객체가 존재하고 loggedIn 프로퍼티가 존재한다면, userName의 id 프로퍼티의 값을 userID 변수에 넣어주고, 없다면 null로 선언하는 함수가 있다.
1 | var userID = userName && userName.loggedIn && userName.id | cs |
&&의 특성을 반영하여 한 줄로 표현이 가능한데, 이 경우 앞의 피연산자들이 모두 true일 경우 가장 마지막의 피연산자(문자열)의 값을 변수에 저장하게 된다.
5. 변수와 문자열
1 2 | var a5 = "Cat" && "Dog"; // t && t returns Dog var o5 = "Cat" || "Dog"; // t || t returns Cat | cs |
위에서 살펴봤던 논리 연산자의 예시 중 두 문자열을 비교했던 케이스를 가져와봤다.
문자열에 값이 있으므로 두 피연산자 모두 true가 되는데, 이때 변수에 저장되는 값은 각 연산자의 특징을 생각하면 쉽게 알 수 있다.
&& 연산자는 피연산자가 true 이면 다음 피연산자를 체크하기 때문에 마지막 문자열 "Dog"가 변수에 저장된다.
반대로, || 연산자는 피연산자가 true가 되면 다음 피연산자를 체크하지 않기 때문에 첫 번째 문자열 "Cat"이 변수에 저장된다.
출처
'dev > javascript' 카테고리의 다른 글
[ES6]변수 선언 방식 - const, let (0) | 2018.11.05 |
---|
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Nasdaq
- 스타벅스
- controller
- 스프링
- 맛집
- 세번가요
- 자작냉우동
- 커피프렌즈
- 주식
- 변수
- 환전
- 화려해
- 교환코드
- JMT
- sbux
- 루블
- 설정
- MVC
- AFK아레나
- spring
- 내돈돌려줘
- 두번가요
- MariaDB
- 블라디보스톡
- 쏠편한환전
- Tomcat
- 꿈의숫자
- 이클립스
- Java
- mybatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함