条件语句用来控制其他语句是否执行;其他语句在 if、else、case、switch 等语句里时变为“有条件”执行。
if 语句
简单 if-then 语句
- 首先写正常代码路径:再处理不常见情况 —— 推荐
优先编写正常情况的代码逻辑,对代码可读性和代码性能来说都很重要 - 确保对于等量的分支是正确的 —— 推荐
明确 >、>=、<、<= 的界限,不要存在使用偏差 - 把正常情况的处理放在 if 后面而不要放在 else 后面
- 让 if 子句后面跟随一个有意义的语句 —— 推荐
- 考虑 else 子句 —— 推荐
除非显而易见的原因可以不用 else 子句,否则还是要考虑下 else 的情况 - 测试 else 子句的正确性
-
if-then-else 语句串
在平时代码编写中,我们可能会使用如下的检测串:
在写这种 if-then-else 串的时候,请注意下述指导原则利用布尔函数调用简化复杂的检测
把最常见的情况放在最前面
确保所有的情况都考虑到了
写一个放在最后的 else 子句,用出错消息或者断言来捕捉那些你不考虑的情况
case 语句
为 case 选择最有效的排列顺序
按字母顺序或按数字排序排列各种情况
- 把正常情况放在前面
-
使用 case 语句的诀窍
简化每种情况对应的操作
使得与每种情况相关的代码短小精悍- 不要为了使用 case 语句而刻意制造一个变量
case 语句应该用于处理简单的、容易分类的数据;如果数据并不简单,那么就使用 if-then-else 语句 - 把 default 子句只用于检查真正的默认情况
- 利用 default 子句来检测错误
核对表
本章思维导图
原图:https://www.processon.com/view/link/60028bb86376893492631958GoodCase
Case1
// 利用策略模式处理 if-then-else
// 定义策略树
var states = {
obj1: function(){
doSomeThing1()
},
obj2: function(){
doSomeThing2()
},
obj3: function(){
doSomeThing3()
}
}
// 调用
function handleStates(obj){
states[obj.name]()
}
Case2
```javascript /**
- Map对象的键可以是任意值,包括函数,对象,基本类型
/
const actions = new Map([
[{identity:’guest’,status:1},()=>{/do sth/}],
[{identity:’guest’,status:2},()=>{/do sth/}],
//…
])
/*javascript
- 按钮点击事件
- @param {string} identity 身份标识:guest客态 master主态
- @param {number} status 活动状态:1 开团进行中 2 开团失败 3 开团成功 4 商品售罄 5 有库存未开团 */ const onButtonClick = (identity,status)=>{ let action = […actions].filter(([key,value])=>(key.identity == identity && key.status == status)) action.forEach(([key,value])=>value.call(this)) } ```