O que o sinal de mais faz em '+ nova data'

Respostas:

294

esse é o operador + unário, é equivalente a:

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

consulte: http://xkr.us/articles/javascript/unary-add/

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

kentaromiura
fonte
4
Mas como por que você não usaria o getTimemétodo definido no objeto date ?!
tkone
30
Sob quase nenhuma circunstância você deve realmente usar isso. Eu realmente me queimei com isso. + nova Data (), além de qualquer tipo de operação matemática, sofrerá uma grande penalização de desempenho. Veja este jsperf, jsperf.com/new-date-timing
Geuis
9
@ BradKoch na brevidade da programação certamente não é a inteligência da alma. Como a comunidade python colocou de maneira tão adequada, "explícito é sempre melhor do que implícito". E se um navegador alterasse a conversão automática de tipo implícita por meio de uma regressão? Agora seu código simplesmente não funciona! .getTime()sempre garantirá que sim.
tkone
11
@Geuis, outro excelente motivo pelo fato de você não poder fazer isso!
tkone
14
O Sine ECMAScript 5 existe Date.now(), que é a maneira preferida de obter a data e a hora em milissegundos.
Cutemachine
6

Uma data JavaScript pode ser escrita como uma sequência:

Quinta-feira, 10 de setembro de 2015 12:02:54 GMT + 0530 (IST)

ou como um número:

1441866774938

Datas escritas como números, especifica o número de milissegundos desde 1 de janeiro de 1970, 00:00:00.

Chegando à sua pergunta, parece que adicionando '+' após o operador de atribuição '=', convertendo Data em igual valor numérico.

o mesmo pode ser alcançado usando a função Number (), como Number (new Date ());

var date = +new Date(); //same as 'var date =number(new Date());'
Dev
fonte
6

Aqui está a especificação referente ao operador "adição unária". Espero que ajude...

Pablo Cabrera
fonte
3

Só para dar mais algumas informações:

Se você se lembrar, quando quiser encontrar a diferença horária entre duas datas, faça o seguinte;

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"

Agora, se você verificar o tipo de d1-0, também será um número:

t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"

que + também converterá a data em número:

typeof (+new Date()) //"number"

Mas nota que 0 + new Date()vai não ser tratados da mesma forma! será concatenado como string:

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
S.Serpooshan
fonte
1

É um operador de adição unário e também é usado para conversão explícita de números; portanto, quando você chama +new Date(), ele tenta obter o valor numérico desse objeto usando valueOf()como obtemos a string detoString()

new Date().valueOf() == (+new Date)  // true
Raghavendra
fonte
-3

Faz exatamente a mesma coisa que:

function () {retorna 0 + nova data; }

que tenha o mesmo resultado que:

function () {retornar novo Date (). getTime (); }
Sergey Ilinsky
fonte
11
Não em 0 + nova data. Isso primeiro converte a data em uma string e, em seguida, acrescenta um "0" (por exemplo: "0Tue 21 de outubro de 2008 20:38:05 GMT-0400");
Chris Noe
2
1 * nova data será, mas 1 + nova data -> String
Kent Fredric
ya, também o mesmo vale paranew Date/1
Ashish