Javascript 检查基本ES6支持,但不包括;“不安全评估”;

Javascript 检查基本ES6支持,但不包括;“不安全评估”;,javascript,ecmascript-6,content-security-policy,Javascript,Ecmascript 6,Content Security Policy,我想知道浏览器是否支持ECMAScript 6(ES6)(基本支持就足够了),但我也想使用合理的内容安全策略(CSP)头。到目前为止,我的解决方案(见“”)需要'safe-eval'。答案“”中的解决方案也是如此。有什么办法解决这个问题吗 var supportsES6 = function() { try { new Function("(a = 0) => a"); return true; } catch (

我想知道浏览器是否支持ECMAScript 6(ES6)(基本支持就足够了),但我也想使用合理的内容安全策略(CSP)头。到目前为止,我的解决方案(见“”)需要
'safe-eval'
。答案“”中的解决方案也是如此。有什么办法解决这个问题吗

    var supportsES6 = function() {
      try {
        new Function("(a = 0) => a");
        return true;
      }
      catch (err) {
        return false;
      }
    }();

我假设您想要检测es6支持的原因是决定是交付es6代码还是es5,还是显示错误。最简单的方法是使用es模块系统

<script type="module" src="script.es6.js"></script>
<script nomodule src="script.es5.js"></script>


支持es6的浏览器将加载
script.es6.js
并忽略
script.es5.js
,而不支持es6的浏览器将忽略
script.es6.js
并加载
script.es5.js

,只要您控制传递给
新函数的字符串(这里显然就是这种情况),这不是不安全的。请注意,对ES6的支持不是肯定/否定的:ES6涉及许多不同的方面,JavaScript引擎通常只支持少数、部分或许多与ES6相关的功能。不使用
safe eval
听起来非常合理。如果您想使用
eval
,那很好。无论如何,不允许它并不会使您的页面更加安全。@trincot如何用内容安全策略表达“它不是不安全的”机器?正如我前面所说,ES6支持不是一件肯定/否定的事情。你写的基本支持就足够了?这是什么意思?据我所知,没有“基本”标准。JS引擎的支持各不相同。@DamianYerrick I仍然认为前一个副本的公认答案完美地回答了这个问题:“新引入的语法(如箭头函数)的功能检测只能使用eval()函数或其他等效函数来完成”。它接着解释了为什么,如果您不寻求语法支持,还列出了一些合理的替代方案。