2012-03-09 3 views
1

다음 함수는 기본적으로 0을 반환하는 Short Circuit Operator를 사용 :이 두 번째를 반환 할 때 확실하지 않다이 함수에서 0을 반환하는 값은 무엇입니까?

function custNumParse(str){ 
    return str*1||0; 
} 

(내 말은, 나는 그것이 str*1true로 평가 될 수없는 때 알고) 하지만 나는 1를 곱하면 입력이 그 출력을 생산할 수있는 것을 확실하지 않다.

은 내가 falsish 값이 0, "", false, null, undefined, NaN을 것을 알고 있지만, 이것은 그 정도 나 도움이되지 않습니다. 즉

나는 내가 그들 모두를 테스트 할 수 있습니다 알고 등의 개체 또는 논리 값과 해당 기능을 사용할 때 무슨 일이 일어날 지 우둔,하지만 내가

어떤 아이디어를 이동하는 쉬운 방법이 확신 이 사람들을 모두 테스트하지 않고 찾아내는 가장 적절한 방법은 무엇입니까?

+0

'str을가 + 1'도'+ str'로 기록 될 수 반환합니다. –

+0

@Rocket 무엇'+ 1'? 당신은'* 1'을 의미합니까? – mithril333221

+0

그래, 나는 'str * 1'을 의미했다. 그것은 오타였다. 어쨌든'+ str'을 쓸 수 있습니다. –

답변

5

* 연산자는 숫자만을위한 것이므로 숫자가 아닌 (또는 하나로 변환 될 수없는) 연산자는 str*1을 반환합니다. NaN이됩니다. 또한 0*1 분명히 0입니다.

편집 : 논리 값은 0 또는 1 중 하나로 변환 할 것으로 보인다.

false * 1 === 0 
true * 1 === 1 

편집 2 : 문자열을 숫자 값으로도 변환됩니다

"12" * 1 === 12 
"0" * 1 === 0 

편집 3 : (그들은의 int에 다음 문자열로 변환된다) 배열에주의하십시오.

[] * 1 === 0 
[2] * 1 === 2 
[1,2] * 1 === NaN 
+0

숫자를 사용하는 부울 또는 문자열은 어떨까요? '(또는 하나로 변환 할 수 없기 때문에) 편집하십시오. 오, 알겠습니다 ... 음, 테스트를 많이 줄여 주셔서 감사합니다. D – mithril333221

+0

사실이 아닙니다. '[] * 1'은'0'을 반환합니다. 따라서 그의 질문은 여전히 ​​유효합니다. 다른 유형이 어떻게 숫자에 캐스트됩니까? 예를 들어'true * 1'은'1'입니다. –

+0

약간 잘못되었습니다. 값은'*'연산 전에 숫자로 변환됩니다 (가능하다면). –

2

답변은 타입 캐스팅입니다. str 값은 타입 변환 된 다음 곱해진다. http://www.java-samples.com/showtutorial.php?tutorialid=819

Number(false) 0 
Number(true) 1 
Number(undefined) NaN 
Number(null) 0 
Number("5.5") 5.5 
Number("56") 56 
Number("5.6.7") NaN 
Number(new Object()) NaN 
Number(100) 10 

에서 이러한 예를 참조 그래서 "5.5"*1는 사실이다.

+0

그 링크가 매우 유용합니다, 나는 조만간 저를 구할 것입니다 얼마나 많은 시간에 감동 오전 – mithril333221

+0

링크 회담 ** 자바 스크립트에서 ** 명시 적 ** typecasting. 현재 코드는 ** 암시 적으로 ** 형변환입니다. –

+0

경고를 보내 주셔서 감사합니다. 누가 '로켓'이라는 ans와 연결하여 누가 'NaN'으로 바뀔지 쉽게 알 수 있습니다. :) – mithril333221

1

자바 스크립트는 약하게 입력됩니다. 이것은 무언가를 1 씩 곱하면 그 것을 먼저 숫자로 바꾸려고 시도한다는 것을 의미합니다.

  • 숫자와 비슷한 문자열이있는 경우이를 해석하려고 시도합니다. 1을 곱하면 아무 것도하지 않으므로 그 숫자를 되 찾을 것입니다.

  • 문자열이 숫자처럼 보이지 않으면식이 실패하고 결과는 NaN이됩니다. NaN이 거짓이기 때문에, 그것은을 통해 가을 대신 0를 반환합니다.

  • 숫자로 개체를 만드는 논리적 인 방법이 없으므로 NaN으로 끝납니다.

  • 부울 값의 경우 true는 1이고 false는 0입니다.

그래서 어떤 함수가하는 것은 숫자로 인수를 해석하려고하고, 그 실패, 0

관련 문제