Being able to parse a URL into a native object is one of those things you'd expect in a standard library. Unfortunately, JavaScript is often lacking in that department.

There are a lot of implementations out there of this problem, of varying quality. I wasn't able to come across one that takes advantage of ES6 features. Here is what I came up with.

const paramObject = (queryString = window.location.search.substring(1)) => 
queryString.split('&')
  .map(str => {
    let [key, value] = str.split('=');
    return {[key]: decodeURI(value)};
  })
  .reduce((prev, curr) => Object.assign(prev, curr));

This takes care of a lot of things that I saw missing from other implementations. It allows you to override the default location and also takes care of values that are encoded.

Check it out with some tests at JSFiddle.