0%

《JavaScript权威指南》读书笔记

《javaScript权威指南》读书笔记

本书笔记基于David Flanagan的《javaScript权威指南》原书第七版中文译本,也就是犀牛书。

词法结构

JavaScript程序的文本

  • 区分大小写
  • 忽略程序记号(token)之间的空格,很大程度上忽略换行符(也有例外)

不太理解什么叫程序记号

注释

1
2
3
4
5
6
7
8
//单行注释

/*单行注释*/

/*
*多行注释
*每行开头额外的*不是必需的,只是为了美观
*/

字面量

直接出现在程序中的数据值,如

1
2
3
4
5
null
false
1.2
1
'hello world'

标识符与保留字

标识符

用于命名常量、变量、属性、函数和类,就是一个名字,必需由字母,下划线,美元符号开头,可由字母、下划线、美元符号、数字组成。

保留字

一些不能作为标识符使用的单词,如for、if和while

当然还有一些比较复杂的情况,在一定情况下可以使用为标识符。不过最简单的做法就是不要使用这些单词作为标识符。

Unicode

JavaScript程序由Unicode字符集编写,意味标识符可以使用Unicode字母、数字和象形文字(不支持表情符号)。

Unicode转义序列

由于某些计算机硬件和软件无法识别、处理Unicode字符,故定义了转义字符,以\u开头,后跟4为十六进制数或包含在一对花括号内的1~6位十六进制数字。

花括号版本是ES6新增的

image-20230316020145144

Unicode归一化

由于不同编码方式的Unicode字符在js中是区分的,如下面的两个标识符

image-20230316021128685

image-20230316021145803

虽然看起来完全相同,但由于它们的二进制编码是不同的,所以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
    28
    a = 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;
    //故一定不能在这些保留字和他们后面的表达式之间加换行符

    另外,涉及到++、–操作符,必须与操作的表达式位于同一行。

    箭头函数中的=>也必须与参数列表在同一行

  • 在程序的末尾,接下来的加号是}

-------------本文结束感谢您的阅读-------------
原创技术分享,您的支持将鼓励我继续创作