데브허브 | DEVHUB | Javascript "gotchas" you need to knowJavascript "gotchas" you need to know
- 원시 값의 오토박싱: JavaScript의 숫자, 문자열, 불리언 같은 원시 값은 객체가 아니지만, 메서드를 호출하면 임시적으로 객체 래퍼로 감싸지는 '오토박싱'이 발생합니다. 📦
typeof null의 "object" 반환: typeof null이 "object"를 반환하는 것은 JavaScript 엔진의 내부적인 버그로, 동등성 검사 시 주의해야 합니다. 🐛
== 대신 === 사용: == (느슨한 동등성)는 암묵적인 타입 변환(type coercion)을 수행하여 예상치 못한 결과를 초래하므로, 항상 값과 타입을 모두 엄격하게 비교하는 === (엄격한 동등성)를 사용해야 합니다. ⚖️
- 부동 소수점 정밀도 문제:
0.1 + 0.2가 0.3이 아닌 미세한 오차를 보이는 것은 이진법 기반의 컴퓨터 연산 특성 때문이며, toFixed() 같은 메서드로 해결할 수 있습니다. 🔢
this 키워드의 동적 바인딩: this의 값은 함수가 호출되는 방식(호출 사이트)에 따라 동적으로 결정되며, call, apply, bind 메서드를 통해 명시적으로 바인딩할 수 있습니다. 🎯
- 클래스는 프로토타입의 문법적 설탕: ES6의
class는 다른 언어의 클래스와 달리 JavaScript의 프로토타입 기반 상속과 생성자 함수를 더 쉽게 사용할 수 있도록 하는 문법적 설탕입니다. 🍬
- Date 객체의 예측 불가능한 동작: Date 객체는 변경 가능하고(mutable), 날짜 형식에 따라 UTC와 로컬 시간을 다르게 해석하며, 월 인덱스가 0부터 시작하고, 유효하지 않은 날짜를 자동 보정하는 등 다양한 '함정'이 있습니다. 🗓️