我来自Perl编码器背景,因此出于习惯,我总是使用花括号来包含条件语句返回true时所采取的操作。例如,并且使用jQuery,因为这是我需要解释差异的地方,这两个语句都是等效的和有效的语法。
if ($('#user_agreement').is(':checked')) { $('#thanks_message').show(); }
if ($('#user_agreement').is(':checked')) $('#thanks_message').show();
我的旧习惯背叛了我,而我只是在没有任何优势的情况下编写不必要的额外代码?或者,一种方法是否更有效,或者被认为是更好的编码实践的标准?我真的很想理解两种不同语法方法之间的差异,特别是当它们同样适用时。
答案 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();
工作示例:
通过我过去的方式创建了一个插件来简化这种操作的语法....
$.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();