来自JSLint.com:
JavaScript使用类似C的语法,需要使用分号来分隔某些语句。 JavaScript尝试使用分号插入机制使这些分号可选。这很危险,因为它可以掩盖错误。
与C类似,JavaScript有++和 - 和(可以是前缀或后缀的运算符。消歧由分号完成。
在JavaScript中,换行符可以是空格,也可以作为分号。这取代了另一个模糊性。
JSLint希望每个语句都遵循;除了for,function,if,switch,try和while。 JSLint不希望看到不必要的分号或空语句。
一个好的做法是:
var one = 'something';
var two = 'other thing';
VS
var one = 'something'
, two = 'other thing';
当谈到方法链时,Air BnB's Style Guide - under the Whitespace Section建议对方法链使用缩进。
// bad
$('#items').find('.selected').highlight().end().find('.open').updateCount();
// good
$('#items')
.find('.selected')
.highlight()
.end()
.find('.open')
.updateCount();
// bad
var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
.attr('width', (radius + margin) * 2).append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
// good
var leds = stage.selectAll('.led')
.data(data)
.enter().append('svg:svg')
.class('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
当Javascript插入分号时,这种缩进会导致问题吗?
答案 0 :(得分:2)
没有。由于有效语句在具有链式方法的以下行上继续,因此忽略缩进并且换行也是如此。
JavaScript的自动分号插入有点复杂,但在很大程度上非常直观。
人们遇到的问题是,可以解释为后缀运算符的运算符会启动前一个语句未终止的行。你的代码都没有遇到这个问题。
只要您在这种情况下不忘记分号:
// forgot--v
var a = "b"
(function() {
// do some stuff
})();
或者这个:
// forgot--v
var a = "b"
[1,2,3].forEach(function(n) {
// do something
});
你会没事的。
在return
声明之后,可能是知道换行符的最大位置。
return
{
foo: "bar"
}
这将为您提供undefined
返回值,而不是对象。
特别是,我更喜欢这种形式的变量声明:
var one = 'something'
, two = 'other thing';
虽然我将,
放在v
下面而不是r
(真的不重要)。当有很长的变量列表时,很容易看出你已经记住了所有的逗号。这是非常安全的WRT分号插入。
答案 1 :(得分:0)
没有;缩进不是JS语法的一部分。
请不要依赖分号缩进。
(不相关,但我不喜欢这样的缩进;我更喜欢将它们放在同一列上。也就是说,当end()
被使用时,你的jQuery示例似乎是有道理,所以我可能不得不重新考虑。)