Javascript decodeURIComponent不是一个函数

Javascript decodeURIComponent不是一个函数,javascript,reactjs,Javascript,Reactjs,我正在尝试在React.js组件的componentWillMount()中使用此函数。但是浏览器说window.decodeURIComponent(…)不是一个函数,我不明白。有人能告诉我如何让它工作吗?谢谢 export const getUrlQuery = window => { let queryDict = {} if (window.location.search) { window.location.search.substr(1).split("&

我正在尝试在React.js组件的componentWillMount()中使用此函数。但是浏览器说window.decodeURIComponent(…)不是一个函数,我不明白。有人能告诉我如何让它工作吗?谢谢

export const getUrlQuery = window => {
  let queryDict = {}
  if (window.location.search) {
    window.location.search.substr(1).split("&").forEach((item) => {
      let s = item.split("=")
      let key = s[0]
      let value = s[1] && window.decodeURIComponent(s[1])
      (queryDict[key] = queryDict[key] || []).push(value)
    })
  }
  return queryDict
}

在我删除了这部分代码之后,一切都正常了

(queryDict[key] = queryDict[key] || [])

看起来这个语法错误导致的不是decodeURIComponent(),而是叫喊。有趣的错误是,
let value=..
行被解析为

let value = s[1] && window.decodeURIComponent(s[1])(queryDict[key] = queryDict[key] || []) ..
换句话说,将括号内的表达式应用于
window.decodeURIComponent(s[1])
的结果,该结果是字符串而不是函数。您可以使用显式分号来修复它(通常这不是一个坏主意):


UPD:看到代码在做什么,您可能会对npm包感兴趣。

您是否将window传递到getUrlQuery函数中?是的,它是向下传递的,或者它应该在window.location.Search上报告undefined这就是为什么我们总是用分号终止每个语句的原因,孩子们。
let value = s[1] && window.decodeURIComponent(s[1]);