【问题标题】:ES6 not supported in Closure Compiler闭包编译器不支持 ES6
【发布时间】: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


【解决方案1】:

这是因为你在字面量对象中使用了Computed Property Names

{ ['c']: C, ['r']: R }

兼容 es5 的替代品可能是:

var TheCellRef = LeadImport2ExcelLibrary['utils']['encode_cell']({ "c": C, "r": R });

【讨论】:

  • 或者干脆{ c: C, r: R }
  • @FelixKling 在属性名称上需要引号以阻止重命名。
  • @ChadKillingsworth:取决于代码是如何编译的,但这里似乎是这样,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2019-09-18
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多