JavaScript

在工作中,经常会修改早些时候编写的 JS 代码,有偶尔会阅读(修改)同事的代码。发现很难理解当时所写代码的思路(都写有注释,注释也比较清晰,就是不能很快理解编写时的思路)。所以我通读了一遍《编写可维护的 javascript》一书。现写一点读后总结,也方便有想了解相关内容的朋友同学。

对齐、大括号和分号

  1. 代码缩进对齐利于阅读;

  2. 虽然有的语句可以省略大括号(分号),但是不建议,如果压缩代码可能造成错误,且错误难以排查。

变量

通常来说变量名应遵守驼峰大小写命名法,而且命名前缀应当是名词,这样可以让变量和函数区分开来,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 好的写法
var count = 10;
var myName = "john";
var found = true;
function getName() {
return myName;
}

// 不好的写法,变量和函数不能明显的区分
var getCount = 10;
var isFound = true;
function theName() {
return theName;
}

函数命名

对于函数和方法命名,第一个单词应该是动词,我们有一些常用约定:
动词 |含义
— |—
can、has、is |函数返回一个布尔值
get、set |获取、设置(保存)一个值

对于构造函数,应遵循大驼峰命名法。

1
2
3
4
5
6
7
// 好的做法
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function () {
alert(this.name);
};

避免全局变量

  1. 命名冲突:当脚本中的全局变量/函数越来越多,命名冲突的概率会大大增加。代码就会出问题。也不利于维护。

  2. 代码脆弱:使用全局变量的函数就耦合于上下午环境中了,如果环境发生改变,函数就可能不会正常运行而报错。

检测属性

当用 null 和 undefined 检测一个属性是否在对象中存在时,如:

1
2
3
4
5
6
7
8
9
10
11
12
// 不好的写法
if (object[propertyName]) {
// do something
}

if (object[propertyName] != null) {
// do something
}

if (object[propertyName] != undefined) {
// do something
}

上面代码都不能很好的区分 null 和 undefined,通常需要判断 null 和 undefined 时使用’===’运算符。

[越努力,越幸运!]