javascript - son - ¿Qué hace el signo más en ''+ nueva Fecha''?
¿qué fechas son de los signos zodiacales? (7)
He visto esto en algunos places
function fn() {
return +new Date;
}
Y puedo ver que está devolviendo una marca de tiempo en lugar de un objeto de fecha, pero no puedo encontrar ninguna documentación sobre lo que está haciendo el signo más.
¿Alguien puede explicar?
Aquí está la specification respecto al operador "unary add". Espero eso ayude...
Es un operador de adición unario y también se usa para la conversión explícita de números, por lo que cuando llama a la +new Date()
, intenta obtener el valor numérico de ese objeto usando valueOf()
como obtenemos una cadena de toString()
new Date().valueOf() == (+new Date) // true
Hace exactamente lo mismo que:
function(){ return 0+new Date; }
que tiene el mismo resultado que:
function(){ return new Date().getTime(); }
JavaScript está escrito de forma flexible, por lo que realiza el tipo de conversión / coacción en determinadas circunstancias:
http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html
http://www.jibbering.com/faq/faq_notes/type_convert.html
Otros ejemplos:
>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true
Sólo para dar un poco más de información:
Si recuerda, cuando quiera encontrar la diferencia horaria entre dos fechas, simplemente haga lo siguiente;
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"
Ahora, si marca el tipo de d1-0, también es un número:
t = new Date() - 0; //numeric value of Date: number of msec''s since 1 Jan 1970.
typeof t; // "number"
que + también convertirá la Fecha a Número:
typeof (+new Date()) //"number"
¡Pero tenga en cuenta que 0 + new Date()
no será tratado de manera similar! será concatenado como una cadena:
0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
Una fecha de JavaScript se puede escribir como una cadena:
Jue 10 de septiembre 2015 12:02:54 GMT + 0530 (IST)
o como un número:
1441866774938
Las fechas escritas como números, especifican el número de milisegundos desde el 1 de enero de 1970, 00:00:00.
Llegando a su pregunta, se ve que al agregar ''+'' después del operador de asignación ''='', la Fecha de conversión se convierte en el mismo valor numérico.
lo mismo se puede lograr usando la función Número (), como Número (nueva Fecha ());
var date = +new Date(); //same as ''var date =number(new Date());''
ese es el + operador unario, es equivalente a:
function(){ return Number(new Date); }