var a = parseInt("09"), b = Number(" 09");
많은 사람들은 a와 b의 값이 모두 9라고 생각하지만 실제로는 그렇지 않습니다.
parseInt의 주요 기능은 문자열을 정수로 변환하거나 십진수를 정수로 변환하는 것입니다. 일반적으로 첫 번째 매개변수만 사용합니다. 그러나 실제로는 두 개의 매개변수가 있습니다:
parseInt(string, radix)
parseInt는 다음과 같이 radix로 지정된 기준에 따라 변환됩니다:
alert(parseInt("10", 2)) // '2' 출력
radix를 지정하지 않거나 radix가 0인 경우,parseInt는 10진수로 변환됩니다. 그러나 이는 경우에 따라 약간 특별합니다.
* 문자열 값이 "0x"로 시작하면 parseInt는 16진수로 변환합니다.
* 문자열 값이 "0"으로 시작하면 처음에 ,parseInt는 8진수로 변환됩니다.
코드의 처음으로 돌아가면 "09"는 "0"으로 시작하므로,parseInt는 8진수에 따라 변환되지만 "9"는 합법적인 8진수 값이 아닙니다(8진수에는 8자리 0만 있음) -7) 이므로 변환 결과는 0입니다.
이 트랩을 방지하려면 기수를 강제로 지정할 수 있습니다.
alert(parseInt("09", 10)); // '9' 출력
다른 네티즌의 추가 댓글:
코드를 보세요:
alert(parseInt(0.000001)); 🎜>alert(parseInt(0.0000001));
첫 번째 문은 0을 출력하고 두 번째 문은 1을 출력합니다. 당황스럽습니다.
계속해서 코드를 살펴보세요:
alert(parseInt('0.000001'));
alert(parseInt('0.0000001'));
모두 0을 출력하며 이는 예상과 일치합니다.
ECMA-262 사양을 보면,parseInt는 먼저 toString 메서드를 호출합니다. 문제는 점차 명확해졌습니다.
alert( 0.000001);
alert(0.0000001);
첫 번째 문은 그대로 출력되고, 두 번째 문은 1e-7로 출력됩니다.
ECMA-262 9.8을 계속 확인하세요. 1 ToString 숫자형 1 페스티벌에 적용하다 갑자기 깨달음:
assertEquals("0.00001", (0.00001 ).toString());
assertEquals("0.000001", (0.000001).toString())
assertEquals("1e-7", (0.0000001) ).toString());
assertEquals( "1.2e-7", (0.00000012).toString())
assertEquals("1.23e-7", (0.000000123).toString()); 🎜>assertEquals("1e-8", (0.00000001 ).toString())
assertEquals("1.2e-8", (0.000000012).toString())
위는 V8 엔진 번호-tostring의 단위 테스트 스크립트입니다. ECMA 사양을 잘 해석한 것입니다.
요약: 1e-6보다 작은 값의 경우 ToString은 자동으로 과학적 표기법으로 변환합니다. 따라서 매개변수 유형이 불확실한 경우에는parseInt 메소드를 캡슐화하는 것이 가장 좋습니다:
functionparseInt2(a) {
if(typeof a === 'number') {
return Math.floor(a)
}
returnparseInt (가)
}
blueidea 위 기사:
작년 11월에 만든 것이 올해 8~9월에 갑자기 망가졌습니다.
1x분 디버깅을 해보니 드디어 ParseInt 문제
MSDN의 설명
설명
문자열을 정수로 변환합니다.
구문
parseInt(numstring, [radix])
parseInt 메서드 구문은 다음과 같습니다.
부분 설명
[numstring] 숫자로 변환할 문자열입니다.
[radix] 선택 사항입니다. numstring에 포함된 숫자의 밑수를 나타내는 2~36 사이의 값입니다. 접두사 '0x'가 있는 문자열은 16진수로 간주되고, 다른 모든 문자열은 8진수로 간주됩니다.
2005-10-08과 같이 날짜에 parsInt를 사용하세요. 정규식을 사용하여 연도, 월, 일 문자열을 풀고, 다른 용도로 사용하기 위해 parsInt를 사용하여 숫자를 디코딩합니다.
]
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]
위에는 다른데요?
"08" 문자열은 8진수로 인식되며, 8진수에는 8이 없기 때문에parseInt("08")는 0을 반환합니다.일반적으로 다음 기수를 작성하는 데는parseInt가 사용되지 않습니다.기본값은 다음과 같습니다. 십진법 이제는 모두가 더 부지런히 10을 더 써야 안전할 것 같습니다.