Signatur
Beschreibung
Die Methode keys() liefert einen Iterator, der nacheinander die Namen aller Query-Parameter zurückgibt. Die Reihenfolge entspricht der Reihenfolge im Query-String bzw. der Reihenfolge, in der die Einträge hinzugefügt wurden.
Wichtig: Kommt ein Schlüssel mehrfach vor (z. B. ?tag=a&tag=b), liefert der Iterator ihn auch mehrfach. Brauchen Sie eindeutige Namen, wandeln Sie das Ergebnis in ein Set um.
Typische Anwendungsfälle sind das Prüfen, welche Filter in einer URL gesetzt sind, das Aufbauen von Formularzuständen aus der Adresszeile oder das Loggen und Validieren eingehender Parameter, z. B. gegen eine Liste erlaubter Namen.
Der Rückgabewert ist ein Iterator und kein Array. Er lässt sich mit for...of durchlaufen oder mit Array.from() bzw. dem Spread-Operator in ein Array umwandeln.
Rückgabewert
Beispiele
Alle Schlüssel mit for...of ausgeben
const params = new URLSearchParams('q=javascript&page=2&sort=asc');
for (const key of params.keys()) {
console.log(key);
}
Eindeutige Schlüssel bei Mehrfachwerten
const params = new URLSearchParams('tag=js&tag=web&lang=de');
console.log([...params.keys()]);
console.log([...new Set(params.keys())]);
Unbekannte Parameter aus der aktuellen URL erkennen
const erlaubt = new Set(['q', 'page', 'sort']);
const params = new URL('https://example.com/suche?q=css&page=1&debug=1').searchParams;
const unbekannt = [...new Set(params.keys())].filter((key) => !erlaubt.has(key));
console.log(unbekannt);
Parameter sicher entfernen (erst kopieren, dann löschen)
const params = new URLSearchParams('utm_source=nl&utm_medium=mail&id=42');
// Schlüssel zuerst in ein Array kopieren, da delete() den Iterator beeinflusst
const utmKeys = [...params.keys()].filter((key) => key.startsWith('utm_'));
utmKeys.forEach((key) => params.delete(key));
console.log(params.toString());
// Wichtig · Fallstricke
- Keine eindeutigen Schlüssel: Doppelte Namen erscheinen mehrfach. Für eindeutige Schlüssel verwenden Sie
new Set(params.keys()). - Iterator statt Array: Methoden wie
map()oderfilter()gibt es darauf erst nachArray.from()oder[...]. Die neueren Iterator-Helfer wie.filter()direkt am Iterator werden noch nicht überall unterstützt. Ein Iterator lässt sich nur einmal durchlaufen. - Ändern während der Iteration: Wenn Sie während der Schleife
delete()oderappend()aufrufen, kann das Ergebnis unerwartet sein, z. B. übersprungene Einträge. Kopieren Sie die Schlüssel vorher in ein Array. - Dekodierung: Die Schlüssel sind bereits dekodiert.
+wird zu einem Leerzeichen,%C3%A4wird zuä. - Kompatibilität: Wird in allen modernen Browsern unterstützt. Im Internet Explorer fehlt die Methode, dort ist ein Polyfill nötig. In Node.js ist
URLSearchParamsseit Version 10 global verfügbar.