2009-12-30 4 views

Répondre

26

Nicolás et Brian ont raison, mais si vous êtes curieux de savoir comment cela fonctionne, +new Date(); équivaut à (new Date()).valueOf();, car le unary + operator obtient la valeur de son expression d'opérande, puis le convertit ToNumber.

Vous pouvez ajouter une méthode valueOf sur un objet et utiliser l'opérateur unaire + pour retourner une représentation numérique de votre objet, par exemple .:

var productX = { 
    valueOf : function() { 
    return 500; // some "meaningful" number 
    } 
}; 

var cost = +productX; // 500 
+2

+1, bonne explication. –

+1

Puisque 'valueOf()' renvoie un nombre, l'opérateur unary + n'est-il pas inutile dans l'exemple ci-dessus? Je pense que ce serait plus significatif si valueOf() renvoyait '" 500 "'. –

+1

@Darrel, regardez-vous différents exemples de code que je suis? Je ne vois aucune modification à ce post, donc votre commentaire semble étrangement déconnecté et hors de propos, mais presque comme si le post avait pu être édité après le commentaire. – Breton

10

Je pense que l'opérateur unaire plus appliqué à n'importe quoi le ferait convertir en nombre.

+0

Hm, ne convertit + toujours l'expression en un certain nombre? + est un opérateur valide pour les chaînes et les nombres. 1 * est généralement utilisé pour forcer un argument dans un nombre. – Ernelli

+2

@Ernelli, + est uniquement un opérateur de chaîne valide lorsqu'il est utilisé en tant qu'opérateur binaire. L'opérateur unary + ne s'applique qu'aux nombres, donc il convertit de la même manière que 1 *. –

+1

Ernelli: Voir la réponse de CMS ci-dessous http://stackoverflow.com/questions/1983040/what-does-the-new-mean-in-javascript/1983109#1983109. Unary '+' semble toujours convertir son opérande en un nombre, tandis que binary '+' peut être utilisé sur les chaînes. –

9

Il convertit le Date() en un entier, vous donnant le nombre de millisecondes en cours depuis le 1er Janvier 1970.

+0

5 secondes trop tard, j'ai voté pour Nicolas ;-) –

+1

Mon navigateur s'est écrasé en écrivant ceci! J'ai dû lancer un nouveau navigateur ... –

+0

@Brian IE le fera de temps en temps. ;) –