javascript 新方向(6) 分支语句

作者: zidea | 来源:发表于2019-04-13 15:59 被阅读42次
javascript-frameworks.jpg
function printSwitchedValue(num){
    switch (num) {
        case 1:
            console.log('one')
            break;
        case 2:
            console.log('two')
            break;
        case 3:
            console.log('three')
            break
        default:
            console.log('default')
            break;
    }
}

这是一段再普通不过分支语句,输入数字,根据数字的可能性进行分支处理进行不同处理。
让我们从语言设计层面看一下:

  • 第一个就是使用冒号来定义代码块,这不算一种合理的设计,通常都是通过一对花括号来定义代码块
  • 第二个就是我们必须显示通过 break 结束分支语句,一旦忘记即使比配上也会继续向下执行。
function printSwitchedValue(num){
    switch (num) {
        case 1:
            console.log('one')
            break;
        case 2:
            console.log('two')
        case 3:
            console.log('three')
            break
        default:
            console.log('default')
            break;
    }
}
two
three
  num === 1 ? console.log('one')
        : num === 2 ? console.log('two')
        : num === 3 ? console.log('three')
        : console.log('default')

当然这也写是 OK 没有问题,可以实现分支语句,不过作为 javascript 是不是感觉有些不对劲,而且虽然我不是什么性能方面专家。这样感觉会影响程序的运行。

 const values = {
        '1':'one',
        '2':'two',
        '3':'three',
        'default':'default'
    }
    
    const value = values[num] || values['default']
    console.log(value)
 const values = {
        '1':'two',
        '2':false,
        '3':'three',
        'default':'default'
    }

但是如果我们分支语句的值为 false 或者 undefined 时候我们分支语句就无法正常进行,这时候调用printSwitchedValue(2)会走到 default 分支中去。

function updateCounter(state = 0, action){
    switch (action.type) {
        case 'INCREMENT':
            return state + 1;
        case 'DECREMENT':
            return state - 1;
        case 'RESET':
            return 0;
        default:
            return state;
    }
}

用过 redux 的 developer 这部分代码应该再熟悉不过,我们根据输入的动作来更新状态,然后将更新的状态返回。

const cases = {
        INCREMENT:state + 1,
        DECREMENT:state - 1,
        RESET : 0,
        default : state
    }

    return cases[action.type] || cases['default']
function updateCounter(state = 0, action){
    const {type, data:amount} = action
    // console.log(amount)
    const cases = {
        INCREMENT:state + amount,
        DECREMENT:state - amount,
        RESET : 0,
        default : state
    }

    return cases[type] || cases['default']
    
}


console.log(updateCounter(0,{type:"INCREMENT",data:1}))
console.log(updateCounter(0,{type:"INCREMENT",data:null/false/undefined}))
0

我们可以用函数封装一下返回值以预防发生上面的错误。

function updateCounter(state = 0, action){
    const {type, data:amount} = action
    // console.log(amount)
    const cases = {
        INCREMENT:()=> state + amount,
        DECREMENT:() => state - amount,
        RESET : () => 0,
        default : () => state
    }

    return cases[type]() || cases['default']()
    
}

我们可以通过解构中默认值来预防 undefined 的发生,如果 x 属性的值是 undefined 就会采用默认值 'x' 但是如果值是 null 则会赋值 null 而不会采用默认值。

const { x = 'x', y = 'y'} = {
    x:undefined,
    y:null
}

相关文章

  • javascript 新方向(6) 分支语句

    这是一段再普通不过分支语句,输入数字,根据数字的可能性进行分支处理进行不同处理。让我们从语言设计层面看一下: 第一...

  • JavaScript的流程控制语句

    JavaScript的分支语句 JavaScript条件语句 学习目标 掌握条件语句 if 掌握prompt()的...

  • 5.14js学后感

    JavaScript分支结构 if分支 if(条件) {条件为true时执行的语句} if(条件){ ...

  • JavaScript 分支语句

    这个十分简单,导致这两天就算学习了,也没打算做笔记,不过想想还是不能断。所以做个简单记录。js跟其他语言一样有if...

  • JavaScript分支语句

    概念 表达式在javascript中是短语,那么语句就是javascript整句或命令。正如英文是用点号作结尾来分...

  • javascript分支语句

    语法for (初始化表达式; 条件; 递增表达式)语句或者for (初始化表达式; 条件; 递增表达式) {语句}...

  • JavaScript之分支语句

    if语句 if(条件表达式){条件为真的时候做的事情}else{条件为假的时候做的事情} if(条件表达式1){条...

  • JavaScript 分支/循环语句

    1. 分支语句 if 语句,只有当指定条件为 true 时,使用该语句来执行代码 if...else 语句,在条件...

  • JavaScript01

    今天主要内容: JavaScript介绍 ECMAScript基本调试 变量与数据类型 运算符 分支语句与循环语句...

  • JavaScript|理解条件分支语句

    本节学习目标 掌握 if-else 语句的使用 掌握 switch 语句的使用 本节内容 网上一直流传这么一个段子...

网友评论

    本文标题:javascript 新方向(6) 分支语句

    本文链接:https://www.haomeiwen.com/subject/hrmlwqtx.html