Почему new Date (undefined) создает недопустимую дату, а new Date (null) - нет?

Сегодня я заметил что-то странное с Javascript:

console.info(new Date(null)); // 1970-01-01T00:00:00.000Z
console.info(new Date(undefined)); // Invalid Date

Почему это так? Я знаю, что null и undefined - это не одно и то же, но в этом контексте я ожидал бы того же результата.

Насколько я понимаю, звонок new Date(null) равносилен звонку new Date(0). Вызов new Date(undefined), возможно, заканчивается суммированием undefined (как число для миллисекунд) и в результате получается NaN, которое является недействительной датой (вызов new Date(NaN), очевидно, возвращает «недопустимую дату»). Но я не уверен в своей теории, может кто-нибудь прояснить это?

Agash Thamo. 30.07.2018 16:36
ecma-international.org/ecma-262/6.0/#sec-date-value, вы можете видеть, что ToNumber () в конечном итоге вызывается, для null это нормально и это 0, но для undefined его NaN.
Alex K. 30.07.2018 16:37

Кажется, моя теория верна. @AlexK. вы должны опубликовать свой комментарий в качестве ответа.

Agash Thamo. 30.07.2018 16:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
3
2 847
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если new Date вызывается с одним примитивным аргументом, который не является строкой, он преобразует его в число. И хотя null будет принудительно переходить к 0, undefined станет NaN, и это внутреннее значение даты, которую вы возвращаете.

console.info(null + ":")
console.info(Number(null))
console.info(new Date(null).valueOf())
console.info(new Date(null).toString())
console.info(undefined + ":")
console.info(Number(undefined))
console.info(new Date(undefined).valueOf())
console.info(new Date(undefined).toString())

Другие вопросы по теме