Javascript的语法有多少个坑是众所周知的。

先到地图上来



代码如下:

复制代码代码如下所示:
{ 0/{ };
{ };对象对象
{ { } };
{)


这种痛苦的陨石坑只能用Javascript的出色工作来估算。

我相信大多数不学习Javascript编译器的童鞋都是不懂的(至少我觉得难以置信)。

后来,我去找了妈妈一点点。

现在让我们看看代码:

复制代码代码如下所示:
{
答:1
}


相信大多数童鞋,第一眼就会觉得这是直接的对象。

那么代码呢

复制代码代码如下所示:
{
var a=1;
}


浏览器提示语法错误吗

显然不是!考虑一下,我们会发现这是一组语句。

复制代码代码如下所示:
如果(isnumber){
var a=1;
}


在这种情况下,您可能已经发现Javascript具有两个含义。

Javascript编译器是如何处理这两种意义的

为了解决这一问题,ECMA的方法非常简单和粗暴。在解析时,当一个句子以开头时

这真是一个对付坑的办法。

既然都是语句块,为什么{ 1 }没有语法错误呢

事实上,在这种情况下,a被解析器理解为一个标签,标签用于与定向跳转的中断和连续语句合作。

因此,这样的写作将引发一个例外:

复制代码代码如下所示:
{
答:(函数){ }
}


因为函数(){不是函数声明,也不是函数表达式。

在这里,我们应该对{ }的基本概念有一个极好的处理。让我们回顾一下文章开头提到的单词。

复制代码代码如下所示:
{ 0/{ };
{ };对象对象
{ { } };
{)


首先,因为{ }是一个语句块,所以代码可以理解为:

复制代码代码如下所示:
如果(1){ }
+ { }


所以返回值是0。

第二,由于句子的开头不在文本中,所以它是直接的普通对象,直接添加空数组和空对象,返回{对象对象}。

第一秒被理解,第三个不再需要解释。

第四,因为它是开始,第一个()}被直接解释为对象,所以这两个公式是相等的,返回true。