Skip to content

词法结构

1. JavaScript 程序的文本

  • JavaScript 区分大小写。
  • JavaScript 将换行符、回车符和换行/回车序列识别为行终止符。

2. 注释

JavaScript 支持两种注释:

  1. 单行注释:以 // 开头到一行末尾的内容。
  2. 多行注释:位于 /**/ 之间的内容。

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)
  • returnthrowyieldbreakcontinue 的后面可能会跟一个标识符或表达式,如果这几个关键字后有换行符,JavaScript 就会把换行符解释为分号,因此不能在这几个关键字和它们后面的表达式之间添加换行符。
  • ++/-- 自增或自减操作符如果后置,则必须与它们操作的表达式位于同一行。
  • 箭头函数的箭头 => 必须与参数列表位于同一行。