[javascript] JavaScript에서 숫자가 NaN인지 어떻게 확인합니까?

Firefox의 JavaScript 콘솔에서만 시도했지만 다음 설명 중 어느 것도 true를 반환하지 않습니다.

parseFloat('geoff') == NaN;

parseFloat('geoff') == Number.NaN;



답변

이 코드를 사용해보십시오 :

isNaN(parseFloat("geoff"))

여부를 확인하기위한 어떤 값 대신 숫자, NaN의 여기를 참조 : 어떻게 자바 스크립트에서 NaN의 테스트합니까?


답변

방금 효과적인 JavaScript 라는 책 에서이 기술을 보았습니다 .

NaN은 자신과 동일하지 않은 것으로 취급되는 유일한 JavaScript 값이므로 항상 값이 동일한 지 확인하여 NaN인지 테스트 할 수 있습니다.

var a = NaN;
a !== a; // true 

var b = "foo";
b !== b; // false 

var c = undefined;
c !== c; // false

var d = {};
d !== d; // false

var e = { valueOf: "foo" };
e !== e; // false

@allsyed가 코멘트 할 때까지 이것을 깨닫지 못했지만 이것은 ECMA 사양에 있습니다 : https://tc39.github.io/ecma262/#sec-isnan-number


답변

이 코드를 사용하십시오 :

isNaN('geoff');

isNaN()MDN에 대한 문서를 참조하십시오 .

alert ( isNaN('abcd'));  // alerts true
alert ( isNaN('2.0'));  // alerts false
alert ( isNaN(2.0));  // alerts false


답변

Number 유형의 값이 값 인지 여부를 테스트하는 NaN한 전역 함수 isNaN가 작업을 수행합니다.

isNaN(any-Number);

JS의 모든 유형에 적용되는 일반적인 접근 방식의 경우 다음 중 하나를 사용할 수 있습니다.

ECMAScript-5 사용자의 경우 :

#1
if(x !== x) {
    console.info('x is NaN.');
}
else {
    console.info('x is NOT a NaN.');
}

ECMAScript-6를 사용하는 사람들 :

#2
Number.isNaN(x);

ECMAScript 5와 6에서 일관성을 유지하기 위해이 폴리 필을 Number.isNan에 사용할 수도 있습니다.

#3
//Polyfill from MDN
Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}
// Or
Number.isNaN = Number.isNaN || function(value) {
    return value !== value;
}

자세한 내용은 이 답변 을 확인 하십시오.


답변

NaN은 그렇게 테스트 할 수없는 특별한 값입니다. 내가 방금 공유하고 싶었던 흥미로운 것은

var nanValue = NaN;
if(nanValue !== nanValue) // Returns true!
    alert('nanValue is NaN');

NaN 값에 대해서만 true 를 반환하며 안전한 테스트 방법입니다. 동일한 변수가 서로 같지 않은지 테스트하는 것은 분명하지 않기 때문에 함수에 래핑되거나 주석을 달아야합니다.


답변

다음 isNaN(value)과 같은 이유로 전역 함수 호출을 사용해야합니다 .

  • 크로스 브라우저에 대응
  • 설명서는 isNaN 을 참조하십시오

예 :

 isNaN('geoff'); // true
 isNaN('3'); // false

이것이 도움이되기를 바랍니다.


답변

현재 ES6 , Object.is(..)절대 어떤지 두 값을 테스트하는 데 사용될 수있는 새로운 유틸리티이다 :

var a = 3 / 'bar';
Object.is(a, NaN); // true