수 있습니다 (지금까지) 대부분의 시간 - 구문 분석하지 - 문자열을 숫자로. JS는 동적으로 입력되므로 일부 문자열은 사용자의 작업없이 숫자로만 작동합니다. 예를 들어 :
"21"/3; // => 7
"12.4"/4; // => 3.1
이 parseInt
필요 없음, 때문에 "21"
및 "12.4"
숫자는 이미 본질적으로. 문자열이 "12.4xyz"
인 경우 나눌 때 실제로는 NaN
이됩니다. 이는 숫자가 아니며 암시 적으로 캐스트되거나 강요 될 수 없기 때문입니다.
Number(someString)
으로 숫자에 문자열을 명시 적으로 "캐스팅"할 수도 있습니다.
너무 기본 10을 지원하는 동안
실제로 유효하지 않은 문자열에 대해 NaN
을 반환합니다.
그래서 JS에는 이미 암시 적/명시 적 유형의 형 변환/변환이 있기 때문에 parseInt
의 역할은 아직 다른 유형의 형변환 함수가 아닙니다.
parseInt
의 역할은 대신 구문 분석 기능입니다. 입력 내용을 이해하고 가능한 한 반환하기 위해 최선을 다하는 함수. 그것은 당신이 문자열을 가지고있을 때를위한 것입니다. 은 단지 완벽하지 않은 숫자이기 때문에 단지 캐스팅 할 수 없습니다.. (JS의 기본 문법과 마찬가지로, Apsillers의 대답이 멋지게 설명 된 것처럼 C를 연상케합니다.)
캐스팅 기능이 아닌 파서이기 때문에 10보다 다른베이스를 처리 할 수있는 추가 기능이 있습니다. . 이제
, 당신은 안녕, 그냥하지 않습니다 ... 비 밑이 10 인 숫자를 처리하는 엄격한
캐스팅 기능이없는 이유를 요청할 수 있습니다, 그리고 당신이 원하는처럼 불평,하지만. JS의 설계자는
parseInt
으로 충분할 것이라고 결정했습니다. 다시 0x63 %의 시간 동안 10 진수를 처리하기 때문입니다.
var hexString = "dsff66";
var number = eval("0x" + hexString); // attempt to interpret as a hexadecimal literal
0xdsff66
리터럴 유효한 진수가 아닌
SyntaxError
때문에 던져 which'll :
는 "캐스팅"을 얻을 수있는 가장 가까운 아마 같은 끔찍하게 해키 무언가이다.
업데이트 : Lekensteyn이 코멘트에서 지적 하듯이, JS가 나타납니다 제대로 너무 0x
-prefixed 진수 문자열을 캐스팅합니다. 나는 이것을 몰랐다, 그러나 실제로이 작동하는 것 같다 : 그것은 숫자에 16 진수 문자열을 캐스팅하는 가장 간단한 방법하게
1 * "0xd0ff66"; // => 13696870
1 * "0xdsff66"; // => NaN
- 그리고 제대로 표시 할 수없는 경우 NaN
를 얻을.
동일한 동작은 Number()
에 적용됩니다. 예를 들어 Number("0xd0ff66")
은 정수를 반환하고 Number("0xdsff66")
은 NaN
을 반환합니다.
(/업데이트) 또는
, 당신은 문자열을 사전에 확인하고 필요한 경우 NaN
를 반환 할 수 있습니다
function hexToNumber(string) {
if(!/^(0x)?[0-9a-f]+$/i.test(string)) return Number.NaN;
return parseInt(string, 16);
}
주 당신이에서는 parseInt'처럼 뭔가를 할 경우 ("2foo을", 10) '당신은'2'를 얻는다. 이것은 예상대로입니다. 그것은 첫 번째 비 숫자 문자를 구문 분석 –
* 내 생각에, 그것은 NaN을 반환해야합니다. 아무도 왜 내게 설명 할 수 있겠습니까? 불행히도 제 의견이나 본인의 의견은 중요하지 않습니다. –
'parseInt가 지정된 기수에서 숫자가 아닌 문자를 만날 경우, 그 문자와 모든 이어지는 문자를 무시하고 그 점까지 구문 분석 된 정수 값을 반환합니다.'source : https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/parseInt –