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

javascript

14897 просмотра

8 ответа

39924 Репутация автора

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)"
Автор: Jonathan Источник Размещён: 06.03.2012 01:35

Ответы (8)


18 плюса

0 Репутация автора

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

Автор: user1252065 Размещён: 06.03.2012 01:37

102 плюса

118027 Репутация автора

Решение

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

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

а также:

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

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

Автор: pimvdb Размещён: 06.03.2012 01:38

2 плюса

7354 Репутация автора

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

Автор: PraveenVenu Размещён: 06.03.2012 01:38

2 плюса

987 Репутация автора

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

Автор: mav Размещён: 06.03.2012 01:38

6 плюса

12196 Репутация автора

Проверьте JavaScript Date для быстрого ознакомления с 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)
Автор: nkron Размещён: 11.04.2012 05:23

0 плюса

1 Репутация автора

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

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

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

Автор: S.Munkhey Размещён: 14.10.2014 09:10

1 плюс

42328 Репутация автора

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

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

}

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

Автор: Abdennour TOUMI Размещён: 03.12.2014 01:00

1 плюс

54 Репутация автора

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

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

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

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

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

Автор: pollx Размещён: 16.04.2017 08:56
Вопросы из категории :
32x32