불리언과 비교
5 == "5"는 true지만 5 === "5"는 false입니다. 등호 세 개는 양쪽의 타입이 같은지도 확인합니다.
예나 아니요로 답하는 질문
프로그램은 계속 질문을 합니다. 비밀번호가 충분히 긴가? 목숨이 다 떨어졌나? 오늘이 주말인가? 이런 질문의 답은 둘 중 하나이고, 자바스크립트는 이를 두 불리언 값 true와 false로 나타냅니다. 불리언이라는 이름은 참과 거짓의 대수를 세운 19세기 수학자 조지 불에서 왔습니다. 불리언만으로는 별일이 없어 보여도, 프로그램이 판단을 내릴 수 있는 것은 이 값 덕분입니다. 판단은 다음 단원에서 다룹니다.
비교 연산자
비교는 값 두 개를 받아 불리언 하나를 만듭니다. 가장 많이 쓰는 여섯 가지는 아래와 같습니다. 「같다」는 등호 세 개로 씁니다. 등호 하나는 이미 「값을 저장하라」라는 뜻이기 때문입니다.
| 연산자 | 질문 | 예 | 결과 |
|---|---|---|---|
| === | 같은가? | 4 === 4 | true |
| !== | 다른가? | 4 !== 4 | false |
| < | 작은가? | 3 < 8 | true |
| > | 큰가? | 3 > 8 | false |
| <= | 작거나 같은가? | 8 <= 8 | true |
| >= | 크거나 같은가? | 7 >= 8 | false |
계산처럼 비교도 식이라서 출력하거나 변수에 저장할 수 있습니다. const isAdult = age >= 18;은 나이에 따라 true나 false를 isAdult에 넣습니다. 불리언을 담는 변수 이름은 is, has, can으로 시작하는 경우가 많은데, 그러면 코드가 질문처럼 읽힙니다.
==가 아니라 ===를 쓰는 이유
자바스크립트에는 등호 두 개 ==도 있는데, 느슨한 같음이라고 합니다. 비교하기 전에 양쪽을 같은 타입으로 바꾸려고 해서 결과를 짐작하기 어렵습니다. 5 == "5"도 true이고 0 == ""도 true입니다. 등호 세 개 ===는 엄격한 같음이라 절대 타입을 바꾸지 않습니다. 타입이 다르면 그냥 false입니다. MDN과 대부분의 코드 작성 지침은 평소에 ===와 !==를 쓰라고 권하고, 이 과정도 처음부터 끝까지 그렇게 씁니다.
console.log(5 === 5); // true
console.log(5 === "5"); // false
// loose equality, best avoided:
console.log(5 == "5"); // true
console.log("cat" !== "dog"); // true문자열도 비교할 수 있습니다. ===는 두 문자열의 글자가 대소문자까지 똑같은지 확인하므로 "Yes" === "yes"는 false입니다. <와 >는 글자를 하나씩 문자 코드로 비교하는데, 소문자 낱말끼리는 사전 순서와 비슷합니다. "apple" < "banana"는 true입니다. 이 순서에서는 대문자가 모든 소문자보다 앞이라서 "Zebra" < "apple"도 true입니다.
&&, ||, !로 답 묶기
실제 질문은 여러 부분으로 되어 있는 경우가 많습니다. 놀이기구에 타려면 키가 120 cm 이상이고 나이가 8살 이상이어야 할 수 있습니다. 자바스크립트는 논리 연산자로 불리언 답을 묶습니다. &&(그리고)는 양쪽이 모두 true일 때만 true입니다. ||(또는)는 한쪽이라도 true면 true입니다. !(아님)는 불리언을 뒤집어서 !true는 false입니다.
const height = 130;
const age = 7;
console.log(height >= 120 && age >= 8); // false
console.log(height >= 120 || age >= 8); // true
console.log(!(age >= 8)); // true풀이 예시. 어떤 날이 주말인지 묻는 식은 day === "Sat" || day === "Sun"입니다. 양쪽에 day ===를 모두 써야 합니다. day === "Sat" || "Sun"은 영어 문장으로는 자연스럽지만 뜻대로 동작하지 않습니다. "Sun"만으로는 비교가 아니기 때문입니다. 비교는 &&와 ||보다 먼저 계산되므로 height >= 120 && age >= 8에는 괄호가 더 필요 없지만, 넣어도 손해는 없습니다.
나중에 만날 개념이 하나 더 있습니다. 자바스크립트는 불리언이 필요한 자리에 다른 값이 오면 몇몇 값을 false로 취급합니다. 이런 거짓 같은 값(falsy)은 false, 0, 빈 문자열 "", null, undefined, NaN입니다. 나머지는 문자열 "0"과 "false"까지 포함해 모두 true로 칩니다.
그리고 && 둘 다 참. 또는 || 하나만 참. 아님 ! 답을 뒤집음.
| 불리언 | true 또는 false |
| === | 엄격한 같음. 값과 타입이 모두 같음 |
| !== | 엄격한 다름. 같지 않음 |
| == | 느슨한 같음. 타입을 먼저 바꿈(쓰지 않기) |
| && | 그리고. 양쪽 모두 true일 때만 true |
| || | 또는. 한쪽이라도 true면 true |
| ! | 아님. true와 false를 뒤집음 |
| 거짓 같은 값(falsy) | false, 0, "", null, undefined, NaN |
- 무엇이 출력될까요?
console.log(7 > 7);- true
- false
- 무엇이 출력될까요?
console.log(7 >= 7);- true
- false
- 무엇이 출력될까요?
console.log(3 === "3");- true
- false
- 무엇이 출력될까요?
console.log(3 == "3");- true
- false
- 무엇이 출력될까요?
console.log(true && false);- true
- false
- 무엇이 출력될까요?
console.log(true || false);- true
- false
- 무엇이 출력될까요?
const x = 12; console.log(x > 10 && x < 20);- true
- false
- 무엇이 출력될까요?
console.log(!(5 > 2));- true
- false
- 무엇이 출력될까요?
console.log("Yes" === "yes");- true
- false
- 무엇이 출력될까요?
console.log("apple" < "banana");- true
- false
- 거짓 같은 값(falsy)은?
"0"0"false"
- day가 "Sat"이나 "Sun"인지 바르게 묻는 식은?
day === "Sat" || "Sun"day === "Sat" || day === "Sun"day === "Sat" && day === "Sun"
- 비교의 결과는 true나 false입니다.
- ===와 !==를 씁니다. ==는 타입을 바꿔서 헷갈리게 합니다.
- &&는 둘 다, ||는 하나만 참이면 되고, !는 뒤집습니다.
- ||와 && 양쪽에는 비교를 각각 완전히 씁니다.
- falsy 값: false, 0, "", null, undefined, NaN.