Баланс nan что это значит
Полезный NaN
О NaN больше всего известно то, что он не равен самому себе.
И что операции, невозможные арифметически, вернут NaN.
Но у NaN есть одно мало известное(?), и, как мне кажется, весьма полезное применение.
TL;DR Все дело в Date
Чем полезно? Invalid Date все равно Date. И все операции с Date все ещё на месте.
Любые операции с Date, кроме прямой установки timestamp вернут NaN, оставив Date как Invalid Date.
При этом, проверка на валидность даты становится проще некуда
Заметьте, преобразование в timestamp здесь не требуется, valueOf() делает это под капотом.
Все операции с Date — мутабельные. Тем не менее, клонирование через конструктор прекрасно работает и с Invalid Date.
Сравнение двух дат напрямую в Date не реализовано и сравнивать даты можно только через timestamp. NaN гарантирует что Invalid Date точно не будет равно никакой другой дате. Думаю, это весьма полезное свойство.
К моему сожалению, конструктор Date ведёт себя несколько странно по отношению к входному параметру.
Было бы намного логичнее конструировать Invalid Date, ведь null — это не совсем ноль. Оставим это на совести Javascript-а.
Однако, если насильственно передать в конструктор undefined, то результат выглядит ожидаемым. Так что будьте осторожны.
Статья получилась больше о Date чем о NaN, но, в целом, именно об этой связке я хотел рассказать.