一、健壮性
1、参数需要做好默认值、做好检测,保证参数的安全性
如果可以参数设定默认值,未传该参数,直接使用默认值
function defParam(config) {
var _default = {
a: 1,
b: 2
}
for (var item in config) {
_default[item] = config[item] || _default[item]
}
return _default;
}
var d = defParam({b: 3, c: 4})
console.log(d) //{a: 1, b: 3, c: 4}
若必须要传的值,就需要判断他是否已经传入且类型是否正确,不正确需抛出错误。
function multiplyTwo(num) {
if (typeof num != "number") {
throw new Error('num must be a number')
}
return num * 2
}
console.log(multiplyTwo(1)) //2
console.log(multiplyTwo("1")) //Error: num must be a number
2、当错误是我们无法控制时(如链接第三方),需要将该易错代码放在 try{易错代码}catch(err){} 当中,这样即使有错误,也不会导致程序中断,页面完全无法显示。
try {
throw new Error()
} catch (err) {
}
二、可读性
1、优化丑陋结构
- if-else 分支过长 -> 策略模式、状态模式
- 分支套分支(如 if 里面套 if )-> 直接多个条件用 && 判断
- 地狱回调 -> promise、async
2、遵循命名规范
1.常量全大写
const PIE = 3.14
2.类名首字母大写 - 大驼峰
function ClassStudent() {
}
3.普通的变量和方法 - 小驼峰
function addAndMinus() {
4.局部变量 - 下划线开头
var _number = 1;
}
4.局部变量 - 下划线开头
function addAndMinus() {
// 局部变量 - 下划线开头
var _number = 1;
}
5.一定要遵循语义化
3、做好注释
三、可复用性
1、目的:
- 重复代码不用写第二遍,节约时间
- 减少代码的体积
2、做法:
- 桥接模式
- 亨元模式
- 函数式编程
- 低耦合,高内聚
四、可扩展性
1、目的
- 新增需求,不用变动现有结构
- 新增功能,最好只需要写新功能,不用改动原代码
2、做法
- 留出扩展接口
- 模块低耦合,高内聚
- 良好的模块组织
- 良好的扩展方案