Llevaba tiempo buscando una función equivalente a urldecode de php y parece que por fin la he encontrado ‘encodeURIComponent()’.
La función en si tiene algunas limitaciones como que no escapa los caracteres ! ~ * ‘ ( ) pero me funciona correctamente con el resto.
Su funcionamiento sería similar al de la función escape:
var encoded = encodeURIComponent(str);