ES6模块导出默认语法

11

我正在使用es6-module-transpiler、Esprima和JSHint,并启用esnext:true选项。当我输入以下内容时,JSHint会发出警告:

export default = { some: 'thing', other: 'thing' };

但是当我使用它时,Esprima会抱怨。

export default { some: 'thing', other: 'thing' };

根据规范所述:

export default AssignmentExpression ;

这让我认为JSHint需要更新,而esprima可能因为缺少赋值语句而出现问题。有人可以为我决策吗?

1个回答

13

实际上,AssignmentExpression 可以是任何表达式,它是最顶层的表达式,包含所有其他表达式(参见 规范)。

然而,

export default = { some: 'thing', other: 'thing' };

这并不是一个赋值表达式,而是一个语法错误。如果您在赋值表达式中使用了赋值运算符,则需要有左侧和右侧。因此,像这样的内容是有效的:

export default foo = { some: 'thing', other: 'thing' };

只使用对象字面量应该是正确的,因为正如我所说,AssignmentExpression 可以是 任何 表达式。

所以 Esprima 似乎是错的。


感谢您的决策。如果您有兴趣关注,我已经在 esprima 项目中提交了一个问题(https://code.google.com/p/esprima/issues/detail?id=486)。 - Jacob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接