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

时间:2015-07-30 15:38:13

标签: javascript type-conversion

我有以下网址:

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'方法等......并且,如果失败,则回退到字符串?

1 个答案:

答案 0 :(得分:1)

没有别的办法。

_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;
}