0

我正在编写要拆分为几个模块的脚本。“基线”模块将支持旧版浏览器,它们不支持新语法,例如 === 和 Promise。

如果浏览器通过功能检查,将加载“高级”模块。

我的问题是,如何检查浏览器是否支持===operator 和.then(function(){})promise 语法而不首先实际使用它们,并在旧浏览器中导致语法错误?

if (/*what goes here*/) {
    var script = document.createElement('script');
    script.src = '/advanced.js';
    script.async = false;
    document.head.appendChild(script);
}
4

1 回答 1

-1

如果浏览器支持 Promise,它将支持then. 查看浏览器是否支持承诺(不抛出错误)的一种方法(除其他外)是查看是否window.Promise存在:

if(window.hasOwnProperty("Promise"))
{
  console.log("Promises are supported.");
}
else
{
  console.log("This browser does NOT support promises.");
}

至于===,我认为你不必担心那个。在 1999 年 12 月的第 3 版===中被添加到 ECMAscript 中,很难想象今天有任何人(甚至是顽固的落后者)使用不支持它的浏览器。

更新:

如果您真的坚持检测===支持,我的结论(来自我下面的评论)是通过研究哪些浏览器不支持===并使用浏览器检测来检测这些浏览器来实现这一点。我希望其他人为您提供一种我没有想到的更简单的方法。

于 2020-01-19T19:38:26.593 回答