JavaScript try块中的对象文字

JavaScript try块中的对象文字,javascript,Javascript,上述模块的输出在chrome控制台中为“1”。为什么?这两个代码块都不包含对象文字 在这两种情况下,a:1都被解释为一个标签a,后面跟着一个仅为1的语句 除非在break或continue语句中使用,否则a不会执行任何操作 类似地,1作为一个语句,除了返回它的值之外,它也不做任何事情,这就是为什么当从开发人员控制台执行时,整个表达式将计算为1,从而打印该值 在第一种情况下,{}的额外对只是一个本地代码块。换句话说,它通常是这样布置的: try{ a:1 } catch(e){} 要将{a:1

上述模块的输出在chrome控制台中为“1”。为什么?

这两个代码块都不包含对象文字

在这两种情况下,a:1都被解释为一个标签a,后面跟着一个仅为1的语句

除非在break或continue语句中使用,否则a不会执行任何操作

类似地,1作为一个语句,除了返回它的值之外,它也不做任何事情,这就是为什么当从开发人员控制台执行时,整个表达式将计算为1,从而打印该值

在第一种情况下,{}的额外对只是一个本地代码块。换句话说,它通常是这样布置的:

try{
 a:1
}
catch(e){}
要将{a:1}实际解释为对象文字,需要将其括在括号中:

try {
  {
    a:1
  }
}
catch(e) {}

老实说,我不太清楚您为什么想要这样做,但在控制台中执行此代码块将打印对象,正如您所期望的那样。

JS解析器在示例中没有看到对象文字,而是看到标签和数字文字

在第一个示例中,解析器看到:

try {
 ({a:1})
}
catch(e) {}
所以在try块中有一个块,在该块中有一个a和一个表达式语句,其中有一个数字文本表达式1

第二个示例相同,但没有附加块


Chrome的控制台在控制台中输出计算结果,在本例中是数字文字1,这就是为什么您在控制台中看到数字1。

为什么Chrome将“a:1”计算为1?@leili the a:这是一个。你在其他语言中看到的goto。因此,如果你从那里删除a:的话,它只会是1,这最终会给你相同的输出,就像你在控制台中输入1一样。“a:1”的含义是什么?我已经解释了它是如何解释的,我已经扩展了上面的解释,希望更清楚。
try {
 ({a:1})
}
catch(e) {}
try {
  {
    a: 1;
  }
} catch (e) {}