js parseInt 의 함정 분석 소결

2699 단어 parseInt함정.
4.567913.많은 사람들 이 a 와 b 의 값 이 모두 숫자 9 라 고 생각 하지만 사실은 그렇지 않다.parseInt 의 주요 역할 은 문자열 을 정수 로 바 꾸 거나 소 수 를 정수 로 바 꾸 는 것 이다.일반적인 상황 에서 우 리 는 그것 의 첫 번 째 매개 변수 만 사용한다.그러나 실제 적 으로 두 개의 인자 가 있 습 니 다.parseInt(string,radix)parseInt 는 radix 가 지정 한 진법 에 따라 전환 합 니 다.예 를 들 어
 
var a = parseInt("09"), b = Number("09");
radix 나 radix 를 0 으로 지정 하지 않 은 상황 에서 parseInt 은 10 진법 으로 전환 합 니 다.그러나 이것 은 어떤 경우 에 약간 특수 합 니 다.*string 의 값 이'0x'로 시작 하면 parseInt 는 16 진법 으로 전환 합 니 다.*string 의 값 이"0"으로 시작 하면 parseInt 는 8 진법 으로 변 환 됩 니 다.다시 시작 하 는 코드 는'09'가'0'으로 시작 하기 때문에 parseInt 는 8 진법 으로 전환 하지만'9'는 합 법 적 인 8 진법 값(8 진법 은 0-78 개의 숫자 만 있 음)이 아니 기 때문에 전환 결 과 는 0 이다.이 함몰 을 피 하려 면 radix:
 
alert(parseInt("10", 2)); // outputs '2'
다른 네티즌 들 의 보충 을 강제 적 으로 지정 할 수 있 습 니 다.코드 보기:
 
alert(parseInt("09", 10)); // outputs '9'
첫 번 째 문 구 는 0,두 번 째 문 구 는 1,28617.코드 를 계속 볼 수 있 습 니 다
 
alert(parseInt(0.000001));
alert(parseInt(0.0000001));
모두 0 을 출력 해 야 기대 에 부 합 됩 니 다.ECMA-262 규범 을 보면 parseInt 에서 먼저 toString 방법 을 호출 합 니 다.문 제 는 점점 뚜렷 해 졌 다
 
alert(parseInt('0.000001'));
alert(parseInt('0.0000001'));
첫 번 째 문 구 는 원래 의 출력 이 고 두 번 째 문 구 는 1e-7 을 출력 한다.ECMA-262 9.8.1 ToString Applied to the Number Type 1 절 을 계속 뒤 져 보면 문득 깨 달 았 다
 
alert(0.000001);
alert(0.0000001);
위 는 V8 엔진 number-tostring 의 단원 테스트 스 크 립 트 로 ECMA 규범 을 잘 해석 했다.소결:1e-6 이하 의 수치 에 있어 서 ToString 은 자동 으로 과학 계수 법 으로 변 환 됩 니 다.따라서 parseInt 방법 은 매개 변수 유형 이 불확실 할 때 한 층 포장 하 는 것 이 좋 습 니 다. [radix]) The parseInt method syntax has these parts: Part Description [numstring] Required. A string to convert into a number. [radix] Optional. A value between 2 and 36 indicating the base of the number contained in numstring. If not supplied,strings with a prefix of'0x'are considered hexidecimal and strings with a prefix of'0'are considered octal.All other strings are considered decimal.parseInt 는 날짜 에 있 습 니 다.예 를 들 어 2005-10-08 은 정규 로 년 월 일 문자열 을 풀 고 parseInt 로 숫자 를 풀 어 다른 용도 로 사용 합 니 다.alert(parseInt("08")[Ctrl+A 전체 선택:]alert(parseInt("08",10))[Ctrl+A 전체 선택:]위 에 보 이 는 것 이 다 릅 니까?"08"문자열 은 8 진법 으로 인식 되 었 습 니 다.parseInt("08")은 0 으로 나 왔 습 니 다.8 진법 은 8 이 없 기 때문에 보통 parseInt 로 뒤의 radix 를 쓰 지 않 습 니 다.기본적으로 10 진법 입 니 다.지금 보 니 부지런 하고 10 을 더 써 야 안전 합 니 다.

좋은 웹페이지 즐겨찾기