6

我来自 Perl 编码员背景,所以出于习惯,我总是使用大括号将条件语句返回 true 时所采取的操作括起来。例如,使用 jQuery,因为这是我需要解释差异的地方,所以这两个语句都是等效的并且具有有效的语法。

if ($('#user_agreement').is(':checked')) { $('#thanks_message').show(); }  

if ($('#user_agreement').is(':checked')) $('#thanks_message').show(); 

我的旧习惯是否出卖了我,我只是在编写不必要的额外代码而没有任何优势?还是一种方法更有效,或者被认为是良好编码实践的标准?我真的很想了解这两种不同的句法方法之间的任何区别,尤其是当它们都工作得很好的时候。

4

4 回答 4

5

很抱歉,但这与 jQuery 无关。这是纯粹的 Javascript,贯穿始终。但无论如何,这是你的答案:

他们做同样的事情。

然而。

  • 第二个选项,没有花括号,只能用于一个代码语句。一旦第一个分号被击中,其余代码就在if语句之外。

  • 第二个选项甚至没有真正不赞成,但确实应该如此。if它可以节省开发人员查看他们的代码的时间,只是意识到他们在语句之后不小心包含了一个分号。(即他们做了一些不幸的事情,比如:

->

if ( $("#user_agreement").is(':checked')); $("#thanks_message").show();
  • 第一个选项允许您在条件语句中添加更多代码行,而无需费力地添加更多花括号。

  • 花括号只是使您的代码更清晰,尤其是在下一个项目符号中->

  • 最后,嵌套这些东西变得非常混乱。例如:

->

if(var1 == 'string1') 
    console.log("string1");
    if(var2 == 'string2')
        console.log("string2");
else 
    console.log("else");

缩进表示 else 块与外部if一起使用 - 但它实际上与内部一起使用if

于 2013-09-06T07:20:18.277 回答
1

它们确实都是有效的,但我个人建议使用大括号。它们更清楚地说明了哪些行是if. 然而,这是一个非常私人的问题。有些人喜欢使用它们,有些人则不喜欢。

放置大括号的好处是您的代码可以变得更清晰(但在这种情况下,我也建议使用换行符。

于 2013-09-06T07:18:35.423 回答
0

有一个单一的声明,如

if ( $("#user_agreement").is(':checked')) { $("#thanks_message").show(); } 

没有必要放大括号

有不止一种说法,比如

  if ( $("#user_agreement").is(':checked')) { 
   $("#thanks_message").show(); 
   $("#thanks_message").show(); 
  $("#thanks_message").show(); 
     $("#thanks_message").show(); 
 } 

你应该使用大括号

于 2013-09-06T07:20:05.333 回答
0

必须同意,当普通 js 如此明显和可读时,没有理由使用 jquery 解决这个问题,但只是为了演示,这里有一个纯 jquery 等价物使用.filter(). 有时,长 jquery 链接操作不希望将链中断为纯 js,因此这种技术对于插入条件而不中断链很有用(即使不是该方法的设计目的)。要继续使用链,您需要添加一个.end()after 以恢复原始选择器。

你的表情……

if ($('#user_agreement').is(':checked')) {
   $('#thanks_message')
      .show();
} 

仅使用 jquery ...

$('#thanks_message')
   .filter(function(){return $('#user_agreement').is(':checked');})
      .show(); 

工作示例:

http://codepen.io/anon/pen/doJxmW

顺便说一句,我过去创建了一个插件来简化此类操作的语法....

$.fn.iff = function (test) {
   return this.filter(function() {return test;} );
};

这允许这种更具可读性的语法......

$('#thanks_message')
   .iff($('#user_agreement').is(':checked'))
      .show(); 

如果您要返回查询对象,请务必使用.end()恢复原始对象

return this
   .iff(someTest)
      .show()
      .end(); 
于 2015-06-30T14:58:14.570 回答