为什么这个基于短路评估的 if 语句不起作用

Why does this if-statement based on short-circuited evaluation not work?

本文关键字:if 语句 不起作用 评估 于短路 为什么      更新时间:2023-09-26

fun函数中,如果布尔表达式为真,我想返回 1。

function fun() {
    (1 == 1) && return 1;
}
alert(fun());

当然,我可以轻松地用if (1 == 1) return 1做到这一点.但是,我想知道为什么上面的代码不起作用。它会在 Chrome 的控制台中触发"未捕获的语法错误:意外的令牌返回"错误。

return 1不应该只在(1 == 1)是真的时才运行吗?为什么这不起作用?

它不起作用,因为&&运算符的两个操作数都需要expressions。 例如,

expr1 && expr2

然而,return语句不是(从语法上讲)expressions

有关一个很棒的解释,请参阅 jmar777 的答案,无论如何,您都可以通过以下方式实现您的计划。我只是反过来了:

function fun() {
    return null || 1 == 1;
}
alert(fun());

JavaScript 不是 bash shell 脚本。 你没有if. JavaScript也不是C。 ==会自动投射,但===不会,这使得===几乎在任何情况下都是更明智的选择。