Was ist der Zweck eines Plus-Symbols vor einer Variablen?

262

Das klingt wirklich nach einer einfachen Frage, aber ich hatte kein Glück bei der Suche. was macht das +din

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

meint?

goh
quelle
Mögliches Duplikat von Was macht das Pluszeichen in 'return + new Date'
nawfal
3
Dieselbe Ausgabe, aber der Titel der anderen Seite beschreibt nicht den allgemeinen Fall wie dies
Geotheory
1
Mögliches Duplikat von Was +…bedeutet in JavaScript
Bergi

Antworten:

311

Der +Operator gibt die numerische Darstellung des Objekts zurück. In Ihrem speziellen Fall scheint es also eine Prädikation dafür zu sein, ob deine Zahl ungleich Null ist oder nicht .

Referenz hier . Und wie in den Kommentaren erwähnt, hier .

Paul Sonier
quelle
Ich frage mich nur, was effizienter ist, einen String mit der Funktion parseInt oder mit dem Plus-Operator in eine Ganzzahl zu analysieren.
Acarlstein
1
Wie unterscheidet es sich von .parseInt()?
Daniel W.
1
@acarlstein aus dem MDN-Link in der Antwort: "Obwohl unäre Negation (-) auch Nicht-Zahlen konvertieren kann, ist unäres Plus die schnellste und bevorzugte Methode, um etwas in eine Zahl umzuwandeln , da keine anderen Operationen an der Zahl ausgeführt werden . " (nur für eine "offizielle" Antwort)
AN
22

Es ist ein unärer "+" - Operator, der einen numerischen Ausdruck ergibt. Es wäre das gleiche wie d*1, glaube ich.

Naivisten
quelle
12

Wie in anderen Antworten erläutert, konvertiert es die Variable in eine Zahl. Besonders nützlich, wenn d entweder eine Zahl oder eine Zeichenfolge sein kann Funktion das ergibt eine Zahl.

Beispiel (mit der addMonthsFunktion in der Frage):

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

dann +dwird das in allen Fällen zu einer Zahl ausgewertet. So müssen Sie nicht nach dem Typ suchen und unterschiedliche Codepfade verwenden, je nachdem, ob des sich um eine Zahl, eine Funktion oder eine Zeichenfolge handelt, die in eine Zahl konvertiert werden kann.

RubenLaguna
quelle
+dwird nicht zu einer Zahl mit dem ersten Aufrufbeispiel von addMonths
Gus Crawford
Es stimmt, ich weiß nicht, was ich getan habe, als ich das geschrieben habe. +function(){...}wird eine NaNnicht bewertete Funktion erzeugen
RubenLaguna
4
Könnten Sie Ihre Antwort bearbeiten, um die Verrückten zu entfernen? Es ist ziemlich verwirrend.
Buh Buh