3.1 基本语法
3.1.1 语句
JavaScript中的语句以英文分号(;)结束,表示一行代码的结束,但分号可以省略,解析器(例如浏览器的JavaScript引擎)会在解析JavaScript代码时自动在每个语句的结尾补上分号。
let a = 1;
尽管分号可以省略,但不建议省略,因为在某些情况下,自动补全的分号会导致代码的运行结果与期望的不一致,例如下面的代码:
会被解析为:
不过,编码规范的问题主要看个人和团队的习惯和要求,这方面没有强制的要求。
3.1.2 注释
注释通常用来对一段代码进行描述,以便开发人员能快速了解这段代码的作用,提高代码的可读性,也可以用来屏蔽一段代码的运行。
在JavaScript中,你可以使用单行注释和多行注释,注释中的语句不会被解析器解析并执行,具体如下。
下面以1.4.1小节中的示例代码为例,对其中的JavaScript代码进行注释:
保存修改后刷新页面,此时浏览器中将不再出现hello world字样,而是显示空白。
此外,良好的注释有利于代码的可维护性和团队协作性,在工作和学习中这一点都很重要。
3.1.3 标识符
标识符指的是变量、属性、函数的名称或函数的参数,示例如下。
在上述代码中:
- 变量名num、obj是标识符。
- 属性名name是标识符。
- 函数名foo是标识符。
- 函数参数arg是标识符。
到这里,你可能发现了一个规律,标识符都是英文字母,那么,标识符的名称是不是只能由英文字母组成呢?
1. 标识符的命名
标识符不全是由英文字母组成的,标识符以字母、下画线或$符号开头,其后选择性地跟随一个或多个字母、数字、下画线、$符号。
其中,字母可以是中文、英文、日文、韩文等,这是因为JavaScript中的字母是采用Unicode统一编码制的,是国际上通用的16位编码制,它包含了亚洲文字编码。因此,JavaScript的字母不是只有英文字母。
示例如下。
上述代码可以正常运行。
2. 标识符名称区分大小写
标识符的名称区分大小写,变量名a和变量名A表示两个不同的变量,阅读并运行下面的代码。
let a = 1; let A = 1; a === A; // -> false
3. 标识符名称不能为关键字和保留字
关键字有其特定含义,是语法中的一部分,例如常见的var,我们不能定义一个变量名为var的变量,具体如下。
//运行报错
let var = 1;
保留字是语法中定义过的字,为了使当前版本的代码能向后兼容,为将来的关键字保留的单词,因此,保留字也不允许作为标识符使用,具体如下。
//运行报错
let int = 1;
4. 标识符作为属性名时,可以为关键字和保留字
示例如下。
5. 标识符命名规范
命名规范并不是语言标准的一部分,命名规范是通过一些约定俗成的方式对标识符的命名进行限制的,使其有利于他人或自己阅读。
常见的命名规范有以下3种。
- 匈牙利命名法
- 驼峰式命名法
- 帕斯卡命名法
· 匈牙利命名法
匈牙利命名法是在单词(这个单词的首字母需要大写,并指明变量的用途)前面加上表示相应的小写字母的符号作为前缀,标识出变量的作用域和类型等,这些符号可以有多个,并组合成一个变量名。
在匈牙利命名法中,s表示字符串String,所以一个字符串的变量名可以是:
let sMyName; let sMyFirstName;
· 驼峰式命名法
驼峰式命名法通过拆分单词,并将第一个单词以小写字母开始,第二个及之后的单词的首字母大写,组合成一个变量名,示例如下。
let myName; let myFirstName;
这样的变量名看上去就像驼峰一样此起彼伏,因而得名。
· 帕斯卡命名法
与驼峰式命名法类似,只不过驼峰式命名法是第一个单词的首字母小写,而帕斯卡命名法是第一个单词的首字母也大写,示例如下。
let MyName; let MyFirstName;
无论使用哪种命名法,尽量使变量名具有特定的含义,即便变量名会变得比较长,但要避免定义一些奇怪的变量名。
练习
- 命名一些标识符。