在上一篇文章中,我们回顾了 JavaScript 的发展历史,然后书写了我们的第一个 JavaScript 程序。

在本章中,我们会更加深入一点,开始具体的学习 JavaScript 的词法结构。

本文主要包含以下内容:

  • 程序文本
  • 注释
  • 字面量
  • 标识符和保留字
  • 语句

程序文本

JavaScript 中,是区分大小写的。这意味着它的关键字、变量、函数名和其他标识符必须始终保持一致的大小写形式。

例如,while 关键字必须写成“while”,不能写成“While”或者“WHILE”。

类似的,online、Online、OnLineONLINE4 个完全不同的变量名。

另外,JavaScript 会忽略程序记号(token)之间的空格,因此在 JavaScript 程序中,我们可以随意的使用空格和换行,以便按照比较便于阅读理解的方式来书写代码。

注释

所谓注释,是指对代码的补充说明,不会影响程序的执行结果。

之所以书写注释,就是为了让阅读代码的人更加方便。

拥有良好注释的代码是专业程序员的标志,它让阅读我们代码的任何人(包括我们自己)能更加容易的理解某一段代码的作用是什么。如果没有注释,往往在几周后,我们回过头来阅读自己写的代码时会发现,自己都看不懂。

JavaScript 中,注释可以分为单行注释多行注释

单行注释如下:

  1. // 这是一个单行注释

多行注释如下:

  1. /*
  2. *
  3. * 这是一个较长的
  4. * 多行的注释
  5. *
  6. */

不过,虽然说写注释是一个好习惯,这也不是意味着每一句代码都要写注释。

往往我们是针对某一个功能来书写一个注释说明,像下面这样的注释是毫无意义的:

  1. var i = 5; // 将 5 赋值给 i 变量

字面量

字面量,英文全称 literal,是一种直接出现在程序中的数据值。

例如,12、1.2、”Hello World”、’Hi’、true、false,这些我们都称之为字面量,表示的就是它们的字面意思。

标识符和保留字

简单来讲,标识符就是一个名字。在 JavaScript 中,标识符用于命名变量、属性、函数和类。

在创建标识符时,需要遵守一定的规则,规则大致可以分为 2 大类,硬性要求软性要求

硬性要求

  • 以数字,字母,下划线和美元符号组成,不允许包含其他特殊符号
  • 不能以数字开头
  • 禁止使用 JavaScript中 的关键词和保留字来进行命名
  • 严格区分大小写

软性要求

  • 望文知意

在上面的命名规则中,提到了不能以保留字作为标识符。

所谓保留字,就是指 JavaScript 语言中内置的标识符,例如 if、for、while 等,这些标识符在程序中有特定的含义,所以我们不能使用这些标识符来作为我们的变量名或者函数名。

常见的保留字有:

  1. as const export get null target void async continue extends if of this
  2. while await debugger false import return throw with break default
  3. finally in set true yield case delete for instanceof static try catch
  4. do from let super typeof class else function new switch var

除此之外,JavaScript 还会保留或限制某些关键字的使用,这些关键字在当前语言版本并为使用,但在将来的某个版本可能会用到。例如:

  1. enum implements interface package private protected public

由于历史原因,某些情况下也不允许使用 argumentseval 作为标识符,因此最好不要使用。

另外,上面的软性要求中,还提到了望文知意,所谓望文知意,指的是命名一个标识符时,能从该标识符上就能猜到是用来干嘛的。例如:

  1. // 创建一个标识符用来存放高度
  2. height // OK,通过该标识符就只能知道存放的值表示高度
  3. abc // 不推荐,从命名上并不能知道该标识符是干什么的

在创建标识符时,还有一些常见的命名法则,这里介绍常见的 3 种命名法则。

1. 匈牙利命名法

匈牙利命名法是微软公司下面以为匈牙利籍的程序员所发明的命名法则,其特点是标识符的名字以一个或者多个小写字母开头,表示了该变量的数据类型。

匈牙利命名法中特定字母所对应的含义如下表:

数据类型 对应前缀
Array 数组 a
Boolean 布尔 b
Float 浮点 f
Function fn
Interger(int) 整型 i
Object 对象 o
Regular Expression 正则 re
String 字符串 s

前缀之后的是一个单词或多个单词的组合,该单词表明变量的用途。例如:

  1. a_arrayo_objecti_userAgeb_isPassed

2. 驼峰命名法

驼峰命名法实际上分为两种,一种是大驼峰,另外一种是小驼峰

大驼峰又被称之为帕斯卡命名法,就是每一个单词都是首字母大写。例如:

  1. UserName

小驼峰和大驼峰的区别在于,小驼峰的第一个单词的首字母是小写,后面单词的首字母是大写,例如:

  1. userName

3. 蛇形命名法

这种命名法常见于 Linux 内核,C++ 标准库,Boost 以及 Ruby,Rust 等语言。蛇形命名法的特点在于单词与单词之间使用下划线进行分隔。例如:

  1. user_namemy_first_name

语句

在英文里面,我们以一个点来表示一句话结束,在中文里面,我们以一个句号表示一句话结束。类似的,在 JavaScript 程序中,我们以一个分号来表示一句话结束。

例如:

  1. var i = 10;
  2. console.log(i); // 10

每条语句独占一行的形式来书写代码。

JavaScript 中,语句的分号是可选的,如果一条语句后面不添加分号,也不会报错,省略分号意味着由解析器来确定在哪里结尾。

不过,即使语句末尾的分号不是必须的,也应该加上。写上分号后有助于提升解析器解析代码的速度。另外,没有分号的代码在进行代码压缩的时候,也有可能会带来一些问题。

所以建议大家在书写 JavaScript 每条语句时还是加上分号。

总结

  1. JavaScript 程序区分大小写。

  2. 注释为了让阅读代码的人更加便于阅读,书写注释是一种良好的编程习惯。

  3. JavaScript 中,注释分为单行注释和多行注释。

  4. 所谓字面量,就是指一种直接出现在程序中的数据值。

  5. 所谓标识符,就是指给变量、函数或者类等取一个名字。创建标识符时,要遵循一定的规则。

  6. 所谓保留字,是指 JavaScript 中内置的标识符。不能使用这些标识符来作为变量名或者函数名。

  7. JavaScript 程序中,一个分号来表示一句话结束。

-EOF-