编程语言的词法结构是一套基础性的规则,用来描述你如何编写这门语言。作为语法的基础,它规定了变量名是怎么样的,如何写注释,以及语句之间是如何区分的。本节用很短的篇幅来介绍javascript的词法结构。
1.字符集
javascript程序是用Unicode字符集编写的,Unicode是ASCII和Latin-1的超集,并支持地区上几乎所有的语言。ECMAscript3要求javascript的实现必须支持Unicode2,1及后续版本,ECMAscript5则要求支持Unicode3及后续版本
i.区分大小写
javascript是区分大小写的语言,也就是说关键字、变量、函数名和所有的表述字符都必须采用一致的大小写 ,比如关键字while必须写成while,不能写成While或者WHILE。
但需要注意的是html并不区分大小写(尽管xhtml区分),由于它和客户端javascript联系紧密,因此很容易混淆。例如在html设置的处理事件中,onclick属性可以写成onClick,但在javascript中编写写成小写的onclick。
ii空格、换行符、和格式控制器
javascript会忽略程序中的标示(token)之间的空格,多数情况下,javascript同样会忽略换行符。由于可以在代码中随意使用空格和换行符,一次可以采用整齐和一致的缩进来形成统一的编码风格,提高代码的可读性。
javascript除了识别空格符(\u0020)。javascript还师表如下标示空格的字符:水平制表符(\u0009)、垂直制表符(\u000B)、换页符(\u000C)、不中断空白符(\u00A0)、字节序标记(\uFEFF),以及在Unicode中所有Zs类别的字符。javascript将如下字符识别为结束符:换行符(\u000A),回车符号(\u000D),行分隔符(\u2028),段分隔符号(\u2029)。回车符加换行符在一起呗解析为一个单行的结束符。
Unicode格式控制字符(Cf类),比如“从右至左书写标记”(\u200F)和从“从左至右书写标记”(\u200E),控制着文本的视觉显示。这对一些非英语文本的正确显示来说是至关重要的,这些字符可以在javascript的注释,字符串直接量和正则表达式直接量中,但不能用在标示符(比如,变量名)中,但有个例外零宽连接符(\u200D)和零宽非连接符(\uFEFF)是可以出现在标示符中,但不能作为标识符的手字符。上文也提到了,字节序标记格式控制符(\uFEFF)被当成了空格来对待
iii.Unicode转义序列
在有些计算机硬件和软件里,无法显示或输入Unicode字符全集。为了支持哪些使用老旧技术的程序员,javascript定义了一种特殊序列,使用6个ASCII字符来代表任意16位的Unicode内码。这些Unicode转义序列以\u为前缀,其后跟随十六进制鼠(使用数字以及大小写字母A-F表示)。这种Unicode转义写法可以用在javascript字符串直接量、正则表达式之江路和标示符中(关键字除外)。例如字符é的Unicode转义写法为\u00E9,如下两个Javascript字符串完全是一样的。
"café" === "caf\u00e9" => true
Unicode转义写法可以出现在注释中,但是由于javascript会将注释忽略,他们只是被当成成上下文中的ascii字符处理,并不会接下到对于的Unicode字符
iiii标准化
Unicode允许使用多种方法对同一个字符进行编码。比如字符é可以使用Unicode字符\u00E9,也可以使用普通的ascii字符e跟随一个语调符号\u0301 ,在文本编辑器中,这两个编码显示的结果是一摸一样的,但是它们的二进制编码表示是不一样的,在计算机里也不相等。Unicode标准为索引字符定义了一个首选的代码格式,并给出了一个标准化的处理方式将文本转化为一种适合比较的标准格式,不会再对其它表示、字符串或者正则表达式做标准化处理。
2.注释
javascript支持两种注释方式,在行尾"//"之后的文本都会被javascript当做注释忽略掉的。
此外/*和*/之间的文本也会当做注释。这种注释可以跨行书写,但不能有嵌套注释。
//单行注释
/*
*
*
*
*/
3.直接量
所谓直接量(literal),就是程序中直接使用的数据值,下面列出直接量
复制代码 代码如下:
12 //数字
1.2 //小数
"Hllo World" //字符串文本
'hi' //另一个字符串
true //布尔值
false //布尔值
/ javascript / gi //正则表达式直接量(用做模式匹配)
null //空
第3章会详细讲解数字和字符串直接量。正则表达式直接量会在第10章讲解。更多福祉的表达式,可以写成数组或对象直接量。
{x:1,y:2} //对象
[1,2,3,4,5] //数组
4.标识符和保留字