2013-07-23 3 views
5

프로그래밍 언어가 NaN 값인 이유는 무엇입니까?왜 우리는 TypeErrors를 던질 수있을 때 NaN 값이 필요합니까?

Math.floor('string'); //--> NaN 

왜 TypeError를 던지면 안되나요?

TypeError: Expected number instead of string 

자바 스크립트 내가 주로 잘 알고 언어이기 때문에 문제는 모두 태그하지만, 나는이뿐만 아니라 다른 언어에 적용 알고있다.

+0

예외가 목에 통증이 있기 때문에 :) – Pointy

+0

@ Pointy 그들을 잡는 것은 그렇게 어려운 것 같지 않습니다. –

+1

코드에서 일종의 비선형 성을 소개합니다. 그것은 너무 힘들지 않고 단지 혼란스럽고 혼란 스럽습니다. – Pointy

답변

4

입력 된 언어에서 숫자가없는 경우에도 숫자 변수에 숫자를 입력해야합니다. NaN을 넣으십시오 (JavaScript에 typeof NaN"number"입니다). 더 나은 것이 없을 때 객체 참조를위한 null과 같습니다.

지침의 흐름을 어지럽히는 예외는 모두에게 그렇게 인기가 없습니다. 어떤 사람들은 예외적 인 경우에 문자열을 숫자로 파싱 할 수 없다는 단순한 사실이 아니라 그것을 예외적 인 경우에 사용해야한다고 주장 할 수도 있습니다.

NaN은 수학적 연산의 결과 일 수 있으며 결과가 무엇인지 결정할 수없는 경우에 발생할 수 있습니다 (예 : 0 * Infinity). 모든 작업에 분기를 포함하는 것보다 NaN을 사용하여 이것을 처리하는 것이 더 간단합니다.

+0

Thanks! 흥미로운 유추를 할 수 있습니다. NaN : number :: null : object' –

+1

@Web_Designer'typeof null'은''object "'입니다. –

3

JavasScript는 약한 형식의 언어입니다. 오류 발생은 비용이 많이 듭니다. jquery 또는 밑줄을 통해 살펴보면 "예외적 인"경우에만 오류가 거의 발생하지 않는다는 것을 알 수 있습니다. NaN과 같은 값을 다루는 데 드는 비용이 적게 들고 쉽습니다.

4

많은 프로그래밍 언어에서 구현하는 IEEE 754 floating-point standard의 일부인 NaN (무한대와 같이 숫자가 아닌 다른 숫자와 마찬가지로)이 비공식적 인 것입니다.

숫자 계산의 "특수한 경우"를 계산을 방해하지 않고 정상적인 숫자처럼 평가할 수 있도록 설계되었습니다. 즉 예외는 아닙니다. 그 대신 NaN은 일반적으로 조작을 통해 전파되어 더 좋든 나쁘 든간에 상대방에서 나옵니다.

+1

그래,이 특별한 경우에는'NaN '. – Pointy

관련 문제