MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

parseInt() 함수는 문자열 아규먼트를 파싱하고, 특정 radix(진수: 수의 진법 체계에 기준이 되는 값)의 정수를 리턴합니다.

구문

parseInt(string, radix);

파라메터

string
파싱될 값. 만약 문자열이 string 이 아니면, string 으로 변환됩니다.( ToString 추상 연산을 사용하여) 문자열 내에서 맨 앞에 있는 공백은 무시됩니다.
radix
위의 언급된 문자열의 radix(진수를 나타내는 기준)를 표시하는 2와 36 사이의 정수 값. 일반적으로 사용되는 10진법에서는 10을 명시합니다. 예측 가능한 실행을 보장하고, 가독성을 위해 항상 이 파라메터를 명시하도록 합니다. 보통 radix 값이 명시되지 않았을 때 10으로 디폴트 값이 세팅되며, 다른 구현들은 다른 결과들을 만들어냅니다. 

리턴 값

주어진 문자열로부터 파싱된 정수. 만약 첫 글자가 숫자로 변환될 수 없다면, NaN 가 리턴됩니다.

설명

parseInt 함수는 첫번째 아규먼트를 문자열로 변환하고 파싱합니다. 그리고 정수나 NaN을 리턴합니다. 만약 NaN이 아니면, 특정 radix(진수) 값으로 첫번째 아규먼트를 대신하는 십진 수의 값이 리턴됩니다. 예를 들면, 10을 나타내는 radix 는 십진수를 8 (8진), 16(16진), 등등으로 변환합니다. 10 이상의 radix 값들은 9보다 큰 알파벳 글자로 나타내집니다. 예를 들면,  16 진수(16을 기준)는, A부터 F까지 통용됩니다.  

만약 parseInt 함수가 특정 진수를 나타내는 숫자가 아닌 글자를 마주치게 되면, 이 글자와 계속되는 글자들은 전부 무시되며, 파싱된 정수값을 리턴합니다. parseInt 함수는 정수값으로 숫자를 잘라버립니다. 맨 앞의 공백과 그 뒤의 공백들은 허용됩니다. 

만약 radixundefined 이거나 0이라면, (또는 없다면), JavaScript 는 아래와 같이 임의 처리합니다. :

  • 인풋 값 string 이 "0x" 나 "0X"로 시작한다면, radix 는 16(16진)이며, 나머지 문자열은 파싱됩니다.
  • 인풋 값 string 이 "0"으로 시작한다면,  radix 는 8(8진)이거나, 10(십진)입니다. 정확히 이 선택된 radix 는 구현 의존적적입니다. ECMAScript 5 는 10(십진)이 사용되는 것을 명시하지만, 모든 브라우저가 아직 이렇게 되지 않습니다. 이러한 이유로 항상 parseInt를 사용할 때는 radix 값을 명시해야 합니다.
  • 인풋 값 string 이 다른 값으로 시작 된다면, radix 는 10(십진)입니다. 

첫 번째 글자가 숫자로 변환될 수 없다면, parseInt 는 NaN을 리턴할 것입니다.

연산의 경우, NaN 값은 어떠한 radix 숫자도 아닙니다. parseInt 값이 NaN인지 알아내기 위해  isNaN 함수를 호출할 수 있습니다. 만약 NaN이 산술 연산으로 넘겨진다면, 이 연산의 결과 또한 NaN이 될 것입니다. 

특정 진수의 스트링 리터럴로 숫자를 변환하는 것은 intValue.toString(radix)를 사용합니다.

parseInt 사용하기

다음의 예제는 모두 15를 리턴합니다 :

parseInt(" 0xF", 16);
parseInt(" F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10);   // parseInt(015, 10);  13이 리턴될 것입니다.
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15*3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);

다음의 예제는 모두 NaN을 리턴합니다. :

parseInt("Hello", 8); // 전부 숫자가 아님.
parseInt("546", 2);   // 숫자는 2진법 표현이 불가능함.

다음의 예제는 모두 -15을 리턴합니다. :

parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10)
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);

다음의 예제는 모두 224를 리턴합니다. :

parseInt("0e0", 16);

radix가 없는 8진 해석

비록 ECMAScript 3 에서 권장되지 않고, ECMAScript 5 에서 금지되었지만, 많은 구현들은 0으로 시작하는 8진수 문자열을 해석합니다. 다음의 코드는 8진 결과를 가질 수도 있으며, 10진의 결과를 가질 수도 있습니다. 항상 이러한 명확하지 않은 표현은 피하고 radix를 명시하도록 합니다.

parseInt("0e0"); // 0
parseInt("08"); // 0, '8' 은 8진수가 아니다.

ECMAScript 5는 8진수 해석을 삭제하였습니다.

ECMAScript 5의 parseInt 함수 스펙은 더 이상 0 으로 시작하는 8진수 값의 문자열을 다루는 구현을 허용하지 않습니다. ECMAScript 5는 다음을 발표했습니다. :

parseInt 함수는 특정 radix(진수)값에 따라 문자열 아규먼트 내용의 해석을 하고, 그 영향을 받은 정수 값을 생성합니다. 문자열 내에서 시작되는 부분에 위치한 공백은 무시됩니다. 만약 radix 값이 정의되지 않거나, 0이라면, 이것은 10진수로 여겨집니다.  0x 이나 0X 으로 시작되는 숫자 일 때는 16진수로 여겨집니다.

ECMAScript 3 와의 차이는 8진수의 해석을 허용하고 있느냐의 차이입니다.

많은 구현들이 2013부터 이 방식을 채택하고 있지 않아 왔습니다. 오래된 브라우저는 지원되어야 하기 때문에 항상 radix 값을 명시 해야합니다. 

더 엄격한 파싱 함수

가끔은 int 값을 파싱할 때 더 엄격한 방식을 이용하는 것이유용합니다. 일반적인 표현식이 도움이 될 것입니다. :

filterInt = function (value) {
  if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value))
    return Number(value);
  return NaN;
}

console.log(filterInt('421'));               // 421
console.log(filterInt('-421'));              // -421
console.log(filterInt('+421'));              // 421
console.log(filterInt('Infinity'));          // Infinity
console.log(filterInt('421e+0'));            // NaN
console.log(filterInt('421hop'));            // NaN
console.log(filterInt('hop1.61803398875'));  // NaN
console.log(filterInt('1.61803398875'));     // NaN

스펙

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard 초기 정의.
ECMAScript 5.1 (ECMA-262)
The definition of 'parseInt' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'parseInt' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'parseInt' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) ? (Yes)
Parses leading-zero strings as decimal, not octal (Yes) 21 (Yes) (in standards mode) ? (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
Parses leading-zero strings as decimal, not octal ? ? 21 ? ? ?

참조

문서 태그 및 공헌자

 이 페이지의 공헌자: magnoliaa
 최종 변경: magnoliaa,