1.什么是可维护的代码
五个词:容易理解、符合常识、容易适配、容易扩展、容易调试
2.哪里应该添加注释
四个位置:函数和方法、大型代码块、复杂的算法、使用黑科技
3.关于变量与函数的命名
变量名应该是名词
函数名应该以动词开始,例如get、set方法
返回布尔值的函数应该以is开头
变量、函数和方法应该以小写字母开头,使用驼峰大小写形式
名称要尽量用描述性和直观的词汇,避免过于冗长
4.介绍两种变量类型透明化的常见规则
4.1通过初始化定义
let found = false // 布尔值
let count = -1 // 数值
let name = “” // 字符串
let person = null // 对象
4.2匈牙利表示法标明数据类型
let bFound; // 布尔值
let iCount; // 数值
let sName; // 字符串
let oPerson; // 对象Object
传统的匈牙利表示法:o表示对象,b表示布尔值,i表示数值,f表示浮点数,s表示字符串
5.关于松散耦合
5.1解耦HTML/JavaScript
Web开发中最常见的耦合是HTML/JavaScript耦合。其中HTML与JavaScript代表不同层级的解决方案:
HTML是数据,JavaScript是行为。
正确写法:应该避免在JavaScript中创建大量HTML,HTML的渲染应尽可能与JavaScript分开。
5.2解耦CSS/JavaScript
通过动态修改类名,实现解耦
5.3解耦应用程序逻辑/事件处理程序
不要把event对象传给其他方法,而只传递event对象中必要的数据
应用程序中每个可能的操作都应该无须事件处理程序就可以执行
事件处理程序应该处理事件,而把后续处理交给程序逻辑
6.编码惯例
6.1尊重对象所有权
原则:不要给实例或原型添加属性、不要给实例或原型链添加方法、不要重定义已有的方法。
简单理解:不要随意修改别人封装好、定义好的对象类。
6.2不声明全局变量
简单理解:最多创建一个全局变量,其他的变脸都以JSON、函数等格式存在该变量上。
6.3不要与null比较
function sortArray(values) {
if(values != null) return; //不要这样比较
}
function sortArray(values) {
if(values instanceof Array) return; //不要这样比较
}
总结:如果看到比较null的代码,可以使用以下技术替代
如果值是引用类型,则使用instanceof操作符检查其构造函数
如果值应该是原始类型,则使用typeof检查其类型
如果希望值是具有特定方法名的对象,则使用typeof操作符确保对象上存在给定名字的方法
6.4使用常量
常量中应包含:重复出现的值、用户界面字符串、URL、任何可能变化的值
7.作用域意识
根据:访问全局变量始终比访问局部变量慢
原则:只要函数中有引用超过两次的全局变量,就应该把这个对象保存为一个局部变量
补充:实际开发者应不使用with语句
8.选择正确的方法(提升性能)
tap1:避免不必要的属性查找
tap2:优化循环:简化终止条件、简化循环体、使用后测试循环
tap3:如果循环次数少且固定,可以展开循环加快速度
tap4:避免重复解释,例如:代码求值、创建新函数、设置超时函数
tap5:注意事项:尽可能使用原生方法,因为原生方法速度更快;switch语句比if-else方法快多了;位操作很快;
9.语句最少化示例代码
// 不好的写法
let count = 5;
let color = “red”;
let values = [1,2,3];
// 优化
let count = 5,color = “red”,values = [1,2,3]
// 待优化
let name = values[i];
i++;
// 优化
let name = values[i++];
// 待优化
let values = new Array();
values[0] = 123;
values[1] = 456;
let person = new Object();
person.name = “tom”;
person.age = 13;
// 优化
let values = [123,456];
let person = {
name: “tom”,
age: 13
}
10.关于代码包过大的优化
删除空格(换行)
删除注释
缩短变量名、函数名和其他标识符