2017-04-21 52 views
-1

我开始开发网络应用程序,但我来自iOS世界。 我想知道在JavaScript中是否有相当于Swift的guard语句? 我爱回归早期模式。在JavaScript中是否有相当于Swift的警戒声明?

对于那些谁可能不知道,guard语句是“早if语句返回”,这里是一个非常简单的例子:

myCondition = trueOrFalse() 
guard myCondition 
    else {print("myCondition is false") 
     return} 
print("myCondition is true") 
+0

是什么使得它如此特别?无法看到它是如何不同于'if(!myCondition){...}' – Kaspars

+0

是的,只需使用'if'。我的意思是,你希望在'JavaScript'中使用'guard'关键字做什么? – Cristy

+0

你错过了'guard'中最有用的部分,那就是语法'guard let foo = bar else {...}'向封闭范围 – Alnitak

回答

2

为什么不这样做呢?为什么你需要guard而不是if

f() { 
    myCondition = trueOrFalse() 

    // Make sure `myCondition` is `true` 
    if (!myCondition) return console.log("myCondition is false"); 

    console.log("myCondition is true") 
} 

PS:I return日志声明只是为了保持一行。 console.log只是返回undefined,所以你的函数将返回undefined。如果您认为这种方式看起来更好,或者希望您的返回类型始终与可能有助于优化的类型相同(例如:始终返回一个整数,那么您可以将此语句分成多行),而不是undefined,则可以返回0) 。

0

基于来自苹果夫特规格的描述:

“一个保护语句用于如果一个或多个条件没有满足转移程序控制出范围的”

正确的比赛或许会是一个try-catch结构

try{ 
    method(); 
}catch(ex){ 
    //handle exceptions. will trigger for anything that is thrown inside the method 
} 

其中的方法,你会怎么做:

function method(){ 
    if(false) throw new Error() 
    // or do whatever you want in a method 
} 
+0

在'JavaScript'中使用'try catch'几乎不是一个好主意,除非您真的认为该函数会抛出实际的'错误'或想要*测试*如果函数抛出错误。阅读[this](https://softwareengineering.stackexchange.com/questions/144326/try-catch-in-javascript-isnt-it-a-good-practice) – Cristy

+0

@Cristy也许。 (顺便说一句,为什么?)。但问题是关于特定的守卫功能。在我看来,try-catch完全匹配它。接下来关闭的事情将是承诺。 –

+0

查看我在评论中发布的链接。这不是一个好主意,因为'try catch'不适用于异步JavaScript,它是一个昂贵的操作,它只能在发生实际错误时使用,而不是在不满足某些条件时使用。 – Cristy