While refactoring some code I accidentally discovered that this is valid syntax (or at least, doesn't cause a parser error in Firefox):
const {} = somefunc();
somefunc
returns an object
and the curly's are supposed to contain variable names for destructuring, at the time I hadn't decided what those names would be so I temporarily left them empty.
The editor didn't highlight a syntax error, so out of curiosity I tested it, and was surprised that Firefox actually had no issue with this syntax.
Why is this syntax valid? Does it actually do something weird?
Yes, empty destructuring like that is perfectly fine, it's just useless. This is covered in Runtime Semantics: DestructuringAssignmentEvaluation
With parameter value.
ObjectAssignmentPattern:
{}
Perform ? RequireObjectCoercible(value).
Return NormalCompletion(empty).
All it does (in RequireObjectCoercible) is require that the right side is not null nor undefined.
When destructuring an object you chose which properties you need:
const {a, c} = {'c': 1, 'b': 2, 'a': 3};
Thus having no parameters is acceptable, but useless nonetheless:
const {} = {};
It's just the limiting case of object destructuring.
While it may seem pointless to allow it, allowing edge cases like this is useful for automatically generated code, so the generator doesn't have to check that there are zero items and skip generating the code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With