warren buffet,
Если говорить о практике - он в основном нужен чтобы условия проверяющие результаты математических операции в случае ошибки оных всегда возвращали false. Это удобно во многих случаях: не приходится писать дополнительные проверки и лишнюю обработку ошибок. Но как и с любым подобным удобством, это усложняет отладку.
Суть NaN в том, что он не равен ничему, даже самому себе.)
alert(NaN === NaN)