NaN is a dangerous beast. NaN is a special value that means “not a number”, but in fact it is a number you can calculate with.
NaN is contagious. All calculations involving NaN fail silently, yielding NaN:
5 + NaN
makes NaN,Math.sqrt(NaN)
produces NaN. All comparisons with NaN yield false:5 > NaN
is false,5 < NaN
is also false.5 === NaN
is false,NaN === NaN
is also false.If a NaN slips into your logic, it is carried through the rest of the program until the user sees a “NaN” appearing in the interface. It is hard to find the cause of a NaN since the place where it appears can be far from the place that caused it. Typically, the cause of a NaN is an implicit type conversion. My advice is to raise the alarm as soon as you see a NaN.
Quoted content by Mathias Schäfer is licensed under CC BY-SA. See the other snippets from Robust Client-Side JavaScript.