연산자와 비교


쇼핑 카트를 관리하는 상황을 생각해봅시다. 가격을 더하고, 할인을 적용하고, 총액이 무료 배송 기준을 넘었는지 확인하고, 카트가 비어 있을 때 경고를 보여줄지 결정합니다. 이 모든 과정마다 연산자가 작동하고 있습니다. 연산자는 하나 또는 두 개의 값을 받아 새로운 값을 만들어내는 기호입니다. 이 장에서는 숫자를 계산하는 것부터 값을 비교하고 참·거짓 판단을 조합하는 것까지, 늘 사용하게 될 연산자들을 다룹니다.
산술 연산자와 대입 연산자
**산술 연산자**는 이미 알고 있는 계산을 그대로 수행합니다. +는 더하고, -는 빼고, *는 곱하고, /는 나눕니다. 하나 더 낯설 수 있는 연산자가 있는데, 나눗셈의 나머지를 구하는 %(나머지 연산자)입니다.
const total = 8 + 5; // 13
const change = 20 - 13; // 7
const leftover = 17 % 5; // 2, 5가 17에 세 번 들어가고 2가 남음
console.log(total); // 13어떤 값을 자기 자신을 기준으로 갱신하고 싶을 때 쓸 수 있는 축약형이 있습니다. score = score + 10이라고 쓰는 대신 score += 10이라고 쓸 수 있습니다. 의미는 같습니다. 현재 값을 가져와 10을 더한 다음 그 결과를 다시 저장하는 것입니다.
let score = 100;
score += 10; // score는 이제 110
score -= 30; // score는 이제 80
console.log(score); // 80숫자를 정확히 1만큼 올리거나 내리고 싶다면 ++와 --로 한 번에 처리할 수 있습니다. count++는 1을 더하고, count--는 1을 뺍니다.
let lives = 3;
lives--; // lives는 이제 2
console.log(lives); // 2%만 추가됩니다. 어떤 값을 자기 자신을 기준으로 갱신할 때는 축약형을 쓰세요: score = score + 10 대신 score += 10입니다. 그리고 ++나 --는 숫자를 1만큼 올리거나 내립니다. 처음엔 익숙해지는 데 시간이 걸렸지만, 결국 같은 계산을 더 짧게 쓴 것일 뿐입니다. 비교 연산자
**비교**는 두 값에 대해 질문을 던지고 true 또는 false로 답합니다. 이 참·거짓 답이 바로 불리언이고, 프로그램은 이 값을 이용해 이후에 어떤 결정을 내립니다.
가장 자주 쓰게 될 비교는 ===로, "이 두 값이 정확히 같은가?"를 묻습니다.
const answer = 42;
console.log(answer === 42); // true
console.log(answer === 7); // false그 반대는 !==로 "이 두 값이 다른가?"를 묻습니다. 순서를 비교할 때는 <, >, <=, >=가 있으며, 수학에서와 똑같이 작동합니다. 작다, 크다, 작거나 같다, 크거나 같다는 의미입니다.
const age = 18;
console.log(age >= 18); // true
console.log(age !== 21); // true비교는 항상 ===로 하고, ==는 쓰지 마세요. 등호 두 개짜리 버전에는 사람들을 놀라게 하는 특이한 동작이 있는 반면, 등호 세 개짜리 버전은 매번 예상한 대로 동작합니다.
true나 false로 답합니다. 동등 비교에는 ===를, "다르다"에는 !==를, 순서 비교에는 <, >, <=, >=를 씁니다. ===를 지키고 ==는 건너뛰세요. 등호 두 개짜리는 놀라운 함정이 있지만, 세 개짜리는 얌전하게 동작합니다. 논리 연산자와 참·거짓 판별
한 번에 여러 비교를 결합해야 할 때가 자주 있습니다. **논리 연산자**가 바로 그 역할을 합니다: &&(그리고), ||(또는), !(부정)입니다.
&&는 양쪽이 모두 true일 때만 true입니다. ||는 양쪽 중 하나라도 true이면 true입니다. !는 불리언을 반대로 뒤집습니다.
const age = 20;
const hasTicket = true;
console.log(age >= 18 && hasTicket); // true, 둘 다 true
console.log(age < 13 || hasTicket); // true, 한쪽만 true면 충분
console.log(!hasTicket); // false, 뒤집힘이와 관련된 개념으로 **참(truthy)과 거짓(falsy)**이 있습니다. 참·거짓을 판별하는 상황에서 자바스크립트는 불리언이 아닌 일부 값도 false처럼 취급합니다. 거짓으로 취급되는 값은 false, 0, ""(빈 문자열), null, undefined, NaN입니다. 그 외의 모든 값은 참으로 취급됩니다.
const name = "";
console.log(!name); // true, 빈 문자열은 거짓으로 취급됨&&는 "둘 다", ||는 "둘 중 하나", !는 불리언을 뒤집습니다. 여기에 더해 자바스크립트는 일부 값을 거짓처럼 취급합니다: false, 0, "", null, undefined, NaN이 거짓 값이고, 그 외는 모두 참입니다. 이 덕분에 !name이 "이름이 입력되지 않았다"는 의미가 될 수 있는 것입니다. 연산자, 그다음은 무엇일까요
연산자는 이 언어의 동사와 같습니다. 저장해둔 값을 받아 결과와 결정으로 바꿔줍니다. 산술 연산자는 새로운 숫자를 만들고, 비교 연산자는 불리언을 만들고, 논리 연산자는 그 불리언들을 조합해 프로그램이 행동할 예/아니오 답을 만들어냅니다.
이 불리언 값들은 그 자체로는 큰 역할을 하지 못합니다. 다음 단계는 이 값을 이용해 코드의 흐름을 조종하는 것입니다. 검사가 통과하면 한쪽 분기를 실행하고 실패하면 다른 쪽을 실행하는 방식인데, 이것이 바로 조건문 장에서 다루는 내용입니다. 여기서 등장한 값들이 조금 헷갈렸다면, 데이터 타입 장에서 숫자, 문자열, 불리언을 제대로 다룹니다.

