阅读(713) (0)

JavaScript学习笔记整理(1):词法结构

2017-06-19 11:57:23 更新
编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序。

1、字符集

JavaScript程序是用Unicode字符集编写的。 1.1 区分大小写 JavaScript是区分大小写的语言。也就是说,关键字、变量、函数名和所有标识符(identifier)都必须采取一致的大小写形式。比如:“name”和“Name”是不同的变量。 1.2 空格、换行符和格式控制符 在JavaScript中,会忽略程序中标识之间的空格。而对于换行符,JavaScript在多数情况下也会忽略,但有一种情况例外:当在return、break、continue语句后添加换行符时,JavaScript会在换行处添加分号。 JavaScript可以识别一些特殊字符:

空格符(\u0020) 水平制表符(\u0009) 换页符(\u000C) 换行符(\u000A) 回车符(\u000D)

回车符加换行符在一起被解析为一个单行结束符。 1.3 Unicode转义序列 JavaScript定义了一种特殊序列,用6个ASCII字符来代表任意16位Unicode内码。这些Unicode转义序列均以\u为前缀,其后跟随4个十六进制数(使用数字以及大写或小写字母A~F表示)

2、 注释

JavaScript提供了两种格式的注释。 单行注释: 以//开头 多行注释:放在 /* 和 */之间(可跨行书写,但不能有嵌套注释)

3、 直接量

直接量:程序中直接使用的数据值。比如:

12  //数字

1.2  //小数

"hello world"  //字符串

true  //布尔值

/javascript/gi  //正则表达式直接量

null  //空

4、 标识符和保留字

标识符(identifier)是用来识别具体对象的一个名称。 JavaScript语言的标识符对大小写敏感,所以a和A是两个不同的标识符。 标识符命名规则: 第一个字符不能为数字,可以是任意Unicode字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_) 第二个字符及后面的字符,除了Unicode字母、美元符号和下划线,还可以用数字。 中文是合法的标识符,可以用作变量名。 JavaScript有一些保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。 另外,还有三个词虽然不是保留字,但是因为具有特别含义,也不应该用作标识符:Infinity、NaN、undefined。

5、 可选的分号

JavaScript使用分号(;)将语句分隔开。 注意:JavaScript并不是在所有换行处都填补分号,只有在缺少了分号就无法正确解析代码的时候,才会填补分号。也可以说,如果当前语句和随后的非空格字符不能当做一个整体来解析时,JavaScript就在当前语句行结束处填补分号 。比如下面代码:

var a

a

=

3

console.log(a)

JavaScript将其解析为:

var a;a=3;console.log(a);

JavaScript给第一行换行处添加了分号,因为没有分号,JavaScript就无法解析代码var a a。第二个a可以单独当做一条语句“a;”,但JavaScript并没有给第二行结尾填补分号,因为它可以和第三行内容一起解析成“a=3”。
上面的代码解析后是没有问题的,可是没有主动添加分号,有些时候会导致意想不到的情形。比如:

var y=x+f

(a+b).toString()

解析后:

var y=x+f(a+b).toString();

如果当前语句和下一行语句无法合并解析,JavaScript则在第一行后填补分号,这是通用规则,但有两个例外。


第一个例外是在涉及return、break和continue语句的场景总,如果这三个关键字后紧跟换行,JavaScript则会在换行处填补分号。

例如:

return

true;

JavaScript会解析成:

return; true;


第二个例外是在涉及“++”和“--”运算符的时候。

x

++

y

将会解析成 “x;++y”,而不是“x++;y”


适当的添加分号,可避免意想不到的错误。