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

吃可爱长大的小学妹 提交于 2019-12-07 03:42:11

问题


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?


回答1:


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



来源:https://stackoverflow.com/questions/53712304/why-is-this-javascript-not-interpreted-as-a-code-block-when-semi-colon-is-used

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!