Javascript中的编码约定:括号之间使用空格
根据JSHint,Javascript程序员不应该在第一个括号之后和最后一个括号之前添加空格 我已经看到很多优秀的Javascript库添加了空格,如下所示:Javascript中的编码约定:括号之间使用空格,javascript,Javascript,根据JSHint,Javascript程序员不应该在第一个括号之后和最后一个括号之前添加空格 我已经看到很多优秀的Javascript库添加了空格,如下所示: ( foo === bar ) // bad according to JSHint 而不是这样: (foo === bar) // good according to JSHint 坦率地说,我更喜欢第一种方式(更多的空间),因为它使代码更可读。有没有强烈的理由选择JSHint推荐的第二种方式?选择其中一种方式的技术原因很
( foo === bar ) // bad according to JSHint
而不是这样:
(foo === bar) // good according to JSHint
坦率地说,我更喜欢第一种方式(更多的空间),因为它使代码更可读。有没有强烈的理由选择JSHint推荐的第二种方式?选择其中一种方式的技术原因很少,如果有的话——这些原因几乎完全是主观的
在我的情况下,我会使用第二种格式,原因很简单:
(句点)和(
(左括号)和[
(左括号)之外的所有二进制运算符都应与其操作数之间用空格分隔
以及:
函数名与其参数列表中的(
(左括号))之间不应有空格
我使用JSHint删除了这个代码片段,但它没有给出这样的建议:
if( window )
{
var me = 'me';
}
我更喜欢第二种格式。然而,也有一些编码风格标准坚持第一种格式。考虑到javascript通常作为源代码传输(例如,任何客户端代码),人们可以看到它比其他语言的情况稍强一些,但只是稍微强一些 我觉得第二个更具可读性,你觉得第一个更具可读性,而且由于我们没有使用相同的代码,我们应该按照自己的喜好进行操作。如果你和我合作的话,那么我们最好选择一个,而不是混合使用(可读性比两者都差),但尽管早在javascript出现之前(在其他语法类似的语言中,如C语言中),就已经有了关于这类问题的圣战,但两者都有各自的优点。我使用第二种(没有空格)大多数情况下,我都会使用样式,但有时如果有嵌套的括号,我会使用空格,尤其是嵌套的方括号,因为某些原因,我发现它比嵌套的曲线括号(括号)更难阅读.或者换一种说法,我会在任何给定的表达式开始时不加空格,但如果我觉得很难阅读,我会插入一些空格进行比较,如果它们有用的话,就把它们留在里面
关于JS提示,我不会担心——这个特别的建议更多的是一个意见问题。你不太可能因为这个而引入bug。这是我个人的偏好,并说明了原因 我将在接受的答案中讨论以下项目,但顺序相反 注意一点不要挑剔阿尔尼塔克,这些评论对我们大家都很常见 注意两个代码示例不是作为代码块编写的,因为语法突出显示只会阻止实际的空格问题 我一直都是这样做的 这不仅不是为编程实践辩护的好理由,也不是为任何反对改变的想法辩护的好理由 JS文件下载大小很重要[尽管缩小当然可以解决这个问题] 大小对于通过网络发送的任何文件总是很重要的,这就是为什么我们要缩小以删除不必要的空白。由于JS文件现在可以减少,关于生产代码中空白的争论是没有意义的 没有实际价值或意义的;纯粹学术的。 现在,我们进入这个问题的核心问题。以下观点仅是我的观点,我理解随后可能会进行辩论。我并不声称这种做法是正确的,只是说它目前对我来说是正确的。如果有足够的证据表明这是一个糟糕的选择,我愿意讨论这个观点的替代方案 它完全可读,并且遵循Javascript祖先语言中的绝大多数格式约定 该语句分为两个部分:“完全可读”;“并遵循Javascript祖先语言中的绝大多数格式约定” 第二项可以忽略,因为我一直都是这样做的。 因此,让我们只关注语句的第一部分,它非常可读,“ 首先,让我们做一些关于代码的陈述
( foo === bar )
(foo === bar)
如果没有任何上下文,我们可能会在英语语法方面出错,然后使用第二个选项,即删除空白。但是,在这两种情况下,“isReadable”很容易是真的
让我们更进一步,删除所有空白
(foo===bar)
我们还能声称isReadable是真的吗?这就是布尔值不太适用的地方。让我们把isReadable移到一个Float,其中0是不可读的<
function isReadable(one, two, three){};
function examineString(string){};
examineString (isReadable (string));
examineString(); // yes; examineString (): // no;
input.$setViewValue(setToUpperLimit(inputValue));
input.$setViewValue( setToUpperLimit( inputValue ));
config.urls['pay-me-now'].initialize(filterSomeValues).then(magic);
config.urls[ 'pay-me-now' ].initialize( fitlerSomeValues ).then( magic );
var hello='someting';
if(type===undefined){};
var string="I"+"can\'t"+"read"+"this";
function hello( one, two, three ){
return one;
}
hello( one );
hello({ key: value, thing1: thing2 });
var array = [ 1, 2, 3, 4 ];
array.slice( 0, 1 );
chain[ 'things' ].together( andKeepThemReadable, withPunctuation, andWhitespace ).but( notTooMuch );
this.someMethod(toString(value),max(value1,value2),myStream(fileName));
this.someMethod( toString( value ), max( value1, value2 ), myStream( fileName ) );