Signatur
Beschreibung
Die Methode has() des FormData-Interfaces stellt fest, ob zu einem bestimmten Feldnamen mindestens ein Eintrag vorhanden ist. Der Wert selbst wird dabei nicht betrachtet. Auch ein leerer String "" oder eine leere Datei gilt als vorhandener Eintrag.
Typische Einsatzfälle sind die Prüfung vor dem Absenden eines Formulars, ob ein optionales Feld überhaupt übertragen wird, z. B. ein angehakter Checkbox-Wert. Nicht angehakte Checkboxen und deaktivierte Felder landen gar nicht erst im FormData-Objekt. Außerdem lässt sich damit verhindern, dass append() einen Schlüssel doppelt anlegt.
Der Vergleich der Schlüssel unterscheidet zwischen Groß- und Kleinschreibung. has() liefert nur einen Wahrheitswert. Wer den Inhalt braucht, nimmt get() (erster Wert) oder getAll() (alle Werte). Weil get() bei fehlendem Schlüssel null zurückgibt, ist has() die klarere Wahl, wenn es nur um das Vorhandensein geht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Name des gesuchten Schlüssels bzw. Formularfelds. Andere Werte werden in einen String umgewandelt. Groß- und Kleinschreibung wird unterschieden. |
Rückgabewert
true, wenn mindestens ein Eintrag mit dem Schlüssel name existiert, sonst false.Beispiele
Einfache Prüfung auf vorhandene Schlüssel
const formData = new FormData();
formData.append('benutzername', 'anna');
formData.append('kommentar', '');
console.log(formData.has('benutzername'));
console.log(formData.has('kommentar')); // leerer Wert zählt als vorhanden
console.log(formData.has('Benutzername')); // Groß-/Kleinschreibung zählt
console.log(formData.has('passwort'));
Angehakte Checkbox beim Absenden erkennen
// HTML: <form id="anmeldung"><input type="email" name="email">
// <input type="checkbox" name="newsletter" value="ja"></form>
const form = document.querySelector('#anmeldung');
form.addEventListener('submit', async (event) => {
event.preventDefault();
const data = new FormData(form);
// Nicht angehakte Checkboxen fehlen komplett im FormData
const willNewsletter = data.has('newsletter');
console.log(`Newsletter gewünscht: ${willNewsletter}`);
await fetch('/api/anmeldung', { method: 'POST', body: data });
});
Doppelte Einträge vermeiden
const addOnce = (formData, name, value) => {
if (!formData.has(name)) {
formData.append(name, value);
}
};
const fd = new FormData();
addOnce(fd, 'sprache', 'de');
addOnce(fd, 'sprache', 'en'); // wird ignoriert
console.log(fd.getAll('sprache'));
Pflichtfelder vor dem Versand prüfen
const pflichtfelder = ['name', 'email', 'datei'];
const fd = new FormData();
fd.append('name', 'Max');
fd.append('email', 'max@example.com');
const fehlend = pflichtfelder.filter((feld) => !fd.has(feld));
console.log(fehlend.length ? `Fehlend: ${fehlend.join(', ')}` : 'Alles vollständig');
// Wichtig · Fallstricke
- Leere Werte zählen als vorhanden: Ein leeres Textfeld wird als
""übertragen, ein leeres Datei-Feld als leereFile. In beiden Fällen gibthas()truezurück. Ob ein Feld tatsächlich ausgefüllt wurde, zeigt erst der Wert ausget(). - Fehlende Felder: Nicht angehakte Checkboxen und Radio-Buttons, deaktivierte Felder (
disabled) und Felder ohnename-Attribut stehen nicht imFormData. Für sie lieferthas()false. - Groß-/Kleinschreibung:
has('Email')undhas('email')sind verschiedene Abfragen. - Kompatibilität:
has()ist in allen modernen Browsern verfügbar (Chrome 50+, Firefox 39+, Safari 11+, Edge 18+) und in Web Workern nutzbar. Im Internet Explorer fehlt die Methode. In Node.js gibt esFormDataglobal ab Version 18. - Nur eine Prüfung auf dem Client: Pflichtfelder müssen trotzdem auch auf dem Server geprüft werden, denn clientseitige Prüfungen lassen sich umgehen.