JavaScript中是否有类似Swift的guard语句?

11

我开始开发Web应用程序,但我来自iOS世界。 我想知道JavaScript中是否有与Swift的guard语句相当的东西? 我喜欢早期返回模式。

对于那些可能不知道的人,guard语句是一种“如果语句提前返回”的语句,这里是一个非常基本的例子:

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

1
它有什么特别之处?我看不出它与 if(! myCondition) { ... } 有什么不同。 - Coloured Panda
1
是的,只需使用 if。我的意思是,你想让 JavaScript 中的 guard 关键字具体做什么? - XCS
7
你错过了 guard 最有用的部分,它的语法是 guard let foo = bar else { ... },它将声明 foo 到封闭作用域。 - Alnitak
另一种编程方式 if let foo = bar { } 只在 if 块的作用域内声明了 foo - Alnitak
1
是的,但在JavaScript中,使用var而不是let将会声明封闭函数作用域内的变量。 - XCS
显示剩余3条评论
1个回答

7

函数内部可以进行早期返回。无需实际的守卫,可以使用if语句代替。

f () {
  myCondition = trueOrFalse()

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

  console.log("myCondition is true")
}

PS:我return日志语句只是为了让它保持一行。 console.log仅会返回undefined,因此你的函数将返回undefined。如果你认为这样写更好看,或者想让你的function始终返回相同类型以便于优化(例如:始终返回整数,这样就可以返回0而不是undefined),则可以将该语句拆分成多行。


3
Swift的guard强大之处在于,它允许您在条件成功时声明变量:guard let name = something?.name else { return }。此外,else必须退出作用域,否则将无法编译,因此它确实是一个在编译时强制执行的保护。 - TruMan1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接