开发者问题收集

未捕获的类型错误:URL 不是 javascript 中的构造函数

2019-02-06
14284

我的代码

let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
let searchParams = new URLSearchParams(url.search);
console.log(searchParams.get('c'));  // outputs "m2-m3-m4-m5"

和错误

Uncaught TypeError: URL is not a constructor

2个回答

在 Chrome 的 任何 较新版本(至少自 2014 年的 v32 以来)中,唯一会导致此错误的情况是,如果您有其他代码覆盖了 URL 符号。

例如

const URL = 'I am now a string'

// later...

let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');

如果您无法找到覆盖 URL 的代码,您可以先在代码中添加

console.log(URL)

。记录的值可能会给您提示。否则,请参阅此帖子〜 如何知道在 chrome 控制台中哪个文件中定义了 js 全局变量?


解决方案:

  • 尽量不要在变量中使用全局对象名称。
  • 如果可以的话,不要分配全局变量。

最后,您可以像这样避免此问题

(function() {
  const URL = 'I am a string but not window.URL'

  // later...

  let url = new window.URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
  console.info(url.search)
})()
Phil
2019-02-06

出现该问题的原因是 url.URL 未定义 (更多信息请阅读此 评论 )。

Vladimir Denisov
2020-08-12