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)