425 votes

A quoi sert le symbole plus devant une variable ?

Que fait le +d sur

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

C'est-à-dire ?

1 votes

7 votes

Même problème, mais le titre de l'autre page ne décrit pas le cas général comme celui-ci le fait.

2 votes

473voto

Paul Sonier Points 25528

El + L'opérateur renvoie la représentation numérique de l'objet. Ainsi, dans votre cas particulier, il semblerait que le if soit prédictif de la présence ou non de d est un nombre non nul.

Référence ici . Et, comme le soulignent les commentaires, ici .

10 votes

Docs : [developer.mozilla.org/fr/JavaScript/Référence/Opérateurs/](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators#.2b_(Unary_Plus%29)

1 votes

Lien fonctionnel : [developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_())

0 votes

Je me demande juste ce qui est le plus efficace : analyser une chaîne de caractères en un nombre entier en utilisant la fonction parseInt ou en utilisant l'opérateur plus ?

62voto

Jsowa Points 4130

Opérateur + est un opérateur unaire qui convertit la valeur en un nombre. Vous trouverez ci-dessous un tableau avec les résultats correspondants à l'utilisation de cet opérateur pour différentes valeurs.

+----------------------------+-----------+
| Value                      | + (Value) |
+----------------------------+-----------+
| 1                          | 1         |
| '-1'                       | -1        |
| '3.14'                     | 3.14      |
| '3'                        | 3         |
| '0xAA'                     | 170       |
| true                       | 1         |
| false                      | 0         |
| null                       | 0         |
| 'Infinity'                 | Infinity  |
| 'infinity'                 | NaN       |
| '10a'                      | NaN       |
| undefined                  | NaN       |
| ['Apple']                  | NaN       |
| function(val){ return val }| NaN       |
+----------------------------+-----------+

Opérateur + renvoie une valeur pour les objets qui ont implémenté la méthode valueOf .

let something = {
    valueOf: function () {
        return 25;
    }
};

console.log(+something);

33voto

naivists Points 15639

Il s'agit d'un opérateur unaire "+" qui produit une expression numérique. C'est la même chose que d*1 je crois.

3 votes

N'ajoutez pas de réponse si vous n'êtes pas totalement sûr de ce qui se passe. J'ai été confondu par le "je crois", veuillez le changer si vous en êtes sûr.

2 votes

@Nemesius, bon point. La partie "je crois" de cette réponse tient toujours, même si 10 ans se sont écoulés depuis que j'y ai répondu. Je ne suis pas complètement sûr de pouvoir imaginer tous les cas possibles où les deux "hacks" JavaScript fonctionnent de la même manière. Et si 'string'*1 renvoie quelque chose de différent de +'string' ? Donc, c'est à peu près la même chose - je crois :)

18voto

ecerulm Points 1834

Comme expliqué dans d'autres réponses, il convertit la variable en un nombre. Spécialement utile lorsque d peut être soit un nombre, soit une chaîne de caractères qui évalue un nombre.

Exemple (en utilisant le addMonths dans la question) :

addMonths(34,1,true);
addMonths("34",1,true);

alors le +d sera évalué à un nombre dans tous les cas. Ainsi, il n'est pas nécessaire de vérifier le type et d'emprunter des chemins de code différents selon que l'on se trouve en présence de d est un nombre, une fonction ou une chaîne de caractères qui peut être convertie en un nombre.

0 votes

+d ne sera pas évalué à un nombre avec la première invocation exemple de addMonths

0 votes

C'est vrai, je ne sais pas ce que j'ai fait quand j'ai écrit ça. +function(){...} produira un NaN ne pas évaluer la fonction

4 votes

Pourriez-vous modifier votre réponse afin de supprimer le fou ? C'est assez confus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X