2017-02-16 1 views
4

을 감안할 때 :parseInt가 Javascript에서 배열을 제대로 테스트하지 못하는 이유는 무엇입니까?

var obj={0:21,1:22} 

var arr=[21,22] 

을하는 이유는 무엇입니까 parseInt(obj) 반환 NaN하지만 parseInt(arr) 반환 21?

나는 int, 해시 유형 object 또는 일반 array을 전달할 함수가 있습니다. 나는 parseIntobjectarray 모두에 대해 NaN을 반환 할 것으로 예상했기 때문에 인수 검사가 간단 해졌습니다. 뭐라 구요?

+1

왜'parseInt() '를 사용하고 있습니까? 필자가 사용하는 두 가지 사항은 (a) 비 기본 10 입력이고, (b) '10'부분 만 원할 때 CSS ' "10px"와 같은 알려진 형식으로 입력 문자열을 구문 분석하는 것입니다. 저는 Number ([21,22])가 NaN을 반환한다고 생각합니다. 단항 더하기 연산자 인 + [21,23]도 마찬가지입니다. – nnnnnn

+0

@nnnnnn - 왜 안 되니? 'if isNaN (parseInt (argument1)) ... '입니다. 빠르고 쉽습니다. 해가 뭐야? 나는 뒤집어 쓰고 있지 않다. 나는 진정으로 호기심이 많다. – user1167442

+0

'argument1'이 문자열''123abc ''인 경우 유효한 숫자는 아니지만'parseInt ("123abc")'는'123'을 반환합니다. 그것이 실제로 * 원하는 * 결과라면,'parseInt()'를 사용하십시오. 그러나 제 경험상 이해가되는 것은 꽤 드뭅니다 (이미 이해할 수있는 예제를 제시했습니다). 함수 인자가 * 이미 * 숫자가 아닌 (객체 나 배열이 아닌) 것을 테스트하고 싶다면'typeof' 연산자를 사용할 수 있습니다. – nnnnnn

답변

8

parseInt은 정수로 구문 분석하기 전에 첫 번째 인수를 문자열로 강제 변환하려고하기 때문입니다. String(obj)"[object Object]"을 반환하고 구문 분석 할 수 없지만 String([21,23])"21,23"을 반환합니다. 이는 parseInt이 파싱 할 수없는 문자에 도달 할 때까지 구문 분석합니다.

the parseInt spec를 참조하십시오

inputString이하자? ToString (string).

(문자열 입력에 강제 적용).

S에 기수 -R 자릿수가 아닌 코드 단위가 포함되어있는 경우 Z를 첫 번째 코드 단위 앞에 오는 모든 코드 단위로 구성된 S의 부분 문자열로 간주합니다. 그렇지 않으면, Z는

S.

하자 (-> "21" 숫자가 아닌 문자로 시작하는 문자열의 일부를 삭제, 그래서 "21,23").

+0

이것이 맞습니다. 배열의 문자열 표현은 배열 요소를 결합한 결과입니다. – undefined

+0

"parseInt가 인수를 문자열로 강제 변환하려고하기 때문에 발생합니다"? 설명서에 달리 설명되어 있습니다. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseInt – Mamun

+0

그게 전부입니다. 놀랍도록 미묘한 뉘앙스가 프로그래밍 언어 내에서 있습니다. – user1167442

관련 문제