代码质量
每一种语言都有根据自己的特性量身定做的规范,JavaScript 也不例外
标识符命名
标识符不但是程序中的语法单位,也可以认为是程序员之间交流的一种"行话"。如果随心所欲的命名,那么形成的很可能不是"行话",而是密码,对于团队开发是一种噩梦。所以,标识符的命名一定要清晰且有明确的含义,通常使用完整单词或者众所周知的单词缩写构成
- 驼峰命名法:如果一个标识符由多个完整单词或者单词缩写构成,如果统一大写或者小写形式并不有利于阅读,规则很简单,就是将构成标识符的单词或单词缩写的首字符大写,也叫小驼峰
- 帕斯卡命名法:帕斯卡命名法也叫大驼峰命名法,和小驼峰区别就是所有的首字符全部大写
- 匈牙利命名法:此命名法对标识符进行了更为精细的划分,传达给阅读者的信息也会更多,标识符的名称构成:属性+类型+功能描述的顺序组合起,表示属性和类型的部分采用小写,功能描述部分首字母大写的一个单词或多个单词组合
在实际工作中具体采用哪种命名规则,则需要根据自己的需要和团队开发的需要,最终的目的是为了自己或者团队合作的便利,并且命名规则一旦确立就要始终执行,不要同一类型的标识符采用不同的命名规则
变量和常量
变量使用小驼峰命名法,前缀为形容词
// 好
let maxCount = 10;
let tableTitle = '啦啦啦';
// 不好
let setConut = 10;
let getTitle = '啦啦啦';
当 const 仅限常量而不是引用时全部大写,用下划线分割单词
const MAX_COUNT = 10;
函数
使用小驼峰命名,前缀使用动词,这是推荐的动词约定:
动词 | 含义 |
---|---|
can | 能够做某个动作 |
has | 是否有某个值 |
is | 是否为某个值 |
get | 获取某个值 |
set | 设置某个值 |
load | 加载某些数据 |
on | 事件处理 |
// 是否可阅读
function canRead() {}
// 获取名称
function getName() {}
注释规范
注释的总则,能不注释,就尽量不对代码进行注释,以减少体积。如果必须要注释,则注释必须详尽,格式科学,提高代码的可读性。也就是说注释并不是用来美化代码的,而是为了便于自己活着其他程序员的阅读便利性。它是一种负担,但是为了团队开发等目的又是必要的。函数是使用最为频繁的语法结构,相对而言比较复杂,良好的注释会对于理解函数的功能非常有必要
/*
*@param {参数类型}参数名 参数说明
*@return {返回值类型} 返回值说明
*@fix 需要处理的bug
*/
简单的例子:
/*
*@param {Number} v1 传入一个Number类型的值
*@param {Number} v2 传入一个Number类型的值
*@return {Number} 返回最大值
*@fix 没有对参数进行类型检测
*/
function getMaxValue(v1, v2) {
if(v1 > v2) return v1;
return v2;
}
知道为什么需要注释,也就知道注释应该怎么写。注释的目的是告诉阅读者不宜察觉或者不易获取到的信息,而不是一目了然的东西,比如废话:
// 声明一个变量 timer
let timer = null;
只要不是蠢得可以,都知道上面是声明的一个变量,根本用不着注释。应该强调这个变量将来要发生的作用,修改如下:
// 用来存储定时器函数的标识
let timer = null;
省略分号
关于 JavaScript 语句后面是否应该省略分号,有两种截然相反的意见。一种意见是,语句后面应该时时刻刻使用分号,另一种则是尽量不使用分号,甚至完全不使用
当然作为一种编码习惯,没有所谓的应该不应该,只有习惯不习惯,或者说喜欢不喜欢。如果达到比较高的水准,能够确保不会出错,那么可以尽可能的省略分号的使用
加不加分号并不是重点,重要的是掌握什么时候加分号,什么时候不加会出现意外。JavaScript 解析器会将换行看做当前语句的一部分,除非人为添加一个分号结束当前行语句。以下代码是会被正确的解析,可以认为是 JavaScript 解析器自动填补了分号
let foo = null
let bar = null;
如果编码时语句是以下形式,则会报错,因为解析器检测到了两个声明变量,其中一个没有分号,则会在一行末尾添加分号
let foo = null let bar = null;
利用这个特点,可以在一些语句上巧用这个方法来达到目的,以下代码本意是返回字符串“你也想起舞吗”,实际上返回的是undefined
,因为对于return
来说,如果后面是换行,解析器会自动在后面添加一个分号
function fn() {
return
"你也想起舞吗"
}
for 循环中的分号是绝对不能省略的,即使没有任何参数
比较判断
JavaScript中,如果要比较两个数据,最好使用带有类型判断的方式,以下代码母的是判断两个数值相同,但使用的不是全等运算符,这就导致结果可能出现意外,所以应使用全等运算符比较:
let a = 2;
let b = 3;
console.log((a == b));
console.log((a === b));
需要注意的是不要盲目的全部使用,而是尽量使用带有类型判断的比较
应使用字面量创建数组和对象
创建对象或者数组可以通过两种方式:构造函数和字面量赋值方式。两种方式都是等效的,但更推荐字面量方式创建
构造函数:
let arr = new Array(1,2,3,4,5);
let obj = new Object();
obj.name = foo;
obj.age = 18;
字面量:
let arr = [1,2,3,4,5];
let obj = {
name: foo,
age: 18
}