优化 if - else代码

在javascript流程控制中并没有像java中有goto跳转,所以基本上都是用if...if 或者if...else if来控制。但是,如果流程有比较多的分支时,代码会显得特别的肿。本文介绍了一种简单的消肿方法,请参考。

1.明白if...ifif...else if的区别

if (条件1)
{
    //语句1
}

if (条件2)
{
    //语句2
}

这种格式中,程序会依次判断条件1和条件2是否成立并根据结果决定是否执行语句1和语句2,也就是说,第一个 if 块和第二个 if 块没有影响(除非在执行第一个 if 块的时候就凶残地 return 了)

而下面这种格式,

if (条件1) 
{
    //语句1
}
else if (条件2)
{
    //语句2
}

if 块和 else if 块本质上是互斥的!也就是说,一旦语句1得到了执行,程序会跳过 else if 块,else if 块中的判断语句以及语句2一定会被跳过;同时语句2的执行也暗含了条件1判断失败和语句1没有执行;当然还有第3个情况,就是条件1和条件2都判断失败,语句1和语句2都没有得到执行。

2.未优化的代码

      function program(a) {
        if (a === 'java') {
          console.log('the language is: ' + a);
        } else if (a === 'object c') {
          console.log('the language is: ' + a);
        } else if (a === 'js') {
          console.log('the language is: ' + a);
        }
        // 中间还有若干个 else if ...
        else {
          console.log('the language is: php');
        }
      }
      
      program('java'); // the language is: java

一个词来形容:恶心

3.尝试优化
原理:映射对应

      const programs = {
        java: function (a) {
          console.log('the language is: ' + a);
        },
        object: function (a) {
          console.log('the language is: ' + a);
        },
        js: function (a) {
          console.log('the language is: ' + a);
        }
      };

      (function sayPrograms(){
        return programs['java']('javaaaaaaaa'); // the language is: javaaaaaaaa
      })();

对于if - else-if - else 类型的处理:使用try-catch

      const programs = {
        java: function (a) {
          console.log('the language is: ' + a);
        },
        object: function (a) {
          console.log('the language is: ' + a);
        },
        js: function (a) {
          console.log('the language is: ' + a);
        }
      };

      try {
        (function sayPrograms() {
          return programs['java']('javaaaaaaaa');
        })();
      } catch (err) {
        console.log('the language is: php');
      }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,782评论 0 11
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,552评论 0 17
  • 练瑜伽差不多一个月了,深深地爱上了瑜伽。虽然只有一个月,但是它带给我的好处是显而易见的:颈椎不疼了,腰部肌肉放松了...
    愿你如朝阳阅读 126评论 0 0
  • 今天看到一幅水彩很美,就马上临摹了,做了小改动,原画画了一只鸭子,我改成了两只天鹅,就叫它雪中的天鹅湖吧。
    LillianBi阅读 649评论 4 11