JavaScript连续对象字面量表达式的解析与解释机制问询
解析
{'foo'}{'bar'} 与 {a: 'foo'}{b: 'bar'} 的执行结果 Chrome控制台执行结果:
> {'foo'}{'bar'} 'bar'类似地:
> {a: 'foo'}{b: 'bar'} 'bar'
这种写法的核心是JavaScript引擎对{...}的解析规则,以及控制台的执行逻辑:
当{...}出现在语句位置时,会被解析为代码块(block),而非对象字面量。控制台的输入环境默认按语句解析输入内容,因此连续的{...}{...}会被拆分为两个独立的代码块语句。
对 {'foo'}{'bar'} 的解析
- 第一个代码块
{ 'foo' }:内部是一个独立的表达式语句'foo',执行时该表达式会被求值,但作为语句执行后无返回值(控制台不会显示这个结果)。 - 第二个代码块
{ 'bar' }:内部的表达式语句'bar'被求值,控制台会返回最后一个语句的执行结果,因此输出'bar'。
对 {a: 'foo'}{b: 'bar'} 的解析
- 第一个代码块
{ a: 'foo' }:内部是一个标签语句——a是标签名,后面的'foo'是表达式。标签仅用于跳转(如break/continue),不影响表达式求值,执行后无返回值。 - 第二个代码块
{ b: 'bar' }:同样是标签语句,内部表达式'bar'被求值,控制台返回该结果,因此输出'bar'。
补充:若要让{...}被解析为对象字面量,需将其放在表达式位置,比如用括号包裹:({'key': 'value'}),此时控制台会返回对应的对象。
内容的提问来源于stack exchange,提问作者user2475269
相关产品推荐
相关产品推荐

