Signatur
Beschreibung
Die Eigenschaft valueAsNumber gibt den Wert eines Eingabefelds direkt als number zurück. Sie erspart das manuelle Umwandeln mit Number() oder parseFloat() und berücksichtigt dabei die typspezifische Interpretation des Werts.
Sie funktioniert nur bei Eingabetypen mit numerischer Bedeutung:
numberundrange: der eingegebene Zahlenwert.date,month,week,datetime-local: Millisekunden seit der Unix-Epoche (UTC). Beimonthist es die Anzahl der Monate seit Januar 1970.time: Millisekunden seit Mitternacht.
Bei allen anderen Typen (z. B. text, email) sowie bei leeren oder ungültigen Eingaben ist der Wert NaN. Die Eigenschaft ist auch beschreibbar: Wird eine Zahl zugewiesen, setzt der Browser value passend formatiert.
Typischer Einsatz: Berechnungen mit Formularwerten (Preisrechner, Schieberegler), Datumsdifferenzen oder das programmatische Setzen von Werten, ohne Zeichenketten formatieren zu müssen.
Rückgabewert
NaN, wenn das Feld leer, ungültig oder vom falschen Typ ist.Beispiele
Summe aus zwei Zahlenfeldern berechnen
// <input type="number" id="menge" value="3">
// <input type="number" id="preis" value="4.5">
const menge = document.querySelector('#menge');
const preis = document.querySelector('#preis');
const berechnen = () => {
const summe = menge.valueAsNumber * preis.valueAsNumber;
console.log(Number.isNaN(summe) ? 'Ungültige Eingabe' : `Gesamt: ${summe.toFixed(2)} €`);
};
menge.addEventListener('input', berechnen);
preis.addEventListener('input', berechnen);
berechnen();
Tage zwischen zwei Datumsfeldern
// <input type="date" id="von" value="2024-03-01">
// <input type="date" id="bis" value="2024-03-15">
const von = document.querySelector('#von').valueAsNumber;
const bis = document.querySelector('#bis').valueAsNumber;
const tage = (bis - von) / (1000 * 60 * 60 * 24);
console.log(`${tage} Tage`);
Wert programmatisch setzen und Leerfeld erkennen
// <input type="range" id="lautstaerke" min="0" max="100">
// <input type="number" id="alter">
const regler = document.querySelector('#lautstaerke');
regler.valueAsNumber = 75;
console.log(regler.value, typeof regler.value);
const alter = document.querySelector('#alter');
console.log(alter.valueAsNumber); // leeres Feld
// Zeitfeld: Millisekunden seit Mitternacht
const zeit = document.createElement('input');
zeit.type = 'time';
zeit.valueAsNumber = 90 * 60 * 1000;
console.log(zeit.value);
// Wichtig · Fallstricke
- Immer auf
NaNprüfen: Leere oder ungültige Eingaben ergebenNaN, nicht0. NutzeNumber.isNaN()statt=== NaN. - Falscher Eingabetyp: Bei
type="text"ist der Wert stetsNaN; das Setzen einer Zahl wirft dort einenInvalidStateError. - Datumswerte sind UTC:
new Date(input.valueAsNumber)interpretiert den Wert als UTC-Mitternacht – in lokalen Zeitzonen kann das zu einem Tag Versatz bei der Anzeige führen. FürDate-Objekte istvalueAsDate(nicht beidatetime-local) eine Alternative. - Begrenzung: Beim Setzen werden
min/max/stepnicht automatisch geprüft (beirangewird jedoch auf den gültigen Bereich geklemmt). Validierung übercheckValidity(). - Lokalisierung: Die Eigenschaft ist unabhängig von der angezeigten Schreibweise (Komma/Punkt) – intern gilt immer das Punkt-Format.
- Kompatibilität: in allen modernen Browsern verfügbar; Internet Explorer unterstützte nur Teile.