이 뭔가 사람들이 여행을 NaN
를 반환해야합니다. :-) 같은 이유에서 이것을보고있는 중 parseInt("1abc")
은 1을 반환합니다 : parseInt
은 첫 번째 유효하지 않은 문자에서 멈추고 그 지점에있는 문자를 반환합니다. 구문 분석 할 유효한 문자가 없으면 NaN
을 반환합니다.
parseInt(8, 3)
은 "8
"을 details in the spec 문자열로 변환한다는 점에 유의하십시오. 그러나 기본 3에서 한자리 숫자는 단지 0
, 1
및 2
입니다. "9"
을 8 진수로 파싱하는 것과 같습니다. 유효한 문자가 없으므로 문자는 NaN
입니다.
parseInt(16, 3)
는 않는다는
1
을 분석 할 수 있기 때문에 기부 (3)에
"16"
구문 분석을 요구하고, 그것은 그것을 분석 할 수 없기 때문에 그런 다음
6
에서 정지한다. 따라서
1
을 반환합니다.
이 질문은 많은 관심을 받고 검색 결과에서 높은 순위를 할 수 있기 때문에
, 여기에 자신의 다양한 특이성 및 응용 프로그램, 자바 스크립트의 숫자를 문자열로 변환하는 옵션의 개요가있어 (내 다른 답변에서 해제 여기) SO에 :
parseInt(str[, radix])
- 마지막에 추가 문자를 무시하고, 전체 (정수) 번호로는 할 수있는 문자열의 시작 부분만큼을 변환합니다. 따라서 parseInt("10x")
은 10
입니다. x
은 무시됩니다. 선택적인 기수 (수) 인수를 지원하므로 parseInt("15", 16)
은 21
(16 진수의 15
)입니다. 기수가없는 경우, 문자열이 0x
(또는 0X
)으로 시작하지 않는 한 10 진수로 가정합니다.이 경우 문자열을 건너 뛰고 16 진수로 가정합니다. (일부 브라우저는 0
으로 시작하는 문자열을 8 진수로 처리하는 데 사용되었지만 해당 동작이 지정되지 않았고 ES5 사양에서 specifically disallowed이었습니다. 구문 분석 가능 숫자가없는 경우는 NaN
을 반환합니다.
parseFloat(str)
- 마찬가지로 parseInt
이지만 부동 소수점 숫자는 소수점만을 지원합니다. 다시 문자열의 여분의 문자는 무시되므로 parseFloat("10.5x")
은 10.5
입니다 (x
는 무시 됨). 십진수 만 지원되므로 parseFloat("0x15")
은 0
입니다 (구문 분석이 x
에서 끝나기 때문에). 파싱 할 수있는 자릿수가없는 경우 NaN
을 반환합니다.
유니어 +
. 0x
프리픽스 = 헥스; 0o
프리픽스 = 진수 [ES2015 +] - +str
는 (예를 들면, 암시 적 변환)는 (단 자리와 소수점 = 진 부동 소수점 및 JavaScript의 표준 번호 표기를 사용하여 숫자로 전체 문자열로 변환; 일부 구현은 선도 형 0
을 8 진수로 처리하지만 엄격 모드에서는 처리하지 않습니다. +"10x"
은 x
이 이 아니기 때문에이 무시되었으므로 NaN
입니다. +"10"
은 10
, +"10.5"
은 10.5
, +"0x15"
은 21
, +"0o10"
은 8
[ES2015 +]이다. gotcha가 있음 : +""
은 0
이며, 예상대로 NaN
이 아닙니다.
Number(str)
- 정확히 암시 적 변환과 같습니다 (예 : 위의 단항 +
과 유사). 그러나 일부 구현에서는 속도가 느립니다. (그것은 중요 할 가능성이 높습니다하지 않는 것이.) the doc에서 parseInt
이 문자열을 사용합니다
>> parseInt('1foobar',3)
<- 1
것과 같은 이유로
고정 유형 지정 (또는 적어도 정수를 문자열로 암시 적으로 변환하지 않음)으로 해결할 수있는 또 다른 문제는 다음과 같습니다. P – Navin
@Navin이 것은 정적 대 동적 입력과는 아무 관련이 없습니다. 여기에있는 문제는 강한 타이핑에 비해 약합니다. –
이 질문의 제목을 보았을 때 나는 "나 때문에 아마 loljavascript"라고 생각했다. 대답을 보니 내 본능이 기본적으로 옳았다 고 판단됩니다. –