编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序。作为语法的基础,它规定诸如变量名是什么样的、怎样写注释,以及程序语句之间如何分隔等规则。
2.1 、字符集
JavaScript程序使用Unicode字符集编写的。
Unicode是ASCII和Lantin-1的超集,并支持地球上几乎所有的语言。ECMAScript 3 要求JavaScript的实现必须支持Unicode2.1及后续版本,ECMAScript 5则要求支持Unicode3及后续版本。
2.1.1、区分打小写
JavaScript是区分大小写的语言。
需要注意,HTML并不区分大小写(尽管XHTML区分大小写)。由于它和客户端JavaScript联系紧密,因此这点区别很容易混淆。许多客户端JavaScript对象和属性与它们表示的HTML标签和属性同名。在HTML中,这些标签和属性名可以使用大写也可以使用小写。而JavaScript中则必须是小写。
2.1.2、空格、换行符和格式控制符
JavaScript会忽略程序中标示之间的空格,多数情况下,它同样会忽略换行符。
除了可以识别普通的空格符(\u0020),JavaScript还可以识别如下这些表示空格的字符:水平制表符(\u0009)、垂直制表符(\u000B)、换页符(\u000C)、不中断空白(\u00A0)、字节序标记(\uFEFF)、以及Unicode中所有Zs类别的字符。
JavaScript将如下字符识别为行结束符:换行符(\u000A),回车符(\u000D),行分隔符(\u2028),段分隔符(\u2029)。回车符加换行符在一起被解析为一个单行结束符。
2.1.3、Unicode转义序列
Unicode转义序列均以\u为前缀,其后跟随4个十六进制数。
2.1.4、标准化
Unicode允许使用多种方法对同一个字符进行编码。Unicode标准为所有字符定义了一个首先的编码格式,并给出了一个标准化的处理方式将文本转化为一个适合比较的标准格式,JavaScript会人为它正在解析的程序代码已经是这种标准格式,不会再对其标示符、字符串或正则表达式作标准化处理。
2.2、注释
Javascript支持两种格式的注释。再行尾"//"之后的文本都会被JavaScript当做注释忽略掉的。此外,在”/*“和"*/"之间的文本也会当做注释,这种注释可以跨行书写,但不能由嵌套的注释。
下面都是合法的JavaScript注释:
// 这里是单行注释
/*这里是一段注释*/ //这里是另一段注释
/*
*这又是一段注释
*这里的注释可以连续写多行
*/
2.3 直接变量
所谓直接量(literal),就是程序中直接使用的数据值。下面列出的都是直接量:
12 //数字
1.2 //小数
"hello world" //字符串
'Hi' //另一个字符串
true //布尔值
false //另一个布尔值
/javascript/gi //正则表达式直接量(用做模式匹配)
null //空
2.4、标识符和保留字
2.4.1、标识符
JavaScript标识符必须以字母、下划线或美元开始,后续的字符可以是字母、数字、下划线或美元(数字是不能作为首字符出现的,以便JavaScript可以轻易区分开标识符和数字)。
出于可移植性和易于书写的考虑,通常我们只使用ASCII和数字来书写标识符。当然,JavaScript允许标识符中出现Unicode字符全集中的字母和数字。
2.4.2、保留字
2.4.2.1、关键字
JavaScript把一些标识符拿出来做自己的关键字。因此,就不能再在程序中把这些关键字用作标识符了。
break delete function return typeof
case do if seitch var
catch else in this void
continue false instanceof throw while
debugger finally new true with
default for null try
2.4.2.2、保留字
A、JavaScript同样保留了一些关键字,这些关键字在当前的语言版本中并没有使用,但在未来版本中可能会使用。ECMAScript 5保留了这些关键字:
class const enum export extends import super
B、此外,下面这些关键字在普通的JavaScript代码中是合法的,但在严格模式下是保留字:
implements let private public yiels interface package protected static
C、严格模式同样对下面的使用做了严格限制,它们并不完全是保留字,但不能用做变量名、函数名或参数名:
arguments eval
D、ECMAScript 3将Java的所有关键字都列为自己的保留字,尽管这些保留字在ECMAScript 5中放宽了限制,但如果你希望代码能在基于ECMAScript 3实现的解释器上运行的话,应当避免使用这些关键字作为标识符:
abstract double goto native static
booleam enum implements package super
byte export import private synchronized
char extends int protected throws
class final interface public transient
const float long short volatile
E、JavaScript预定义了很多全局变量和函数,应当避免把它们的名字用做变量名和函数
arguments encodeURI Infinity number RegExp
Array EncodeURIComponent isFinite Object String
Boolean Error isNaN parseFloat SyntaxError
Date eval JSON paseInt TypeError
decodeURI EvalError Math RangeError undefined
decodeURIComponent Function NaN referenceError URIError
2.5、可选的分号
保持严谨的习惯,编写优美的代码即可。