Javascript 函数中未定义URLSearchParams错误

Javascript 函数中未定义URLSearchParams错误,javascript,Javascript,这很奇怪,使用DW CC 2018(如果问题是这样的话),当我在HTML页面的脚本标记中使用URLSearchParams时,它不会被标记为“错误” 我将URLSearchParams放在我的外部JS文件中,在一个函数中,它被标记为“未定义”。DW将其标记为一个错误,但它仍然有效,因此它必须更像是一个“警告”,而不是一个错误。这让我有点担心,即使这是一个警告,它可能会在上线时破裂 我应该担心吗,还是只是其中一件可以忽略的事情?Dreamweaver可能在其索引器中使用了一个过时的“预期全局”列表

这很奇怪,使用DW CC 2018(如果问题是这样的话),当我在HTML页面的脚本标记中使用
URLSearchParams
时,它不会被标记为“错误”

我将
URLSearchParams
放在我的外部JS文件中,在一个函数中,它被标记为“未定义”。DW将其标记为一个错误,但它仍然有效,因此它必须更像是一个“警告”,而不是一个错误。这让我有点担心,即使这是一个警告,它可能会在上线时破裂


我应该担心吗,还是只是其中一件可以忽略的事情?

Dreamweaver可能在其索引器中使用了一个过时的“预期全局”列表,该列表没有更新以包括,因为它是相对较新的

如果您不关心向后兼容性*cough*IE*cough*,只需在有问题的文件中添加以下内容即可让Dreamweaver闭嘴:

const URLSearchParams = window.URLSearchParams;
如果Dreamweaver不支持ES6语法(我从未使用过),那么您必须将其添加到非顶级的地方:

(function () {
  // must be in a closure
  var URLSearchParams = window.URLSearchParams;

  ...
})();

原因是顶级的
var
在某些浏览器中覆盖了全局名称空间。

您可以编写自定义的URLSearchParams类

class UrlSearchParams {
  constructor(query) {
    this.query = query;
  }
  getSearchObject = () => {
    const { query } = this;
    return query
    ? (/^[?#]/.test(query) ? query.slice(1) : query)
      .split("&")
      .reduce((params, param) => {
        let [key, value] = param.split("=");
        params[key] = value
          ? decodeURIComponent(value.replace(/\+/g, " "))
          : "";
        return params;
      }, {})
  : {};
  };
  getAll = () => {
    const searchParams = this.getSearchObject();
    return searchParams;
  }
  get = param => {
    const searchParams = this.getSearchObject();
    return searchParams[param];
  };
  setUrl = (param, value) => {
    const searchParams = this.getSearchObject();
    searchParams[param] = value;
    return Object.keys(searchParams)
    .map(key => key + "=" + searchParams[key])
    .join("&");
  };
}

export default UrlSearchParams;

URLSearchParams在所有浏览器中都不受支持,因此我认为不同的开发人员平台会有相同的问题。我不太关心旧版IE,因为我将使用Bootstrap 4,所以我在旧版IE上触发了该触发器。我确实看到了一些东西,这让我感到困惑,关于JEST,ES需要为5或更大。我将尝试“let”语句,看看会发生什么。奇怪的是,它在HTML脚本标记中很快乐,但在文件中却不快乐。我看到您将“let”改为“const”。Let确实有效,但也必须更改DW中的LINT设置。DW给了我一个Let needs esversion:6的错误,下面是一个关于如何更改它的
链接。它既快又容易。一旦我这样做了,“让”就起作用并清除了错误。但是如果我把它取出来,它仍然需要抛出错误的“let”。@maxstrust我更改它的唯一原因是,从规范上讲,将API的命名空间定义为
const
更为正确,因为该值永远不会被其他内容覆盖。