Signatur
Beschreibung
Der unäre Plus-Operator steht vor genau einem Operanden. Er wendet die interne Operation ToNumber darauf an. Ist der Wert schon eine Zahl, bleibt er unverändert. Alle anderen Werte werden nach festen Regeln umgewandelt: true wird zu 1, false und null werden zu 0, undefined wird zu NaN. Strings werden als numerisches Literal gelesen.
Strings müssen vollständig eine gültige Zahl darstellen. Leerzeichen am Anfang und Ende werden ignoriert. Erlaubt sind Dezimalzahlen, Exponenten ("1e3"), "Infinity" und Präfixe wie 0x, 0b und 0o. Ein leerer String oder ein String nur aus Leerzeichen ergibt 0. Alles andere, zum Beispiel "12px", ergibt NaN. Objekte werden zuerst mit dem Hinweis "number" in einen primitiven Wert umgewandelt. Dabei werden Symbol.toPrimitive, valueOf() und toString() verwendet. Deshalb liefert +new Date() einen Zeitstempel.
In der Praxis nutzt man + vor allem für diese Fälle:
- Formularwerte umwandeln, zum Beispiel aus
input.value - Werte aus URL-Parametern oder
localStoragein Zahlen umwandeln - einen Zeitstempel aus einem
Dategewinnen
Das Ergebnis ist dasselbe wie bei Number(wert). Es gibt nur eine Ausnahme: BigInt-Werte. Wenn Lesbarkeit wichtiger ist als Kürze, ist Number() oft die klarere Wahl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $operand Pflicht | any | Beliebiger Ausdruck, der in eine Zahl umgewandelt werden soll. Bei BigInt und Symbol wird ein TypeError ausgelöst. |
Rückgabewert
NaN. Der Rückgabewert ist nie ein BigInt.Beispiele
Umwandlungsregeln im Überblick
const werte = ['42', ' 3.5 ', '', '0x1F', '1e3', '12px', true, false, null, undefined, [], [7], [1, 2], {}];
for (const w of werte) {
console.log(JSON.stringify(w) ?? String(w), '→', +w);
}
Formulareingaben summieren
// input.value ist immer ein String – ohne + würde '10' + '5' zu '105'
const preis = document.querySelector('#preis');
const menge = document.querySelector('#menge');
const berechne = () => {
const p = +preis.value;
const m = +menge.value;
if (Number.isNaN(p) || Number.isNaN(m)) {
return console.warn('Ungültige Eingabe');
}
console.log(`Summe: ${(p * m).toFixed(2)} €`);
};
berechne(); // bei preis = '19.90', menge = '3'
Zeitstempel und eigene Objekte
const start = +new Date(); // entspricht Date.now()
const temperatur = {
celsius: 21.5,
[Symbol.toPrimitive](hint) {
return hint === 'number' ? this.celsius : `${this.celsius} °C`;
}
};
console.log(typeof start); // 'number'
console.log(+temperatur); // 21.5
console.log(`${temperatur}`); // '21.5 °C'
Unterschied zu Number() und parseFloat()
console.log(+'12px', parseFloat('12px')); // NaN 12
console.log(Number(10n)); // 10
try {
console.log(+10n);
} catch (e) {
console.log(e.constructor.name, e.message);
}
// Wichtig · Fallstricke
- BigInt und Symbol:
+10nund+Symbol()lösen einenTypeErroraus.Number(10n)funktioniert dagegen und liefert10. - Leere Strings:
+""und+" "ergeben0, nichtNaN. Leere Formularfelder sehen deshalb schnell wie eine gültige Null aus. Prüfe vorher auf leere Eingaben. - Einheiten und Ziffern-Trenner:
+"12px",+"1_000"und+"3,5"ergebenNaN. Für Werte mit Einheit wie12pxistparseFloat()geeignet. Werte mit deutschem Dezimalkomma wie3,5musst du vorher selbst umformen. - Kein Oktal bei führender Null:
+"010"ergibt10.+"0o10"ergibt dagegen8. - Verwechslungsgefahr:
a + +baddiertaund den umgewandelten Wert vonb.a ++bist dagegen ein Syntaxfehler. Leerzeichen oder Klammern verbessern die Lesbarkeit. - NaN prüfen: Nutze
Number.isNaN(). Ein Vergleich mit=== NaNist nietrue. - TypeScript:
+xhat immer den Typnumber. Laufzeitfehler bei BigInt-Werten erkennt TypeScript aber nur teilweise.