497 Stimmen

Welchen Zweck erfüllt das Pluszeichen vor einer Variablen?

Was bedeutet die +d in

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

bedeuten?

1 Stimmen

8 Stimmen

Gleiches Problem, aber der Titel der anderen Seite beschreibt den allgemeinen Fall nicht so wie dieser

2 Stimmen

551voto

Paul Sonier Punkte 37609

En + Operator gibt die numerische Darstellung des Objekts zurück. In Ihrem speziellen Fall scheint es also so zu sein, dass das if davon abhängt, ob d eine Zahl ungleich Null ist.

Referenz aquí . Und, wie in den Kommentaren hervorgehoben, aquí .

14 Stimmen

Dokumente: [developer.mozilla.org/de/JavaScript/Reference/Operators/](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators#.2b_(Unary_Plus%29)

1 Stimmen

Funktionierender Link: [developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_())

0 Stimmen

Ich frage mich nur, was effizienter ist, eine Zeichenfolge in eine ganze Zahl mit der Funktion parseInt oder mit dem Plus-Operator parsen?

115voto

Jsowa Punkte 6338

Betreiber + ist ein unärer Operator, der den Wert in eine Zahl umwandelt. Nachstehend finden Sie eine Tabelle mit den entsprechenden Ergebnissen der Verwendung dieses Operators für verschiedene Werte.

+----------------------------+-----------+
| 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       |
+----------------------------+-----------+

Betreiber + gibt einen Wert für Objekte zurück, die die Methode valueOf .

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

console.log(+something);

2 Stimmen

Das ist wichtig: 1. und andere Zeichenketten, die mit . wird durch Entfernen des nachgestellten . . Ich bin darauf gestoßen, als ich einen Fehler in einem Echtzeit-Eingabehandler behoben habe, der die Eingabe von Dezimalzahlen ermöglichen sollte, aber nicht wie erwartet funktioniert hat, weil + Bediener, der die hinteren Teile abschneidet . .

3 Stimmen

Denken Sie an die Verwendung von + Betreiber mit Vorsicht in if Aussagen wie NaN weder gleich 'true` ist noch false : if (+function(){ }) console.log('success') - dies wird nicht ausgeführt

36voto

naivists Punkte 31588

Es handelt sich um einen unären "+"-Operator, der einen numerischen Ausdruck ergibt. Er wäre dasselbe wie d*1 glaube ich.

4 Stimmen

Bitte fügen Sie keine Antwort hinzu, wenn Sie sich nicht ganz sicher sind, was passiert ist. Das "Ich glaubte" hat mich verwirrt, bitte ändern Sie es, wenn Sie sich sicher sind.

6 Stimmen

@Nemesius, gutes Argument. Der Teil "Ich glaube" in dieser Antwort gilt immer noch, auch wenn 10 Jahre vergangen sind, seit ich sie beantwortet habe. Ich bin mir nicht ganz sicher, ob ich mir alle möglichen Fälle vorstellen kann, in denen die beiden JavaScript-"Hacks" auf die gleiche Weise funktionieren. Was wäre, wenn 'string'*1 gibt etwas anderes zurück als +'string' ? Also, es ist ungefähr dasselbe - glaube ich :)

0 Stimmen

+1n wirft TypeError ("Kann einen BigInt-Wert nicht in eine Zahl umwandeln"), während 1n*1 wirft TypeError ("BigInt und andere Typen können nicht gemischt werden, verwenden Sie explizite Konvertierungen"). Ein kleiner Unterschied, aber der einzige, den ich bisher gefunden habe (abgesehen davon, dass die Spaltenplatzierung für den Fehler unterschiedlich ist).

21voto

RubenLaguna Punkte 17855

Wie in anderen Antworten erläutert, wird die Variable in eine Zahl umgewandelt. Besonders nützlich, wenn d kann entweder eine Zahl oder eine Zeichenkette sein, die zu einer Zahl ausgewertet wird.

Beispiel (unter Verwendung des addMonths Funktion in der Frage):

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

dann die +d wird in allen Fällen eine Zahl ergeben. Damit entfällt die Notwendigkeit, auf den Typ zu prüfen und unterschiedliche Codepfade einzuschlagen, je nachdem, ob d ist eine Zahl, eine Funktion oder eine Zeichenkette, die in eine Zahl umgewandelt werden kann.

0 Stimmen

+d wird beim ersten Aufruf von addMonths nicht zu einer Zahl ausgewertet

0 Stimmen

Stimmt, ich weiß nicht, was ich getan habe, als ich das geschrieben habe. +function(){...} erzeugt eine NaN die Funktion nicht auswerten

4 Stimmen

Könnten Sie Ihre Antwort bearbeiten, um das Verrückte zu entfernen? Das ist ziemlich verwirrend.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X