Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is this JavaScript not interpreted as a code block when semi-colon is used?

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?

like image 920
Adam Thompson Avatar asked Dec 10 '18 19:12

Adam Thompson


1 Answers

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).

like image 135
Felix Kling Avatar answered Oct 04 '22 21:10

Felix Kling