Materi
Query berisi pasangan nama=nilai yang dipisah tanda &. Spasi, &, =, #, dan huruf di luar ASCII punya arti khusus atau tidak boleh muncul apa adanya, sehingga harus dikodekan persen: setiap bita ditulis sebagai % diikuti dua digit heksadesimal (RFC 3986 §2.1). Spasi menjadi %20, & menjadi %26, dan é yang terdiri atas dua bita UTF-8 menjadi %C3%A9. Karakter yang tidak pernah perlu dikodekan hanya huruf, angka, dan - . _ ~.
encodeURIComponent mengodekan satu nilai supaya aman ditaruh di query atau di satu segmen path, dan decodeURIComponent membaliknya. Kodekan nama dan nilai satu per satu, lalu gabungkan dengan = dan &. Jangan mengodekan URL utuh dengan fungsi itu, karena : dan / ikut berubah menjadi %3A dan %2F.
encodeURIComponent("roti & selai"); // "roti%20%26%20selai"
decodeURIComponent("caf%C3%A9"); // "café"
new URLSearchParams({ q: "roti & selai" }).toString(); // "q=roti+%26+selai"
new URLSearchParams("?tag=a&tag=b").getAll("tag"); // ["a", "b"]URLSearchParams mengerjakan hal yang sama untuk seluruh query, dengan satu perbedaan yang dicatat MDN: spasi ditulis sebagai +, bukan %20, karena kelas itu memakai format application/x-www-form-urlencoded. Satu nama boleh muncul berkali-kali, misalnya tag=a&tag=b; getAll mengambil semuanya, sedangkan get hanya yang pertama. Semua nilai query adalah teks, jadi hal=3 terbaca sebagai "3", bukan angka 3.