将 URL 个查询参数转换为对象 - 保留类型?

Convert URL query parameters to object - preserve type?

我有以下 URL:

https://www.youtube.com/watch?v=-5Dsh9xXuo8&paused=true&volume=100

我想将其转换为:

var parsedUrl = {
  v: "-5Dsh9xXuo8",
  paused: true,
  volume: 100
};

所以,我使用了一个非常简单的解决方案:

_urlToVideoOptions: function(url) {
  var queryParameters = url.search.substr(1);

  var videoOptions = {};
  queryParameters.split('&').forEach(function(part) {
    var item = part.split('=');
    videoOptions[item[0]] = decodeURIComponent(item[1]);
  });

  return videoOptions;
}

这导致:

var parsedUrl = {
  v: "-5Dsh9xXuo8",
  paused: "true",
  volume: "100"
};

其中 paused 和 volume 是字符串而不是 boolean/number。

是否有一种通用的方法可以将这些值转换为适当的类型?或者我是否需要调用 parseInt,使用自定义 'parseBool' 方法等...如果失败,回退到字符串?

没有别的办法。

_urlToVideoOptions: function(url) {
  var queryParameters = url.search.substr(1);

  var videoOptions = {};
  queryParameters.split('&').forEach(function(part) {
    var item = part.split('=');
    var val = decodeURIComponent(item[1]);
    if (val == "true" || val == "false")
        val = !!val;
    else if (!isNaN(val)) {
        if (val.indexOf('.') != -1)
            val = parseFloat(val);
        else
            val = parseInt(val);
    }
    videoOptions[item[0]] = val;
  });

  return videoOptions;
}