Я видел это в нескольких местах
function fn() {
return +new Date;
}
И я вижу, что он возвращает метку времени, а не объект даты, но я не могу найти никакой документации о том, что делает знак плюс.
Кто-нибудь может объяснить?
Я видел это в нескольких местах
function fn() {
return +new Date;
}
И я вижу, что он возвращает метку времени, а не объект даты, но я не могу найти никакой документации о том, что делает знак плюс.
Кто-нибудь может объяснить?
Ответы:
это унарный оператор +, это эквивалентно:
function(){ return Number(new Date); }
getTime
метод для объекта date ?!
.getTime()
всегда буду гарантировать
Date.now()
, который является предпочтительным способом получения даты и времени в миллисекундах.
JavaScript является свободно типизированным, поэтому он выполняет приведение / преобразование типов в определенных обстоятельствах:
http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html
http://www.jibbering.com/faq/faq_notes/type_convert.html
Другие примеры:
>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true
Дата JavaScript может быть записана в виде строки:
Чт 10 сентября 2015 12:02:54 GMT + 0530 (IST)
или как число:
1441866774938
Даты, записанные в виде чисел, указывают количество миллисекунд с 1 января 1970 года, 00:00:00.
Возвращаясь к вашему вопросу, он добавляет, что, добавив «+» после оператора присваивания «=», конвертирует дату в равное числовое значение.
того же можно достичь с помощью функции Number (), например Number (new Date ());
var date = +new Date(); //same as 'var date =number(new Date());'
Вот спецификация относительно оператора «унарного сложения». Надеюсь, поможет...
Просто чтобы дать больше информации:
Если вы помните, когда вы хотите найти разницу во времени между двумя датами, вы просто делаете следующее;
var d1 = new Date("2000/01/01 00:00:00");
var d2 = new Date("2000/01/01 00:00:01"); //one second later
var t = d2 - d1; //will be 1000 (msec) = 1 sec
typeof t; // "number"
Теперь, если вы проверите тип d1-0, это также число:
t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"
+ также преобразует дату в число:
typeof (+new Date()) //"number"
Но обратите внимание , что 0 + new Date()
будет не относиться так же! это будет объединено как строка:
0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
Это унарный оператор сложения, который также используется для явного преобразования чисел, поэтому при вызове +new Date()
он пытается получить числовое значение этого объекта, используя, valueOf()
как мы получаем строку изtoString()
new Date().valueOf() == (+new Date) // true
Он делает то же самое, что и:
function () {return 0 + new Date; }
это имеет тот же результат, что и:
function () {return new Date (). getTime (); }
new Date/1