11

I'm using the es6-module-transpiler, esprima and JSHint with esnext: true options. JSHint complains when I put:

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

But esprima complains when I use

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

The spec says

export default AssignmentExpression ;

Which makes me think that JSHint needs updating and esprima is properly bombing out because there isn't an assignment. Can someone be the deciderer for me here?

Jacob
  • 3,629
  • 3
  • 36
  • 44

1 Answers1

13

Actually an AssignmentExpression can be any expression, it's the expression at the top most level, the one that contains all other expressions (see the spec).

However,

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

really isn't an assignment expression it's a syntax error. If you use the assignment operator in an assignment expression, then you need a left hand side and a right hand side. So something like this would be valid:

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

Just using an object literal should be correct, because, as I said, an AssignmentExpression can be any expression.

So Esprima seems to be wrong.

Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143
  • Thanks for the decidering. I have [filed an issue](https://code.google.com/p/esprima/issues/detail?id=486) with the esprima project if you are interested in following. – Jacob Jan 25 '14 at 21:26