Reputation: 6614
if i want to test the result of an expression and the function would return NaN
how would i check that?
examples: $('amount').value.toInt()!='NaN'
^ does not work and i assume that the returned value is not a string,
$('amount').value.toInt()!=NaN
^ doesnt seem to work either and this one seems obvious
so how do i check wether the returned value is not a number?
Upvotes: 8
Views: 2132
Reputation: 32468
The NaN value is defined to be unequal to everything, including itself. Test if a value is NaN with the isNaN()
function, appropriately enough. (ECMAScript 6 adds a Number.isNan()
function with different semantics for non-number arguments, but it's not supported in all browsers yet as of 2015).
There are two built-in properties available with a NaN value: the global NaN
property (i.e. window.NaN
in browsers), and Number.NaN
. It is not a language keyword. In older browsers, the NaN
property could be overwritten, with potentially confusing results, but with the ECMAScript 5 standard it was made non-writable.
Upvotes: 37
Reputation: 4159
the best way to check the result of numeric operation against NaN is to aproach this way , example:
var x = 0;
var y = 0;
var result = x/y; // we know that result will be NaN value
// to test if result holds a NaN value we should use the following code :
if(result !=result){
console.log('this is an NaN value');
}
and it's done.
the trick is that NaN can't be compared to any other value even with it self(NaN !=NaN is always true so we can take advantage of this and compare result against itself)
this is JavaScript(a good and bizarre language)
Upvotes: 2
Reputation: 25792
Equality operator (== and ===) cannot be used to test a value against NaN. Use Number.isNaN() or isNaN() instead.
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
Upvotes: 1