《javaScript权威指南》读书笔记
本书笔记基于David Flanagan的《javaScript权威指南》原书第七版中文译本,也就是犀牛书。
词法结构
JavaScript程序的文本
- 区分大小写
- 忽略程序记号(token)之间的空格,很大程度上忽略换行符(也有例外)
不太理解什么叫程序记号
注释
1 | //单行注释 |
字面量
直接出现在程序中的数据值,如
1 | null |
标识符与保留字
标识符
用于命名常量、变量、属性、函数和类,就是一个名字,必需由字母,下划线,美元符号开头,可由字母、下划线、美元符号、数字组成。
保留字
一些不能作为标识符使用的单词,如for、if和while
当然还有一些比较复杂的情况,在一定情况下可以使用为标识符。不过最简单的做法就是不要使用这些单词作为标识符。
Unicode
JavaScript程序由Unicode字符集编写,意味标识符可以使用Unicode字母、数字和象形文字(不支持表情符号)。
Unicode转义序列
由于某些计算机硬件和软件无法识别、处理Unicode字符,故定义了转义字符,以\u
开头,后跟4为十六进制数或包含在一对花括号内的1~6位十六进制数字。
花括号版本是ES6新增的
Unicode归一化
由于不同编码方式的Unicode字符在js中是区分的,如下面的两个标识符
虽然看起来完全相同,但由于它们的二进制编码是不同的,所以js也会认为它们是不同的,这会导致看起来相同的两个标识符其实表示的是两个不同的标识符,在赋值等各个操作中会出现问题。
故在执行程序前,需要保证编辑器能够对源代码执行Unicode归一化。
可选的分号
分号用于分隔语句。
分号可省略的情况:
两条语句分别写在两行(不是一定的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28a = 3;//此时这个分号可以省略
b = 4;
a = 3;b = 4;//分号是必须的
//也不是所有的换行符都会被当作为分号,只有在不添加符号就无法解析代码的情况下才会把换行符当作分号
let a
a
=
3
console.log(a)
//会被解释为
let a; a = 3; console.log(a);
//这种机制会引发一些问题,如下面的例子
let y = x + f
(a+b).toString()
//会被解释为
let y = x + f(a+b).toString();//不一定与作者的真实意图一致
//另外一种情况,return、throw、yield、break、continue后面的换行符是一定会被解释为分号的
return
true;
//一定会被解释为
return;
true;
//故一定不能在这些保留字和他们后面的表达式之间加换行符另外,涉及到++、–操作符,必须与操作的表达式位于同一行。
箭头函数中的
=>
也必须与参数列表在同一行在程序的末尾,接下来的加号是
}