条件语句用来控制其他语句是否执行;其他语句在 if、else、case、switch 等语句里时变为“有条件”执行。

if 语句

简单 if-then 语句

  • 首先写正常代码路径:再处理不常见情况 —— 推荐
    优先编写正常情况的代码逻辑,对代码可读性和代码性能来说都很重要
  • 确保对于等量的分支是正确的 —— 推荐
    明确 >、>=、<、<= 的界限,不要存在使用偏差
  • 把正常情况的处理放在 if 后面而不要放在 else 后面
  • 让 if 子句后面跟随一个有意义的语句 —— 推荐
    image.png
  • 考虑 else 子句 —— 推荐
    除非显而易见的原因可以不用 else 子句,否则还是要考虑下 else 的情况
  • 测试 else 子句的正确性
  • 检查 if 和 else 子句是不是弄反了

    if-then-else 语句串

    在平时代码编写中,我们可能会使用如下的检测串:
    image.png
    在写这种 if-then-else 串的时候,请注意下述指导原则

    利用布尔函数调用简化复杂的检测

    image.png

    把最常见的情况放在最前面

    image.png

    确保所有的情况都考虑到了

    写一个放在最后的 else 子句,用出错消息或者断言来捕捉那些你不考虑的情况
    image.png

    case 语句

    为 case 选择最有效的排列顺序

  • 按字母顺序或按数字排序排列各种情况

  • 把正常情况放在前面
  • 按执行频率排列 case 子句

    使用 case 语句的诀窍

  • 简化每种情况对应的操作
    使得与每种情况相关的代码短小精悍

  • 不要为了使用 case 语句而刻意制造一个变量
    case 语句应该用于处理简单的、容易分类的数据;如果数据并不简单,那么就使用 if-then-else 语句
    image.png
  • 把 default 子句只用于检查真正的默认情况
  • 利用 default 子句来检测错误
    image.png

    核对表

    image.png

    本章思维导图

    image.png
    原图:https://www.processon.com/view/link/60028bb86376893492631958

    GoodCase

    Case1

    1. // 利用策略模式处理 if-then-else
    2. // 定义策略树
    3. var states = {
    4. obj1: function(){
    5. doSomeThing1()
    6. },
    7. obj2: function(){
    8. doSomeThing2()
    9. },
    10. obj3: function(){
    11. doSomeThing3()
    12. }
    13. }
    14. // 调用
    15. function handleStates(obj){
    16. states[obj.name]()
    17. }

    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)) } ```