在Safari Javascript中无法使用“let”关键字?

时间:2015-03-22 11:53:57

标签: javascript firefox safari ecmascript-6

我不明白使用“let”关键字的最佳方式......

  • 在IE11和Chrome45中,我可以使用它
  • 在Safari8.0.4中,与早期版本的Chrome一样,它会出现错误“意外使用保留字'let'”
  • 在Firefox中,let关键字仅适用于<script type="application/javascript;version=1.7"/>,但此脚本类型甚至在IE11,Chrome45,Safari8中均未被识别为Javascript。

这是一个JSFiddle,它显示了它的实际效果:https://jsfiddle.net/p6cgtyg6/1/

所以 - 我不介意要求用户使用他们浏览器的现代版本。

如果确实没有支持此关键字的Safari版本,我不介意排除Safari。 (这是真的吗?为什么每个人都花费所有时间来关注IE,当时Safari在ES6方面看起来更糟糕?我错过了什么吗?)。

但是我应该如何允许“让”在Firefox中工作而不阻止Chrome / IE? (我还没有找到人们关于Firefox脚本标签与Chrome的行为方式不同的链接,我预计会有更多投诉,所以我认为我一定错过了一些明显的东西......)

3 个答案:

答案 0 :(得分:5)

关于Safari 8,它只是not supported;对于该浏览器,我建议使用Babel

如果您有直觉感觉this bug不会很快修复*那么您可以使用一个检测Firefox的脚本,然后为您的脚本注入具有type属性的适当值。

作为旁注,我建议不要使用let blocks - 除非你想使用this transpiler - 也不要让表达式为will be dropped

*已在Firefox 44中修复

答案 1 :(得分:4)

let是ECMAScript 6规范的一部分,ECMAScript 6本身就是草案中的一部分。状态。即使是不完整的形式,它的功能也不能被实际的浏览器版本完全支持。

由于您希望今天深入ES6进行制作,最好的选择是使用ES6到ES5的转换器,最突出的是BabelTraceur,它们既可用作CLI,也可用作包您选择的构建系统。有BabelTraceur的在线工具可以试用它们。 Chrome的Scratch JS扩展程序同时使用Babel和Traceur,如果构建系统不是选项,则非常适合开发和编译ES6脚本。

以下是up-to-date comparison table,它在浏览器和ES6编译器中都支持ES6功能。

这是ES6相关工具的a great collection

答案 2 :(得分:1)

请参阅此ES6关键字的浏览器兼容性。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Browser_compatibility

另外see this SO post用于ES6特征检测。