Comments 32
Такое «магическое» поведение может зависеть от браузера, может поменяться внезапно в каком-то браузере или еще чего.
да нет здесь никакой магии, конструктор принимает число, а NaN
— число
приведение типов также работает предсказуемо и ожиданно
в исходниках momentjs используют подобную конструкцию
статья лишь напоминает, переходящим с php и других языков, с чуть другой логикой, что в javascript есть особые числа — Infinity
, NaN
и методы для работы с числами isFinite()
, isNaN()
Например, проверить или распарсенная строка действительно была датой.
let date = new Date('foo');
let isInvalidDate= isNaN(date);
console.log(isInvalidDate ? "Yes, it was invalid" : "Ooops, was OK");
Изложение в статье крайне сумбурное и запутывает простые вещи.
Результат чтения — NaN
Например для input field. Можно же ничего туда не вводить. Наилучшее представление для отсутствующей даты — Invalid Date. То есть дата, но и в тоже время не дата.
Number.isNaN при этом не повторяет точь-в-точь поведение window.isNaN (в новой версии отсутствует неявное приведение типов), так что трюк из статьи не прокатит :( Но спасибо, всё равно интересно было почитать.
При этом, проверка на валидность даты становится проще некуда
Ну не знаю, для меня было потрясением когда конструкция типа
if (!date instanceof Date) throw new Error('Invalid Date')
не работала
А зачем здесь try...catch? Ниже уже написали, что надо а) про приоритет операторов помнить, б) проверять на валидность, а не на соответствие типу (которая тут совсем ни при чём).
Не то что бы NaN
был такой полезный, скорее в JS дату на валидность не проверить по-другому. Ну неявно еще можно вот так x.getTime() === x.getTime()
.
Полезный NaN