我有最新的Chrome版本(45和Chrome Canary版本47),都启用了Experimental JavaScript标记。我想使用ECMAScript 6,但它不工作。我不知道为什么。是否有任何技巧或其他标记必须启用,太?
ECMAScript 6的每个保留字(如import
、class
或其他)都会抛出一个 “未捕获的SyntaxError
:Chrome 45中出现意外的保留字”“和未捕获的 * SyntaxError
:Chrome Canary中出现意外标记import
“* 错误。
几个月前我问过这个问题,除了Using ECMAScript 6的“可能重复”外,没有得到任何答案,但它并没有解决我的问题。
我想使用模块,因为我更喜欢ECMAScript模块而不是使用CommonJS中的require
。而且我也喜欢类的语法糖 - 代码看起来更好。
3条答案
按热度按时间nnsrf1az1#
模块尚未在任何浏览器中得到原生支持。您将需要使用诸如Traceur或Babel之类的transpiler。请参阅以下内容之一以帮助您入门:
至于类,你可以直接使用它们,而不需要经过一个transpiler。你可以查看这里的兼容性表,看看现在哪些浏览器支持类:
https://kangax.github.io/compat-table/es6/
到目前为止,你可以看到大多数浏览器还不支持类,但是,如果你使用Babel或者Traceur,那就不需要担心了。
dxxyhpgq2#
将
type="module"
添加到script标记中,这样就可以解决您的问题。k7fdbhmy3#
这里有几个功能列表,告诉你什么功能在Chrome 45中工作。
Chrome功能状态:https://www.chromestatus.com/features
ES6兼容性矩阵:https://kangax.github.io/compat-table/es6/
你会发现很多特性,比如
class
sugar语法,在Chrome45中运行良好,但是需要严格模式才能启用。例如,如果您在Chrome 45或更高版本中运行使用
class
的jsFiddle,它将工作:http://jsfiddle.net/jfriend00/xd56k8n3/。如果在strict模式之外运行,它将报告Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
。模块看起来还没有在任何浏览器中得到支持。
顺便说一句,现在在ES6中编写代码的一种常见方法是使用Babel或Traceur这样的transpiler,你将ES6代码输入其中,它将其转换为在当前浏览器中运行的ES5兼容代码。