哪个是用于jQuery条件语句的最佳语法?

时间:2013-09-06 07:13:31

标签: jquery syntax conditional

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

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

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

我的旧习惯背叛了我,而我只是在没有任何优势的情况下编写不必要的额外代码?或者,一种方法是否更有效,或者被认为是更好的编码实践的标准?我真的很想理解两种不同语法方法之间的差异,特别是当它们同样适用时。

4 个答案:

答案 0 :(得分: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一致。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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(); 
 } 

你应该使用大括号

答案 3 :(得分:0)

当普通的js如此明显和可读时,必须同意使用jquery解决这个问题,但仅仅为了演示这里使用.filter()的纯jquery等价物。有时长的jquery链接操作使得将链断开到普通js是不可取的,因此这种技术在插入条件而不破坏链时很有用(即使不是设计方法)。要继续使用链条,您需要在之后添加.end()以恢复原始选择器。

你的表达......

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();