Day 2연산자와 제어 흐름

오늘은 state 명령이 온도 65°C/80°C를 보고 경고할지 말지 결정하는 그 로직을 JS로 직접 짠다.

1. 비교 — ===를 쓴다

규칙: ==는 타입을 강제 변환한 뒤 비교해서 "65" == 65true가 되는 등 사고를 친다. 항상 ===/!==만 쓴다.
"65" == 65    // true  — 함정
"65" === 65   // false — 이게 정상
NaN === NaN   // false — NaN은 자기 자신과도 다르다, Number.isNaN(x)로 확인

2. 조건문과 삼항 연산자

const temp = 71.4;

if (temp >= 80) {
  console.log("위험");
} else if (temp >= 65) {
  console.log("경고");
} else {
  console.log("정상");
}

// 값 하나를 결정할 때는 삼항 연산자가 더 간결하다
const label = temp >= 65 ? "경고" : "정상";

3. 논리 연산자의 실전 용법

Rust의 Option처럼 JS에선 &&/||/??로 기본값·가드를 처리한다.

const name = userInput || "익명";           // userInput이 falsy(빈 문자열,0,null,undefined)면 대체
const count = userCount ?? 0;                 // null/undefined일 때만 대체 (0은 유효한 값으로 인정)
isConnected && sendPing();                     // 참일 때만 실행 (가드)

// 흔한 함정: 0은 falsy라서 || 를 쓰면 의도치 않게 덮어써진다
const retries = 0;
retries || 3     // 3  ← 의도와 다름 (0인데 3으로 바뀜)
retries ?? 3     // 0  ← ??는 이 경우 원하는 대로 동작

4. 반복문

const temps = [52.3, 67.8, 81.2, 60.0];

for (let i = 0; i < temps.length; i++) {
  console.log(temps[i]);
}

for (const t of temps) {   // 인덱스 필요 없으면 이게 더 깔끔
  console.log(t);
}

let i = 0;
while (i < temps.length) {
  i++;
}
for...in은 객체의 key를 순회할 때 쓰는 것이고 배열엔 쓰지 않는다 (순서 보장 안 됨, 상속된 프로퍼티까지 나올 수 있음). 배열은 for...of 또는 배열 메서드(Day 5)를 쓴다.

🎯 실습 과제 — _submissions/day02.js

과제 1. 온도 상태 판별기

function tempStatus(celsius) {
  // TODO: 80 이상 "위험", 65 이상 "경고", 그 외 "정상" 리턴
}
// tempStatus(52.3) → "정상"
// tempStatus(71.4) → "경고"
// tempStatus(82.0) → "위험"

과제 2. 로그 스캔
아래 배열을 순회해서 "정상"/"경고"/"위험" 각각 몇 개인지 세는 countByStatus(temps) 함수를 작성한다. { 정상: n, 경고: n, 위험: n } 형태의 객체를 리턴해야 한다.

const temps = [52.3, 67.8, 81.2, 60.0, 65.0, 79.9, 90.1];
// countByStatus(temps) → { 정상: 2, 경고: 3, 위험: 2 }

과제 3. 안전한 기본값
getReading(sensor) 함수를 작성한다: sensor 객체에 value 프로퍼티가 있으면 그 값을, null/undefined0을 리턴한다. (힌트: ?? 사용, 0이 유효한 온도값일 수 있다는 점에 주의)

// getReading({ value: 0 })    → 0   (falsy지만 유효한 값이므로 그대로)
// getReading({ value: 45.2 }) → 45.2
// getReading({})                → 0   (value 자체가 없음)

과제 4 (도전). FizzBuzz 변형
1부터 20까지 순회하면서: 5의 배수면 "점검", 3의 배수면 "측정", 둘 다 배수면 "점검+측정", 아니면 숫자 그대로를 배열에 담아 리턴하는 maintenanceSchedule() 함수를 작성한다.

✅ 다 작성했으면:
cd ~/Documents/javascript-2주완성
bun _grade.ts day02