Что делает знак плюс в «+ новой дате» - PullRequest
223 голосов
/ 21 октября 2008

Я видел это в нескольких местах

function fn() {
    return +new Date;
}

И я вижу, что он возвращает метку времени, а не объект даты, но я не могу найти никакой документации о том, что делает знак плюс.

Может кто-нибудь объяснить?

Ответы [ 7 ]

273 голосов
/ 21 октября 2008

это + унарный оператор, это эквивалентно:

function(){ return Number(new Date); }

см: http://xkr.us/articles/javascript/unary-add/

и в MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus

41 голосов
/ 21 октября 2008

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
6 голосов
/ 10 сентября 2015

Дата 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());'
5 голосов
/ 21 октября 2008

Вот спецификация относительно оператора "унарного сложения". Надеюсь, это поможет ...

2 голосов
/ 16 октября 2018

Просто чтобы дать больше информации:

Если вы помните, когда вы хотите найти разницу во времени между двумя датами, вы просто делаете следующее:

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"
1 голос
/ 18 сентября 2016

Это унарный оператор add , который также используется для явного преобразования чисел, поэтому при вызове +new Date() он пытается получить числовое значение этого объекта, используя valueOf(), как мы получаем строку из toString()

new Date().valueOf() == (+new Date)  // true
0 голосов
/ 21 октября 2008

Это точно так же, как:

function(){ return 0+new Date; }

, который имеет тот же результат, что и:

function(){ return new Date().getTime(); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...