JS 디버깅 — TypeError를 두려워하지 마라

빨간 오류 메시지는 적이 아니라 안내문입니다

10초 핵심 요약

01

오류 3종 구분하기

TypeError

존재하지 않는 것(null)의 속성에 접근하려 함. "그 요소를 못 찾았다"는 뜻일 때가 많습니다.

ReferenceError

한 번도 선언되지 않은 변수를 사용하려 함. 오타일 확률이 높습니다.

SyntaxError

문법 자체가 틀림. 괄호나 중괄호 짝이 안 맞을 때 흔합니다.

02

TypeError 진단 3단계

Day 7에서 배운 querySelector가 요소를 못 찾으면 null을 반환하고, 그 null에 .classList 같은 속성을 붙이려는 순간 TypeError가 납니다.

1Console 빨간 줄번호를 클릭해 문제 코드로 이동
2그 줄의 querySelector 안 선택자를 확인
3Elements 탭에서 그 클래스가 실제로 존재하는지 확인
script 위치가 원인일 수도 있습니다 — script를 <head>에 두면 <body> 요소가 아직 만들어지기 전에 실행되어 무조건 null이 됩니다. Day 7에서 배운 대로 </body> 위나 defer를 쓰세요.
03

console.log로 흔적 남기기

const btn = document.querySelector('.toggle-btn');
console.log('btn:', btn); // null이면 여기서 이미 문제 발견
화면에 표시된 텍스트를 JS로 읽고 싶다면 .textContent를 씁니다. 예) document.querySelector('.title').textContent는 실제로 화면에 그려진 제목 텍스트를 가져옵니다.
04

Day 24 완료 체크리스트

TypeError/ReferenceError/SyntaxError를 구분해 설명할 수 있다.
일부러 오타를 내서 TypeError를 발생시키고 Console로 원인을 찾는 연습을 3회 반복했다.
안 될 때 확인하세요 오류 메시지는 무서운 게 아니라 "어디가 문제인지 알려주는 안내문"입니다. 빨간 줄을 그대로 복사해서 검색하거나 AI에게 물어보면 됩니다 — 이 오류를 외울 필요는 전혀 없습니다.
스스로 설명해보기 — querySelector가 null을 반환했는데 그 값에 .classList를 붙이면 왜 TypeError가 나는지 설명할 수 있나요?

오늘의 용어

TypeError
존재하지 않는 값(주로 null)의 속성에 접근하려 할 때 나는 오류
ReferenceError
선언된 적 없는 변수를 사용하려 할 때 나는 오류
.textContent
요소 안의 텍스트 내용을 JS로 읽어오는 속성