JavaScript权威指南--词法结构

时间:2022-02-23 05:23:53

JavaScript权威指南--词法结构

使用广泛,所有的浏览器(桌面、手机、屏蔽等等)都配有相应的JavaScript解析器。

JavaScript解析器如何工作?

浏览器在读取HTML文件的时候,只有当遇到<script>标签的时候,才会唤醒所谓的“JavaScript解析器”开始工作。

1、“找一些东西”: var、 function、 参数;(也被称之为预解析)

备注:如果遇到重名分为以下两种情况:遇到变量和函数重名了,只留下函数;遇到函数重名了,根据代码的上下文顺序,留下最后一个。

2、逐行解读代码。

备注:表达式可以修改预解析的值

JS解析器在执行第一步预解析的时候,会从代码的开始搜索直到结尾,只去查找var、function和参数等内容。一般把第一步称之为“JavaScript的预解析”。而且,当找到这些内容时,所有的变量,在正式运行代码之前,都提前赋了一个值:未定义;所有的函数,在正式运行代码之前,都是整个函数块。

三技能:JavaScript、HTML、CSS。

JavaScript早已超出了其“脚本语言”本身的范畴,而成为一种集健壮性/高效性和通用性为一身的编程语言。

编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定了诸如变量名是什么样的、怎么写注释,以及程序语句之间如何分割的等规则。

1.字符集

JavaScript程序是用Unicode字符集编写的。Unicode是ASCII和Latin-l的超集,并支持地球上几乎所有在用的语言。ECMAScript 3要求JS的实现必须支持Unicode2.1以及后续版本,ECMAScript5则要求支持Uniocde 3及以后版本。

Unicode与JavaScript详解

1.1.区分大小写

JS是区分大小写的语言。也就是说、关键字、变量、函数名和所有的标识符都必须采取一致的大小写形式。

注意:HTML不区分大小写、XHTML区分。

例如:在HTML中设置事件处理程序时,onclick属性可以写成OnClick,但在JS代码(或者在XHTML文档)中,必须使用小写的onclick.

1.2、空格、换行符、格式控制符

JS会忽略程序中的标识之间的空格.多数情况下,JS同样会忽略换行符.由于可以在代码中随意使用空格和换行,因此可以采用整齐,一致的缩进来形成统一的编码风格,从而提高代码的可读性.

除了可以识别普通的空格符(\u0020),JavaScript还可以识别如下这些表示空格的字符:水平制表符(\u0009)、垂直制表符(\u000B)、换页符(\u000C)、不中断空白 (\u00A0)、字节序标记 (\uFEFF),以及在Unicode中所有Zs类别的字符。JavaScript将如下字符识别为行结束符:换行符(\u000A),回车符(\u000D),行分隔符(\u2028),段分隔符(\u2029)。回车符加换行符在一起被解析为一个单行结束符。

Unicode格式控制字符,比如“从右至左书写标记”(\u200F)和“从左至右书写标记”(\u200E),控制着文本的视觉显示,这对于一些非英语文本的正确显示来说是至关重要的,这些字符可以用在JavaScirpt的注释、字符串直接量和正则表达式直接量中,但不能用在标识符(比如,变量名)中。但有个例外,零宽连接符(\u200D)和零宽非连接符(\uFEFF)译注6是可以出现在标识符中的,但不能作为标识符的首字符。上文也提到了,字节序标记格式控制符(\uFEFF)被当成了空格来对待。

JavaScript中表示空格的字符

1.3.Unicode转义序列

在有些计算机硬件和软件里,无法显示或输入Unicode字符全集(比如:é)。为了支持那些使用老旧技术的程序员,JS定义了一种特殊序列,使用6个ASCII字符来代表任意16位Uniocde内码.这些Uniocde转义序列均以\u为前缀,其后跟随4个十六进制数(使用数字以及大写或小写的字母A~F表示).这种Unicode转义写法可以用JS字符串直接量,正则表达式直接量和标识符中(关键字除外).例如,字符é的Unicode转义写法为\u00E9,如下两个JavaScript字符串是完全一样的:

"café" === "caf\u00e9" // => true 

Unicode转义写法也可以出现在注释中,但由于JavaScript会将注释忽略,它们只是被当成上下文中的ASCII字符处理,而且并不会被解析为其对应的Unicode字符。

但我们应该注意一点,Unicode是允许多种方法对同一字符进行编码的,用上述的é转义的例子来说明:

  • 可以使用Unicode字符\u00E9表示
  • 亦可用e\u0301(语调字符)表示

假如用这两个Unicode转义字符进行比较,计算机得出的结果反而不相同:

“\u00E9”===“e\u0301”  //false

比较facé与café中的é是否相同?

facé与café中的é都转化为\u00E9或者都转化为e\u0301,才能比较facé与café中的é是否相同

1.4.标准化

Unicode标准

Unicode允许使用多种方法对同一个字符进行编码。

2.注释

"//":单行注释

"/*......*/":多行注释,不能嵌套。

3.直接量

程序中直接使用的数据值

4.标识符和保留字

标识符:一个名字而已,用来对变量和函数进行命名,或者循环语句中跳转的标志。

以字母、下划线、美元符开始,不能用数字开头。

保留字(关键字):保留一些标识符给自己用。

5.可选的分号

程序能识别的,分号可用可不用;无法识别的,分号必须用。

需要注意的是:return、break和continue语句的场景中,如果换行的话也会自动在换行处添加分号;同时“++”和“--”,如果是作为后缀的话,则必须在同一行