JavaScript try块中的对象文字


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

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

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

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

除非在breakcontinue语句中使用标签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

相关内容

  • 没有找到相关文章

最新更新