这段if可以还有优化的余地吗吗?

    这段if可以还有优化的余地吗吗?
            if (this.switchNum == 1) {
                this.switchNum = 2
            } else {
                this.switchNum = 1
            }
阅读 2.7k
5 个回答

用三元运算符也可以
this.switchNum = this.switchNum == 1 ? 2 : 1;

仅针对题主特殊业务,this.switchNum 要么是1, 要么是2:
this.switchNum = 3 - this.switchNum

三元运算符就可以,或者不改其实也没关系。这种奇奇怪怪的逻辑写成这样再加一句注释还方便后面维护和新人阅读代码

我觉得没必要改这样就挺好了

或者就是改成3元运算符

非得整成异或, 其他人看到的话还得懵一会

// 原代码
if (this.switchNum == 1) {
  this.switchNum = 2
} else {
  this.switchNum = 1
}

一般像这种简单的if...else分支语句,我会第一时间考虑三元运算符下的方法。
改造如下:

this.switchNum = this.switchNum == 1 ? 2 : 1

可以分开解析:

// 赋值符“=”后边这段代码如下
this.switchNum == 1 ? 2 : 1

其中?之前的是条件,也就是判断this.switchNum是否与1相等
:前边代表前边结果成立返回的值
:后边代表前边结果不成立返回的值
所以这段代码(this.switchNum == 1 ? 2 : 1)要么返回2,要么返回1,完全取决于this.switchNum == 1还是this.switchNum != 1
那么既然值得到了,就赋值给this.switchNum即可
最终的结果就是上边写的:

this.switchNum = this.switchNum == 1 ? 2 : 1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题