就像您可以转换以下内容一样:
var t;
if(foo == "bar") {
t = "a";
} else {
t = "b";
}
转换为:
t = foo == "bar" ? "a" : "b";
,我想知道是否有一个速记/在线的方式来转换这个:
var t;
try {
t = someFunc();
} catch(e) {
t = somethingElse;
}
有没有一种方法可以用一种简化的方式来完成这件事,最好是一行,当然,我可以只删除换行符,但我更愿意说的是类似于if
的? :
的东西。
谢谢。
6条答案
按热度按时间ldxq2e6h1#
你可以使用下面的函数,然后用它来online你的try/catch。它的使用会受到限制,并且使代码更难维护,所以我永远不会使用它。
cgvd09ve2#
不,
try
-catch
没有“一行”版本,只是简单地删除了所有的换行符。你为什么要这么做?垂直空间又不花你什么钱。
而且,即使你愿意去掉所有的换行符,在我看来,这也更难读懂:
而不是这个
你所拥有的是完全好的。可读性代码应该是优先考虑的。即使这意味着更多的打字。
wfveoks03#
你可以把它压缩到两行。
或者,在您的特定示例中,为3行。
无论哪种方式,如果您的代码允许的话,两行代码比典型的try/catch块要简洁得多。
5kgi1eie4#
有一个npm包try-catch提供的liner。您可以这样使用它:
对于
async-await
try-to-catch也有类似的方法:这个 Package 器所做的一切就是用
try-catch
块 Package 一个函数,并使用解构来获得结果。此外,an idea可以使用与Go style error handling类似的内容:
laximzn55#
虽然这对你关于速记的问题没有帮助,但如果你想让一个try-catch在一个需要表达式的内联上下文中工作(不同于try-catch使用的语句),这可能会有帮助。
可以通过将try-catch封装到IIFE中来实现这一点,虽然IIFE是一个表达式,但允许您在其中添加立即执行的语句:
上面的代码可能用处不大,但您也可以有条件地返回值:
由于
someFunc()
在这里失败(在我们的例子中,由于它没有定义),result
将等于"somethingElse"
。ozxc1zmp6#
这里只使用js: