【发布时间】:2015-02-25 19:45:40
【问题描述】:
我正在使用 Google Closure Compiler,但出现以下错误:
ES6_FEATURE:此语言功能仅在 es6 模式下受支持:计算属性。使用 --language_in=ECMASCRIPT6 或 ECMASCRIPT6_STRICT 启用 ES6 功能。
触发此错误的行是这一行:
var TheCellRef = LeadImport2ExcelLibrary['utils']['encode_cell']({ ['c']: C, ['r']: R });
基本上我正在传递一个我在同一行上创建的对象。我知道我可以简单地在 JavaScript 源代码头中添加对 ES6 的支持,但我想知道为什么会出现这个错误以及如何修复它?
【问题讨论】:
-
该代码应该做什么? Pre-ecmascript 6 解释器会认为您使用数组作为无效的对象键。
-
呃?它在消息中说:“此语言功能仅在 es6 模式下受支持:计算属性”您正在使用计算属性,这是 ES6 功能。一个可能的解决方案是不使用计算属性。但是,如果您似乎不知道此功能,我真的很好奇您为什么使用
{ ['c']: C, ... }? -
@FelixKling:这是因为我使用 GCC 来动态生成客户端文件,而且我没有我正在使用的库的外部 (SheetJS.js) 我需要确保GCC 不会重命名对象键,这样做的方法是使用对象字符串表示法而不是对象点表示法。这就是为什么 { c: C, r: R } 不起作用的原因,因为编译后 c 和 r 将被重命名,但 ['c'] 和 ['r'] 被转换为点表示法,因此库仍然可以获得它期望的对象。
-
当然,但
{ ['c']: C }在 ES5 中无效(我只是假设你知道;)) -
我通过创建一个对象 (var TheObject = {};) 替换了代码,然后添加了 2 行来添加属性 (TheObject['c'] = C; TheObject['r'] = R;) 然后传入该对象。
标签: javascript google-closure-compiler ecmascript-6