JavaScript - 我应该在抛出异常的"if"之后编写"else"吗?



使用什么构造更好?如果我总是在if语句中抛出异常,那么实际上if块之后的代码将永远不会执行,因此不需要else。但另一方面,块不应该同时执行,所以使用else可能是一个很好的做法,对吧?

版本1

if (!this.regions[region]) {
    throw 'Component ignored: region ' + region + 'does not exists';
}
else {
    ....            
}

版本2

if (!this.regions[region]) {
        throw 'Component ignored: region ' + region + 'does not exists';
}
......    

不需要else子句,因为它是否存在没有区别。if块之后的代码仅在if语句为false时执行,因为如果它为true,则它将抛出异常,并且永远不会超过if

这与通常使用的类似

function doSomething(a, b) {
   if (!a || b < 2) {
       return false;
   }
   // more code here
   return true;
}

同样,不需要else语句,因为只有当它是falsey时,代码才会超过if语句,所以所有剩余的代码都已经是else了。

您可以使用else,但它不是必需的,也不添加任何功能。在这些情况下,我不喜欢使用else,因为它只会导致比需要的更多的代码缩进。

版本2被称为"短路逻辑"。如果出现问题,请中止。这是完全有效的。

如果达到throw语句,throw下面的代码将不会执行。

如果与else一起使用,它将只在不匹配的表达式内执行else

但如果不使用else,它也将执行表达式和if代码之后的代码。此外,即使表达式不匹配或在CCD_ 18之后匹配也将执行。

最新更新