JavaScript에서 다음을 실행하십시오.
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
난 그냥 자바 스크립트가 앞에 0이 표시 생각하는 것을 어렵게 배운 진수 정수를 , 더 있기 때문에 "8"
또는 "9"
기본-8, 함수는 0을 반환하지합니다. 좋든 싫든, 이것은 의도적으로 설계된 것 입니다.
해결 방법은 무엇입니까?
참고 : 완전성을 위해 솔루션을 게시하려고하지만 싫어하는 솔루션이므로 다른 답변을 게시하십시오.
최신 정보:
자바 스크립트 표준 5 판 ( ECMA-262 )에는이 동작을 제거하는 주요 변경 사항이 도입되었습니다. 모질라는 글을 잘 쓴다 .
답변
이것은 간단한 해결책을 가진 일반적인 자바 스크립트입니다.
다음과 같이 base 또는 ‘radix’를 지정하십시오 .
parseInt('08',10); // 8
Number 를 사용할 수도 있습니다 .
Number('08'); // 8
답변
값이 부호있는 32 비트 정수 범위에 있음 을 알고 있으면 ~~x
모든 시나리오에서 올바른 작업을 수행합니다.
~~"08" === 8
~~"foobar" === 0
~~(1.99) === 1
~~(-1.99) === -1
이진 ( ~
)을 찾지 않으면 스펙은 Int32 로의 명백한 변환을 수행하고 NaN
값을 0 으로 강제하도록 지정된 인수에 대해 “ToInt32″변환이 필요합니다 .
예, 이것은 엄청나게 해킹 적이지만 매우 편리합니다 …
답변
로부터 으로 parseInt 문서 , 밑이 10 인 지정 옵션 기수 인수를 사용합니다 :
parseInt('08', 10); //equals 8
parseInt('09', 10); //equals 9
이것은 나를 혼란스럽고 혼란스럽고 장황하게 표현합니다 (실제로 모든 단일 구문 분석에서 추가 인수입니까?).
답변
function parseDecimal(s) { return parseInt(s, 10); }
편집 : 당신이 정말로 원하는 것을하기 위해 자신의 함수를 만드는 것은 parseInt () 호출에 항상 “, 10″을 추가하고 싶지 않다면 옵션 일뿐입니다. 비표준 기능이라는 단점이 있습니다. 많이 사용하면 더 편리하지만 다른 사람들에게는 더 혼란 스럽습니다.
답변
베이스를 지정하십시오.
var number = parseInt(s, 10);
답변
parseInt에 두 번째 매개 변수가 없으면 십진수로 가정하는 버전으로 바꾸는 것이 매우 좋지 않을까요? (참고-테스트되지 않음)
parseIntImpl = parseInt
parseInt = function(str, base){return parseIntImpl(str, base ? base : 10)}
답변
parseFloat 또는 parseInt를 사용하는 대신 단항 연산자 ( + )를 사용할 수도 있습니다.
+"01"
// => 1
+"02"
// => 2
+"03"
// => 3
+"04"
// => 4
+"05"
// => 5
+"06"
// => 6
+"07"
// => 7
+"08"
// => 8
+"09"
// => 9
그리고 좋은 측정을 위해
+"09.09"
// => 9.09
단항 더하기 연산자는 피연산자 앞에 오며 피연산자로 평가되지만 숫자가 아닌 경우에는 피연산자로 변환하려고 시도합니다. 단항 부정 (-)도 숫자가 아닌 숫자를 변환 할 수 있지만, 단항 더하기는 숫자 에서 다른 연산을 수행하지 않기 때문에 무언가를 숫자로 변환하는 가장 빠르고 선호되는 방법입니다 .