Contents
see ListJavaScript 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)