【问题标题】:is shorthand if statment refactoring possible? [duplicate]if 语句重构是可能的简写吗? [复制]
【发布时间】:2015-04-11 21:06:12
【问题描述】:

有没有办法为 if statement 制作简写?

if(window.scrollY > 0 ){
        alert("yes")
}

这个速记是行不通的

 window.scrollY > 0 ? alert("yes")

虽然这样可以正常工作

window.scrollY > 0 ?  alert("yes") : alert("no")

有没有办法在没有: alert("no") 部分的情况下编写速记?

【问题讨论】:

  • 没有。三元运算符必须有一个 else。否则是语法错误。 if(window.scrollY > 0 ) alert("yes"); 可能是最短的。

标签: javascript if-statement


【解决方案1】:

你可以试试:

 window.scrollY > 0 && alert("yes");

【讨论】:

  • 哦,伙计,我见过人们这样做,每次我都畏缩。我知道,这很好,但对我来说看起来太可怕了。
  • @RGraham 我不使用此语句,因为它不那么易读-但它有效并且是最短的形式。 ;-)
【解决方案2】:

只需将null 用于不需要的情况:

window.scrollY > 0 ? alert("yes") : null;

或者,正如@hsz 指出的那样,您可以利用 JavaScript 布尔表达式的短路特性并使用:

window.scrollY > 0 && alert("Yes");
// or even take advantage of the fact that zero coerces to false
window.scrollY && alert("Yes");

但是,这些(在我看来)不如简单地使用单行(无括号)if

if(window.scrollY > 0) alert("yes");

【讨论】:

    【解决方案3】:

    您可以将alert("no") 替换为0,因为三元运算符总是必须有一个“false”参数:

    prompt('value') > 0 ? alert("yes") : 0 ;

    不过,这有点难看。

    更好的选择是仅在语句为真时执行函数:

    prompt('value') > 0 && alert("yes");

    && 只会计算表达式的右侧,如果左侧为真的话。

    (尝试在提示中输入10

    【讨论】:

      【解决方案4】:

      这个:

      window.scrollY > 0 ? alert("yes") : alert("no");
      

      称为ternary operator。它通常用于确定语句的返回值。

      你可以通过这种方式实现你的意思:

      (window.scrollY > 0) && alert("yes");
      

      无论如何,它绝不比普通的if/else 更好。它不是更具可读性。

      【讨论】:

        猜你喜欢
        • 2013-08-08
        • 1970-01-01
        • 2015-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 1970-01-01
        相关资源
        最近更新 更多