Was bedeutet die +d
in
function addMonths(d, n, keepTime) {
if (+d) {
bedeuten?
Was bedeutet die +d
in
function addMonths(d, n, keepTime) {
if (+d) {
bedeuten?
Dokumente: [developer.mozilla.org/de/JavaScript/Reference/Operators/](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators#.2b_(Unary_Plus%29)
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_())
Ich frage mich nur, was effizienter ist, eine Zeichenfolge in eine ganze Zahl mit der Funktion parseInt oder mit dem Plus-Operator parsen?
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);
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 .
.
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.
@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 :)
+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).
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.
Stimmt, ich weiß nicht, was ich getan habe, als ich das geschrieben habe. +function(){...}
erzeugt eine NaN
die Funktion nicht auswerten
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.
1 Stimmen
Mögliches Duplikat von Was bewirkt das Pluszeichen in 'return +new Date'?
8 Stimmen
Gleiches Problem, aber der Titel der anderen Seite beschreibt den allgemeinen Fall nicht so wie dieser
2 Stimmen
Mögliche Duplikate von Was bedeutet
+…
bedeuten in JavaScript