In Chrome
version ^72
if I run the following JavaScript
there are no errors.
{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }
So the line of code is interpreted as an expression statement, unexpectedly.
But if I run the same code with a semi-colon at the end it runs as expected.
{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =
This is expected since the initial {
tells the JavaScript
engine that it is a code block unless we disambiguate with parentheses.
Why does this occur with the semi-colon but not without it?
Why does this occur with the semi-colon but not without it?
Chrome uses a very simple test to see whether a line is an object literal or not: Does the line start with a {
and end with a }
? If yes, the line is evaluated as an expression.
{ prop: p } = { prop: 'prop' }
passes that test, but { prop: p } = { prop: 'prop' };
does not.
See Odd behaviour of comparison of object literals for more info (different input, same reason).
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