ECMA 6虽然启用了实验性js,但仍无法正常工作

时间:2015-09-27 15:43:18

标签: javascript ecmascript-6

我有最新的Chrome版本(45版和Chrome Canary版本47版),都启用了实验性Javascript标记。我想使用ECMA6,但它不起作用。我不知道为什么。是否还必须启用任何技巧或其他标志?

ECMA6的每个保留字(如导入,类或其他)会在Chrome 45中引发“未捕获的SyntaxError:意外的保留字”错误,并在Chrome Canary中出现“未捕获的SyntaxError:意外的令牌导入”错误。

我将不胜感激任何帮助。并且,因为几个月前我没有得到任何答案,但是这个Using ECMAScript 6的“可能重复”,但事实并非如此。它没有解决我的问题。

感谢。

---编辑--- 我想使用模块,因为我比使用Require或Common更喜欢ecma6模块。而且我也喜欢类的糖语法,代码看起来更好:)

3 个答案:

答案 0 :(得分:8)

任何浏览器本身都不支持模块。您需要使用TraceurBabel等转录程序。请查看以下其中一项以帮助您入门:

至于课程,您可以原生使用这些课程,而无需通过翻译。您可以在此处查看兼容性表,以查看当前哪些浏览器本机支持类:

https://kangax.github.io/compat-table/es6/

截至目前,您可以看到大多数浏览器本身尚不支持类。但是,如果您使用的是Babel或Traceur,那不应该是一个问题。

答案 1 :(得分:8)

type="module"添加到脚本标记中。这应该可以解决你的问题。

答案 2 :(得分:3)

以下是一些功能列表,可以告诉您哪些功能在Chrome 45中有效。

Chrome功能状态:https://www.chromestatus.com/features

ES6兼容性矩阵:https://kangax.github.io/compat-table/es6/

您会发现许多功能(例如public boolean hasLegalMoveFor(boolean player) { int rowInc = 0; int colInc = 0; if(player == HORIZONTAL) { colInc = 1; } else { rowInc = 1; } for(int row = 0; row < (squares.length - 2*rowInc); row++) { for(int column = 0; column < (squares[0].length - 2*colInc); column++) { if (!(squares[row][column] || squares[row + rowInc][column + colInc] || squares[row + 2*rowInc][column + 2*colInc])) { return true; } } } return false; } 糖语法)在Chrome 45中运行良好,但需要严格模式才能启用。

例如,如果您在Chrome 45或更高版本中运行使用class的jsFiddle,它将起作用:http://jsfiddle.net/jfriend00/xd56k8n3/。如果您在严格模式之外运行,则会报告class

模块在任何浏览器中看起来都不支持。

仅供参考,现在在ES6中编写代码的一种常用方法是使用像BabelTraceur这样的转换器,将ES6代码提供给它,并将其转换为与当前运行的ES5兼容代码浏览器。您可以使用ES6编写,但与当前浏览器兼容。