分享5个小技巧让你写出更好的JavaScript条件语句

  

在使用JavaScript时,我们常常要写不少的条件语句。这里有五个小技巧,可以让你写出更干净,漂亮的条件语句。

  

  

举个栗子:

     //条件语句   功能测试(水果){   如果(水果=='苹果' | |水果==葺?{   console.log(红色);   }   }      

乍一看,这么写似乎没什么大问题。然而,如果我们想要匹配更多的红色水果呢,比方说“樱桃”和“蔓越莓”?我们是不是得用更多的| |来扩展这条语句?
  

  

我们可以使用<代码> Array.includes (Array.includes) 重写以上条件句。
  

        功能测试(水果){//把条件提取到数组中   const redFruits=[‘苹果’,‘草莓’,“樱桃”,“小红莓”);      如果(redFruits.includes(水果)){   console.log(红色);   }   }      之前      

我们把红色的水果(条件)都提取到一个数组中,这使得我们的代码看起来更加整洁。

  

  

让我们为之前的例子添加两个条件:

  

如果没有提供水果,抛出错误。
  

  

如果该水果的数量大于10日将其打印出来。

        功能测试(水果、数量){   const redFruits=[‘苹果’,‘草莓’,“樱桃”,“小红莓”);//条件1:水果必须有值   如果(水果){//条件2:必须为红色   如果(redFruits.includes(水果)){   console.log(红色);//条件3:必须是大量存在   如果(数量比;10){   控制台。日志(“量大”);   }   }   其他}{   把新的错误(“没有水果!”);   }   }      
  

//测试结果
  测试(空);//报错:没有水果
  测试(“苹果”);//打印:红色
  测试(“苹果”,20);//打印:红、大数量
  

     

让我们来仔细看看上面的代码,我们有:

  

1个if/else语句来筛选无效的条件
  3层如果语句嵌套(条件1,2,3)

  

就我个人而言,我遵循的一个总的规则是当发现无效条件时尽早返回。
/_当发现无效条件时尽早返回_/

        功能测试(水果、数量){   const redFruits=[‘苹果’,‘草莓’,“樱桃”,“小红莓”);//条件1:尽早抛出错误   如果水果(!)把新的错误(“没有水果!”);//条件2:必须为红色   如果(redFruits.includes(水果)){   console.log(红色);//条件3:必须是大量存在   如果(数量比;10){   控制台。日志(“量大”);   }   }   }      

如此一来,我们就少写了一层嵌套。这是种很好的代码风格,尤其是在如果语句很长的时候(试想一下,你得滚动到底部才能知道那儿还有个其他语句,是不是有点不爽)。
  

  

如果反转一下条件,我们还可以进一步地减少嵌套层级。注意观察下面的条件2语句,看看是如何做到这点的:
/_当发现无效条件时尽早返回_/

        功能测试(水果、数量){   const redFruits=[‘苹果’,‘草莓’,“樱桃”,“小红莓”);      如果水果(!)把新的错误(“没有水果!”);//条件1:尽早抛出错误   如果(! redFruits.includes(水果))返回;//条件2:当水果不是红色的时候,直接返回      console.log(红色);//条件3:必须是大量存在   如果(数量比;10){   控制台。日志(“量大”);   }   }      

通过反转条件2的条件,现在我们的代码已经没有嵌套了。当我们代码的逻辑链很长,并且希望当某个条件不满足时不再执行之后流程时,这个技巧会很好用。
  

  

然而,并没有任何硬性规则要求你这么做。这取决于你自己,对你而言,这个版本的代码(没有嵌套)是否要比之前那个版本(条件2有嵌套)的更好,可读性更强?
  

  

是我的话,我会选择前一个版本(条件2有嵌套)。原因在于:

  

这样的代码比较简短和直白,一个嵌套的如果使得结构更加清晰。
  条件反转会导致更多的思考过程(增加认知负担)。

  

因此,始终追求更少的嵌套,更早地返回,但是不要过度。感兴趣的话,这里有篇关于这个问题的文章以及StackOverflow上的讨论:

  
  

避免其他,返回早期蒂姆?奥克斯利
  StackOverflow讨论>   功能测试(水果、数量){   如果(水果)返回;   const q=数量| | 1;//如果没有提供数量、默认为1      控制台。日志('我们有$ {q} ${水果}!”);   }

分享5个小技巧让你写出更好的JavaScript条件语句