首页 > 解决方案 > IE 获取 URL 参数失败

问题描述

我有一个应该获取 URL 参数但仅在 IE(使用 11)中中断的函数。我最初认为这是因为一些较新的 ES6 特性和语法,所以为 ES5 编写了它。但是它仍然无法正常工作。有谁知道可以做什么或修复什么来使这项工作在一个非常古老的遗留项目上工作。我确实尝试了来自MDN的用于 Object.Assign 的 polyfill。

ES6:

getQueryURLParams = function(pName) {
   var urlObject = location.search
   .slice(1)
   .split('&')
   .map(function(element ) { 
    return element.split('='); 
})
.reduce(function(obj, pair) {  

  const key = pair.map(decodeURIComponent)[0];
  const value = pair.map(decodeURIComponent)[1];

  return Object.assign({}, obj, { [key]: value });
}, {});

return urlObject[pName];
};

ES5 版本:

getQueryURLParams = function(pName) {

var urlObject = location.search
.slice(1)
.split('&')
.map(function(element ) { 
    return element.split('='); 
})
.reduce(function(obj, pair) {  

  const key = pair.map(decodeURIComponent)[0];
  const value = pair.map(decodeURIComponent)[1];

  return Object.assign({}, obj, { [key]: value });
}, {});

return urlObject[pName];
};

我很感激任何建议

标签: javascripturlecmascript-6ecmascript-5

解决方案


Object.assign 在 IE 中不起作用,因为它不是 ES5 的一部分。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

在页面底部,有一个 polyfill

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill

[key]: value

这也不是有效的 ES5。

你可以写

var result = {}
Object.keys(obj).forEach(function(k){
    result[k] = obj[k];
})
result[key] = value;

return result;

推荐阅读