2011-07-13 10 views
130

esto realmente suena como una pregunta simple pero no tuve suerte buscando. ¿cuál es el +d enjavascript: más el símbolo antes de la variable

function addMonths(d, n, keepTime) { 
    if (+d) { 

significa?

+0

posible duplicado de [Lo que hace el signo más en 'return + new Date'] (http://stackoverflow.com/questions/221539/what-does-the-plus-sign-do-in-return- nueva fecha) – nawfal

+1

Mismo problema pero el título de otra página no describe el caso general ya que esto hace – geotheory

+0

posible duplicado de [¿Qué significa '+ ...' significa en JavaScript] (https://stackoverflow.com/q/15129137/1048572) – Bergi

Respuesta

158

El operador + devuelve la representación numérica del objeto. Entonces, en su caso particular, parecería estar predicando si if es un número distinto de cero.

Referencia here. Y, como se señala en los comentarios, here.

+4

Documentos: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators#.2b_(Unary_Plus%29 –

+1

Justo en, Paul. @amateur, los detalles están aquí: https: // developer .mozilla.org/es/JavaScript/Reference/Operators/Arithmetic_Operators # .2b_ (Unary_Plus) –

+12

¿Alguien para un concurso de JavaScript ofuscado? –

11

Es un operador único "+" que produce una expresión numérica. Sería lo mismo que d*1, creo.

9

Como se explica en otras respuestas, convierte la variable en un número. Especialmente útil cuando d puede ser un número o una función que se evalúa como un número.

Ejemplo (usando la función addMonths en la pregunta):

addMonths(function(){return x*y;}, 1, true); 
addMonths(34,1,true); 
addMonths("34",1,true); 

entonces el +d se evaluará como un número en todos los casos. Por lo tanto, se evita la necesidad de verificar el tipo y tomar diferentes rutas de código según si d es un número, una función o una cadena que se puede convertir en un número.

+0

'+ d' no se evaluará a un número con el primer ejemplo de invocación de addMonths –

+0

cierto, no sé lo que hice cuando escribí esto. '+ function() {...}' producirá un 'NaN' que no evalúa la función – ecerulm

Cuestiones relacionadas