Contents
see List작성일 2017. 11. 30.
JavaScript parseInt vs Number 비교
문자열을 숫자로 변환할 때 parseInt()와 Number() 중 어떤 것을 사용해야 할까요? 두 함수의 차이점과 적절한 사용 시나리오를 알아봅니다.
1. 기본 동작 비교
// 정상적인 숫자 문자열
parseInt("123"); // 123
Number("123"); // 123
// 소수점
parseInt("3.14"); // 3 (정수 부분만)
Number("3.14"); // 3.14 (소수점 유지)
// 공백
parseInt(" 42 "); // 42
Number(" 42 "); // 42
// 앞에 0
parseInt("007"); // 7
Number("007"); // 7
2. 주요 차이점
// 혼합 문자열
parseInt("123abc"); // 123 (숫자까지만 파싱)
Number("123abc"); // NaN (전체가 숫자가 아니면 NaN)
// 빈 문자열
parseInt(""); // NaN
Number(""); // 0
// null
parseInt(null); // NaN
Number(null); // 0
// undefined
parseInt(undefined); // NaN
Number(undefined); // NaN
// true/false
parseInt(true); // NaN
Number(true); // 1
parseInt(false); // NaN
Number(false); // 0
// 배열
parseInt([10]); // 10
Number([10]); // 10
parseInt([1,2]); // 1
Number([1,2]); // NaN
3. parseInt의 진법(radix) 매개변수
// 반드시 2번째 인자로 진법 지정 권장
parseInt("10", 10); // 10 (10진수)
parseInt("10", 2); // 2 (2진수)
parseInt("10", 8); // 8 (8진수)
parseInt("10", 16); // 16 (16진수)
parseInt("ff", 16); // 255
parseInt("1010", 2); // 10
// 진법 미지정 시 주의
parseInt("08"); // 8 (ES5 이후)
parseInt("08", 10); // 8 (명시적 - 권장)
4. 성능 비교
// 단항 + 연산자가 가장 빠름
const str = "123";
+str; // 123 (가장 빠름)
Number(str); // 123 (중간)
parseInt(str, 10); // 123 (느림)
// 단 + 연산자는 가독성 낮음
const value = +"42"; // 42
5. 사용 시나리오
| 상황 | 권장 함수 | 이유 |
|---|---|---|
| 정수 변환 | parseInt(str, 10) | 소수점 버림, 부분 파싱 |
| 소수점 유지 | Number() 또는 parseFloat() | 소수점 보존 |
| 엄격한 변환 | Number() | 유효하지 않으면 NaN |
| 16진수 변환 | parseInt(str, 16) | 진법 지원 |
| 성능 중요 | +str | 가장 빠름 |
6. 안전한 변환 패턴
// 정수 변환
function toInt(value) {
const num = parseInt(value, 10);
return isNaN(num) ? 0 : num;
}
// 숫자 변환
function toNumber(value) {
const num = Number(value);
return isNaN(num) ? 0 : num;
}
// 유효성 검사 포함
function parseIntSafe(value) {
if (typeof value === "number") return Math.floor(value);
if (typeof value !== "string") return NaN;
return parseInt(value.trim(), 10);
}
요약
- 소수점 필요: Number() 또는 parseFloat()
- 정수만 필요: parseInt(str, 10)
- 진법 변환: parseInt(str, radix)
- 엄격한 검증: Number() (부분 숫자는 NaN)
javascript
| No | 작성일 | Title |
|---|---|---|
| 3384 | 2026. 08. 21. | Node.js API에서 요청 취소를 제대로 처리하는 방법: AbortSignal로 외부 작업 정리하기 |
| 3352 | 2026. 08. 13. | Node.js 응답이 간헐적으로 느릴 때: 이벤트 루프 지연 측정과 CPU 작업 분리 방법 |
| 3320 | 2026. 08. 04. | JavaScript fetch 요청을 안전하게 만드는 방법: timeout·재시도·오류 처리 실전 패턴 |
| 3288 | 2026. 07. 27. | Node.js 서버 무중단 배포를 위한 Graceful Shutdown 구현 가이드 |
| 3257 | 2026. 07. 19. | Node.js 대용량 파일 처리 가이드: 스트림과 backpressure로 메모리 사용량 제어하기 |
| 3232 | 2026. 07. 11. | Node.js 실무형 에러 처리: async/await에서 실패를 일관되게 분류하고 복구 속도 높이기 |
| 3174 | 2026. 07. 02. | Node.js 환경 변수 검증 가이드: process.env를 안전한 설정 객체로 바꾸기 |
| 3123 | 2026. 06. 24. | TypeScript 타입 좁히기 운영 가이드: unknown 입력을 안전한 도메인 객체로 바꾸기 |
| 3065 | 2026. 06. 16. | 브라우저 성능 병목 찾기: PerformanceObserver로 LCP·INP·긴 작업 로그 수집하기 |
| 2978 | 2026. 06. 08. | Node.js fetch 타임아웃과 재시도 설계: 외부 API 장애 전파 줄이기 |