앞에 0이있는 Javascript parseInt ()
Javascript의 parseInt 함수가 완전히 작동하지 않는 것 같습니다.
parseInt("01") returns 1
parseInt("02") returns 2
parseInt("03") returns 3
parseInt("04") returns 4
parseInt("05") returns 5
parseInt("06") returns 6
parseInt("07") returns 7
parseInt("08") returns 0
parseInt("09") returns 0
설명 할 수 없습니다. 시도 해봐. (jsFiddle)
편집 이 질문을하고 답한 이후, 8 진 기수의 기본값 인 "기능"은 더 이상 사용되지 않습니다. [ 1 ] [ 2 ]
숫자가 '0'으로 시작하면 8 진수 (8 진수)로 취급되기 때문입니다.
베이스를 2 번째 파라미터로 전달하여베이스를 강제 할 수 있습니다.
parseInt("09", 10) // 9
docs 에 따르면 두 번째 매개 변수는 선택 사항이지만 예제에서 볼 수 있듯이 항상 10으로 가정 하지는 않습니다 .
에 대한 호출 parseInt
은 항상 두 번째 인수에서 밑을 지정해야합니다.
parseInt("08", 10);
이전 버전의 JavaScript는 문자열 0
을 8 진수로 시작 (기본이 지정되지 않은 경우)으로 취급하며 유효한 8 진수 도 08
아닙니다 09
.
Mozilla 문서에서 :
기수가 정의되지 않거나 0이면 JavaScript는 다음을 가정합니다.
- 입력 문자열이 "0x"또는 "0X"로 시작하면 기수는 16 (16 진수)입니다.
- 입력 문자열이 "0"으로 시작하면 기수는 8 (8 진수)입니다. 이 기능은 비표준이며 일부 구현에서는 의도적으로 지원하지 않습니다 (기수 10 대신). 이러한 이유로 parseInt를 사용할 때는 항상 기수를 지정하십시오 .
- 입력 문자열이 다른 값으로 시작하면 기수가 10 (10 진수)입니다.
첫 번째 문자를 숫자로 변환 할 수 없으면 parseInt는 NaN을 반환합니다.
그리고에서 ECMAScript를 3 표준 :
기수가 0 또는 정의되지 않고 문자열의 숫자가 x 또는 X 뒤에 0이 아닌 숫자로 시작 하는 경우, 구현은 임의로 그 숫자를 8 진수 또는 10 진수로 해석 할 수 있습니다. 이 경우 숫자를 10 진수로 해석하는 것이 좋습니다.
최신 버전의 JavaScript ( ECMAScript 5 ) 는이 동작을 포기 하지만 이전 브라우저를 만족 시키 려면 기수 를 지정 해야 합니다.
기수 매개 변수가 있습니다
parseInt(value, base)
기수가 기수입니다.
이 경우 base10 (10 진) 숫자를 평가하므로
parseInt(value, 10);
이것은 새로운 브라우저에서 완전히 유효하지 않은 것 같습니다. 'parseInt ( "08")'을 실행하면 Internet Explorer 9 및 10이 8을 반환하지만 Internet Explorer 8 및 이전 버전은 0을 반환합니다 (쿼크 모드의 IE10도 0을 반환 함).
최신 버전의 Chrome도 8을 반환하므로 최근 해석을 변경해야합니다.
이 문제는 현재 더 이상 사용되지 않습니다. 그러나 기수를 사용 parseInt
하여 다른 기수를 기수 10으로 변환 할 수 있습니다. 예 :
var baseTwoNumber = parseInt('0010001', 2);
를 반환합니다 17
(의 기준 10 0010001
).
팁 : 이제 8 진으로 기본 설정이 더 이상 사용되지 않습니다. 레거시 브라우저에서 수정하는 방법은 다음과 같습니다.
// ES-5 15.1.2.2
if (parseInt('08') !== 8 || parseInt('0x16') !== 22) {
parseInt = (function (origParseInt) {
var hexRegex = /^0[xX]/;
return function parseIntES5(str, radix) {
str = String(str).trim();
if (!Number(radix)) {
radix = hexRegex.test(str) ? 16 : 10;
}
return origParseInt(str, radix);
};
}(parseInt));
}
대부분의 브라우저에서 문제가 변경된 것으로 보입니다.
Firefox 51.0.1 (64 비트)
parseInt("09") // 9
Chrome 55.0.2883.95 (64 비트)
parseInt("09") // 9
사파리 10.0 (12602.1.50.0.10)
parseInt("09") // 9
=====
권장 연습
Having said that, just to be on the safer side and to avoid issues, use the base/radix parameter as suggested in the accepted answer.
parseInt("09", 10) // 9
Extra test
I just wanted to test this as well, if the argument is not a string. Chrome & Safari gives exact result. Firefox too returns proper result, but with a warning.
parseInt(09) // 9. (Warning: SyntaxError: 09 is not a legal ECMA-262 octal constant)
참고URL : https://stackoverflow.com/questions/8763396/javascript-parseint-with-leading-zeros
'Programming' 카테고리의 다른 글
Netbeans 8.2에서 프로젝트를 작성할 수 없습니다 (0) | 2020.07.21 |
---|---|
자신 만의 STL 컨테이너 작성 (0) | 2020.07.21 |
“__attribute __ ((packed, align (4)))”의 의미는 무엇입니까 (0) | 2020.07.21 |
XSLT를 사용하여 문자열을 대문자 또는 소문자로 변환하려면 어떻게해야합니까? (0) | 2020.07.21 |
Qt 5에서 과부하 신호 및 슬롯 연결 (0) | 2020.07.21 |