词法结构
1. JavaScript 程序的文本
- JavaScript 区分大小写。
- JavaScript 将换行符、回车符和换行/回车序列识别为行终止符。
2. 注释
JavaScript 支持两种注释:
- 单行注释:以
//
开头到一行末尾的内容。 - 多行注释:位于
/*
和*/
之间的内容。
3. 标识符和保留字
- 标识符用于命名常量、变量、属性、函数和类,以及为某些循环提供标记。
- 标识符可以由字母、数字、下划线和 $ 组成,数字不能开头。
- JavaScript 语言当前已使用的标识符叫做关键字,如 if、while、for 等。
- JavaScript 语言当前未使用但后续版本可能使用的叫保留字,如 enum、implements、interface、package、private、protected、public 等。
4. Unicode
JavaScript 程序使用 Unicode 字符集编写,因此在字符串和注释中可以使用任意 Unicode 字符。
4.1 Unicode 转义序列
JavsScript 定义了转义序列,从而可以仅使用 ASCII 字符来表示 Unicode 字符。
说明
- Unicode 转义序列以
\u
开头,后跟 4 位 16 进制数或包含在一对花括号内的 1~6 位 16 进制数字。 - 转义序列可以出现在字符串字面量、正则表达式字面量和标识符中,不能出现在关键字中。
- 注释中的转义序列不会解释为 Unicode 字符。
javascript
// 带花括号版本是 ES6 新增的,目的是更好的支持大于 16 位的 Unicode 码点,如表情符号
console.log('\u{1F600}');
4.2 Unicode 归一化
- Unicode 允许用多种编码方式表示同一个字符,在编辑器中看起来相同,但二进制表示不同。
- Unicode 归一化是指统一采用某种编码方式。
- 在 JavaScript 中使用 Unicode 字符,应该保证编辑器或其它工具对源代码执行 Unicode 归一化,以防止其中包含看起来一样但实际不同的标识符。
javascript
const café = 1; // 这个常量名为 "caf\u{e9}"
const café = 1; // 这个常量名为 "cafe\u{301}"
5. 可选的分号
- JavaScript 使用分号分隔语句。
- 如果两条语句分别写在两行,通常可以省略它们之间的分号。
- JavaScript 并非任何时候都把换行符当作分号,只是在不隐式添加分号就无法解析代码的情况下才这样做。
javascript
let a
a
=
3
console.log(a)
// 上述代码解释为 let a; a = 3; console.log(a)
- return、throw、yield、break 和 continue 的后面可能会跟一个标识符或表达式,如果这几个关键字后有换行符,JavaScript 就会把换行符解释为分号,因此不能在这几个关键字和它们后面的表达式之间添加换行符。
++/--
自增或自减操作符如果后置,则必须与它们操作的表达式位于同一行。- 箭头函数的箭头
=>
必须与参数列表位于同一行。