【问题标题】:Ternary operator in Javascript and grouped sentencesJavascript和分组句子中的三元运算符
【发布时间】:2016-06-04 07:26:42
【问题描述】:

我有以下三元运算符条件。有没有办法将第二个 if 语句以某种方式包含在第 1 行中,所以我不需要再做另一个 if 语句?第一个条件如果为真,则应准备显示状态更改以及复选框更改。

function change_properties(display){
    var display_r = ( display === 1) ? 'block' : 'none';

    /*THIS LINE - can it be integrated in the ternary if-else condition above? */
    if(display) jQuery("#checkbox").prop('checked',false);

    jQuery("#field").css("display", display_r); 
} 

【问题讨论】:

  • 你的磁盘空间用完了吗?
  • 只是好奇,通常我更喜欢完全明确的句子。

标签: javascript if-statement ternary-operator


【解决方案1】:

这样写,假设可以显示真实而不是===1

function change_properties(display){
   $("#checkbox").prop('checked',!display);
   $("#field").toggle(display);
}

或者如果您只想在显示为 1(真实)时取消选中:

function change_properties(display){
   if (display) $("#checkbox").prop('checked',false);
   $("#field").toggle(display);
}

【讨论】:

  • 我不确定这在功能上是否等效。 OPs 代码仅在 display 为真时更改 checked 属性;您的代码每次都会更改它。
  • 已检查,并不完全相同。它不能按预期工作。无论如何,谢谢,这是一个非常聪明的尝试。
  • 已修复。可能不需要三元
  • 现在一切顺利。非常感谢。
【解决方案2】:

哇,如果您愿意编写真正难以阅读的代码,那么是的,这在技术上是可行的:

var display_r = ( display === 1) ? jQuery("#checkbox").prop('checked',false), 'block' : 'none';

您可以使用&& 代替, 运算符...利用字符串'block' 是真实的事实。

既然如此,为什么下一行代码在自己的行中?

jQuery("#field").css("display", ( display === 1) ? jQuery("#checkbox").prop('checked',false), 'block' : 'none');

总之,代码行不是敌人……

编辑:修正了 , 周围的顺序,我不知道这是因为我从不这样做。

不过没关系。让我们写一些有意义的东西,不要为了好玩而使用三元运算符:

var display_r;
if (display === 1) {
    display_r = 'block';
    jQuery("#checkbox").prop('checked',false);
}
else {
    display_r = 'none';
}
jQuery("field").css("display", display_r);

【讨论】:

  • 也就是说,请永远不要这样做
  • "," 语法抛出错误,而 Javascript 不执行任何操作。
【解决方案3】:

如果你能编写清晰易读的代码,IMO 会更好:

function change_properties(display){
    if(display){
         jQuery("#field").css("display","block");
         jQuery("#checkbox").prop('checked',false);
    }else
         jQuery("#field").css("display","none");

}

或者你可以使用show()/hide()

function change_properties(display){
    if(display){
         jQuery("#field").show();
         jQuery("#checkbox").prop('checked',false);
    }else
         jQuery("#field").hide();

}

希望这会有所帮助。

【讨论】:

    【解决方案4】:

    有没有办法将第二个 if 语句以某种方式包含在第 1 行中,所以我不需要再做另一个 if 语句?

    这是可能的,但这并不是一个好主意。

    function change_properties(display){
        jQuery("#field").css("display", display === 1 && jQuery("#checkbox").prop('checked',false)
                                      ? 'block'
                                      : 'none'); 
    }
    

    说清楚,我真的认为你应该去mplungjan's answer的第二个功能:

    function change_properties(display){
       if (display) $("#checkbox").prop('checked',false);
       $("#field").toggle(display);
    }
    

    【讨论】:

    • 是的,这似乎是最好的解决方案。这只是好奇,我不太喜欢使用三元运算符,但没有看到如何使它同时执行多个指令。某些答案的“,”分隔符语法不起作用。
    • @Cesar 逗号运算符不起作用并不让我感到惊讶;我不记得在 JS 中使用逗号。
    • 是的,我查找了几种语言的语法,但没有找到对多个指令进行分组的正确方法,这就是我在这里问的原因。当我尝试逗号建议时,他们抛出了错误。最后,我在独立的行中使用了明确的指令,这更清楚,绝大多数贡献者都证实了这一点。
    • 看来我错了。 JS does have the comma operator...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2013-11-10
    • 1970-01-01
    • 2016-04-25
    • 2016-06-28
    • 1970-01-01
    • 2021-07-14
    相关资源
    最近更新 更多