bob体育官方平台
Javascript核心读书有感之词法结构_基础知识_脚本之家

编程语言的词法结构是一套基础性的规则,用来描述你如何编写这门语言。作为语法的基础,它规定了变量名是怎么样的,如何写注释,以及语句之间是如何区分的。本节用很短的篇幅来介绍javascript的词法结构。

《JavaScript权威指南 第六版 中文版》

1.字符集

第二章 词法结构

javascript程序是用Unicode字符集编写的,Unicode是ASCII和Latin-1的超集,并支持地区上几乎所有的语言。ECMAscript3要求javascript的实现必须支持Unicode2,1及后续版本,ECMAscript5则要求支持Unicode3及后续版本

2.1字符集

JavaScript是使用Unicode字符集编码写的。

i.区分大小写

2.1.1区分大小写

JavaScript是区分大小写的语言。也就是说,关键字、变量、函数名和所有的标识符都需要采用一致的大小写形式。

许多客户端JavaScript对象和属性与它们所表示的HTML标签和属性同名。在HTML中这些标签和属性名可以使用大写,而在JavaScript中则必须使用小写

javascript是区分大小写的语言,也就是说关键字、变量、函数名和所有的表述字符都必须采用一致的大小写 ,比如关键字while必须写成while,不能写成While或者WHILE。

2.1.2空格、换行符和格式控制符

JavaScript会忽略程序中标志(token)之间的空格。多数情况下,JavaScript会忽略换行符(2.5节 提到一种以外情形),由于可以在代码中随意使用空格和换行,因此可以使用整齐一致的缩进来形成统一一致的编码风格,从而提高代码的可读性。

除了能够识别普通的空格符(u0020),JavaScript还可以识别如下这些表示空格的字符:水平制表符(u0009)、垂直制表符(u000B)、换页符(u000C)、不中断空格符(u00A0)、字节序标记(uFEFF),以及在Unicode中所有的Zs类别的字符

JavaScript将如下字符识别为行结束符,换行符(u000A)、回车符(u000D)、行分隔符(u2028)、段分隔符(u2029)。回车符加换行符在一起被解释为一个单行结束符。

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

但需要注意的是html并不区分大小写,由于它和客户端javascript联系紧密,因此很容易混淆。例如在html设置的处理事件中,onclick属性可以写成onClick,但在javascript中编写写成小写的onclick。

2.1.3Unicode转义序列

使用6位ASCII字符代表任意16位Unicode内码,这些Unicode转义序列均以u为前缀,后面跟4个16进制数。这种Unicode转义写法可以在JavaScript字符串直接量、正则表达式直接量和标识符中使用。

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

ii空格、换行符、和格式控制器

2.1.4标准化

Unicode标准为所有字符定义了一个首选的编码格式,并给出了一个标准化的处理方式将文本转换为一种适合比较的标准格式,Javasoript会认为它正在解析的程序代码已经是这种标准格式,不会再对其标识符、字符串或正则表达式作标准化处理。

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

2.2注释

JavaScript支持两种格式的注释。在行尾“//”之后的文本都会被JavascriPt当做注释忽略掉的。此外,"/”和“/”之间的文本也会当做注释,这种注释可以跨行书写,但不能有嵌套的注释。

javascript除了识别空格符。javascript还师表如下标示空格的字符:水平制表符、换页符、不中断空白符,以及在Unicode中所有Zs类别的字符。javascript将如下字符识别为结束符:换行符,行分隔符。回车符加换行符在一起呗解析为一个单行的结束符。

2.3直接量

所谓直接量(literal),就是程序中直接使用的数据量。

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

2.4标识符和保留字

标识符就是一个名字。在JavaScript中,标识符用来对变量和函数进行命名,或者用做JavaScript代码中某些循环语句中的跳转位置的标记。JavaScript标识符必须以字母、下划线(_)或美元符($)开始。后续的字符可以是字母、数字、下划线或美元符(数字是不允许作为首字符出现的,以便JavaScript可以轻易区分开标识符和数字)。

出于可移植性和易于书写的考虑,通常我们只使用ASCII字母和数字来书写标识符。然而需要注意的是,JavaScript允许标识符中出现Unicode字符全集中的字母和数字。

保留字

图片 1

关键字
class const enum export extends super

iii.Unicode转义序列

2.5可选的分号

在JavaScript中,如果语句各自独占一行,通常可以省略语句之间的分号(程序结尾或花括号"}"之前的分号也可以省略),一般使用分号(;)来明确标记语句的结束,即使并不完全需要分号的时候也是如此。

注意几个细节

如果按照如下方式等号可以省略:
a=3;
b=4;

如果按照如下方式等号不能省略:
a=3;b=4;

需要注意的是,JavaScript并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。换句话讲(类似下面代码中的两处异常),如果当前语句和随后的非空格字符不能当成一个整体来解析的话,JavaScript就在当前语句行结束出填补分号。
看如下代码:
var a

a

3

通常来讲,如果一条语句以"("、"["、"l"、"/”、"+"或"一"开始,那么它极有可能和前一条语句合在一起解析。以"+"和"一"开始的语句并不常见,而以"("和"["开始的语句则非常常见,至少在一些JavaScript编码风格中是很普遍的。有些程序员喜欢保守地在语句前加上一个分号,这样哪怕之前的语句被修改了、分号被误删除了,当前语句还是会正确地解析。

在return、break和continue和随后的表达式之间不能有换行。

如果将"++"、"--"运算符用作后缀表达式,它和表达式应当在同一行,否则行尾将填补分号,例如:
x
++
y
这段代码将被解析成"x;++y",而不是"x++;y"


注释:
[Zs]: Unicode对字符做了分类,这种分类使用“通用类别值”表示,这里的“Zs”是其中的一种类别值,特指没有标志符号,但不属于控制和格式字符的空格字符。

在有些计算机硬件和软件里,无法显示或输入Unicode字符全集。为了支持哪些使用老旧技术的程序员,javascript定义了一种特殊序列,使用6个ASCII字符来代表任意16位的Unicode内码。这些Unicode转义序列以u为前缀,其后跟随十六进制鼠。这种Unicode转义写法可以用在javascript字符串直接量、正则表达式之江路和标示符中。例如字符é的Unicode转义写法为u00E9,如下两个Javascript字符串完全是一样的。

"café" === "cafu00e9" => true Unicode转义写法可以出现在注释中,但是由于javascript会将注释忽略,他们只是被当成成上下文中的ascii字符处理,并不会接下到对于的Unicode字符

iiii标准化

Unicode允许使用多种方法对同一个字符进行编码。比如字符é可以使用Unicode字符u00E9,也可以使用普通的ascii字符e跟随一个语调符号u0301 ,在文本编辑器中,这两个编码显示的结果是一摸一样的,但是它们的二进制编码表示是不一样的,在计算机里也不相等。Unicode标准为索引字符定义了一个首选的代码格式,并给出了一个标准化的处理方式将文本转化为一种适合比较的标准格式,不会再对其它表示、字符串或者正则表达式做标准化处理。

2.注释

javascript支持两种注释方式,在行尾"//"之后的文本都会被javascript当做注释忽略掉的。此外/*和*/之间的文本也会当做注释。这种注释可以跨行书写,但不能有嵌套注释。

//单行注释/*** * */3.直接量

所谓直接量,就是程序中直接使用的数据值,下面列出直接量

复制代码 代码如下: 12 //数字 1.2 //小数 "Hllo World" //字符串文本 'hi' //另一个字符串 true //布尔值 false //布尔值 / javascript / gi //正则表达式直接量 null //空

第3章会详细讲解数字和字符串直接量。正则表达式直接量会在第10章讲解。更多福祉的表达式,可以写成数组或对象直接量。

{x:1,y:2} //对象 [1,2,3,4,5] //数组

4.标识符和保留字

标识符就是一个名字。在javascript中,标识符用来对变量和函数进行命名,或者用做javascript代码中某些循环语句中的跳转位置的标记。javascript标识符必须以字母。下划线、或者美元符号开始。后续的字符可以是字母。数字。下划线或者美元符号(数字是不许作为首字母出现的,一遍javascript可以轻易区分开标识符和数字)、下面是合法的标识符

复制代码 代码如下:my_variable_name b13 _dummy $str

返回顶部