Подтвердить что ты не робот

Дата против новой даты в JavaScript

new Date() принимает порядковый номер и возвращает объект Date.
Что делает Date(), и почему это дает другое время?

>>> new Date(1329429600000)
Date {Fri Feb 17 2012 00:00:00 GMT+0200 (القدس Standard Time)}
>>> Date(1329429600000)
"Tue Mar 06 2012 15:29:58 GMT+0200 (Jerusalem Standard Time)"
4b9b3361

Ответ 1

Из спецификаций:

Когда Date вызывается как функция, а не как конструктор, он возвращает строку, представляющую текущее время (UTC).

и

Когда Date вызывается как часть выражения new, он является конструктором: он инициализирует вновь созданный объект.

Итак, new Date(...) возвращает объект таким образом, что obj instanceof Date является истинным, тогда как Date(...) в основном возвращает то же, что и new Date().toString().

Ответ 2

new Date создает новый объект Date, который вы можете изменить или инициализировать с другой датой, в то время как Date возвращает строку текущей даты/времени, игнорируя ее аргументы.

Ответ 3

Откроется Дата JavaScript для быстрого справочного руководства по API и тестового кода. Вы можете видеть, что функция Date(), называемая без new, не принимает никаких параметров и всегда возвращает представление string текущей даты/времени. Если вы измените образец следующим образом:

console.log(Date());
console.log(Date(1329429600000));

Вы найдете, что результаты для обоих одинаковы (поскольку JavaScript игнорирует дополнительные аргументы, переданные функциям):

Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)
Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)

Ответ 4

new Date() возвращает дату на основе входного параметра, а Date() возвращает дату в браузере.

Ответ 5

Дата позволяет создавать объекты, которые представляют дату/время. Он НЕ должен был называться как функция. Вы можете получить дополнительную информацию здесь: Дата - MDN

Ответ 6

Date класс можно назвать конструктором или как метод, чтобы иметь встроенный код, например:

function Date(args){
   if (this.constructor == Date){
        // if you call : new Date(args)
    }else{
        // if you call as method : Date()
      return new Date()
   }

}

Таким образом, если вы вызвали его как метод, он повторно вызовет конструктор, чтобы вернуть текущую дату и время.

Ответ 7

Вызов конструктора как функции просто неправильный, он сделает (возможно) неожиданные вещи с областью действия приложения, и до очень долгого времени вы будете в центре внимания в сеансе исправления групповой ошибки.

Создайте объект Date, как это предписано разработчиками спецификации, не кодируйте обходные решения, реализованные в качестве гарантий инженерами, которые считают, что программисты JS глупы. (работал в лаборатории, был на следующем стуле во время разговора, занимался этим и переезжал)

Если вы безумно против нового, вы можете попробовать object.create, но в момент написания его медленнее, и если вы не планируете внедрять полиморфное наследование, тогда это дополнительные усилия для меньшего вознаграждения.

Ответ 8

Это 2017 год, и у меня был тот же вопрос. Что я нашел в качестве ответа после некоторого чтения:

"Самый простой способ выполнить явное преобразование типов - использовать функции Boolean(), Number(), String() или Object(). Мы уже видели эти функции в качестве конструкторов для объектов-оболочек. При вызове без новый оператор, однако, они работают как функции преобразования и выполняют преобразования типов.."

"Встроенные классы основной попытки JavaScript valueOf() перед преобразованием toString(), за исключением класса Date, который выполняет преобразование toString().

Таким образом, Date(), вызываемый без нового ключевого слова, выполняет преобразование типа. И так как Date является объектом и объект-примитив должен произойти, объекты даты по умолчанию вызывают toString() (хотя Date имеет также значимый метод valueOf()).

Обнаружено, что в книге "JavaScript: окончательное руководство". Оставив его здесь для будущих поколений, которые только начали изучать JS:)