JavaScript是否支持新行?

Tow*_*wer 48 javascript coding-style conventions

在工作中,我们将括号放在下一行,但在家里,我做相反的事情.你更倾向哪个?(K&R vs OTBS)

function something() {
    // ...
}

function something()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

很多JavaScript库似乎都使用OTBS(一种真正的支撑样式).我想跟随它们以便在其他JavaScript项目中保持一致,但K&R风格看起来不是更具可读性吗?

注意:我们知道JavaScript中的return和braces的问题,这将始终是一个例外.但是,这只是一个案例.

Dan*_*llo 148

Douglas Crockford给出了选择K&R风格1的理由:

我总是使用K&R风格,把它{放在一行而不是前面,因为它避免了JavaScript return声明中可怕的设计错误.

他所指的错误是JavaScript如何return在以下两种情况下以不同方式处理语句:

return {
   'status': 'ok'
};
Run Code Online (Sandbox Code Playgroud)

......和:

return 
{
   'status': 'ok'
};
Run Code Online (Sandbox Code Playgroud)

第一个将返回一个具有status属性的对象,而后一个将返回,undefined因为分号插入.


1 Douglas Crockford:JavaScript:The Good Parts:Style(page 96) - ISBN:978-0596517748.

  • @rFactor:是的,这只是一个案例,你可以为这种情况做一个例外......但我看到了保持一致的观点,而不是为return语句做例外.另一方面,我喜欢K&R风格,所以对我来说都很好:) (24认同)
  • @Jeff,为什么要从函数中动态创建一个"kludge驱动行为"的例子?拥有一个不需要例外的样式当然是一个完全合理的观点. (24认同)
  • 哇 - 我不同意Crockford,以及其他任何人真正选择基于单一的,很少见的,由kludge驱动的行为的编码约定.因为这个原因,我对这个人失去了一点尊重. (12认同)
  • 这只是一个案例,如果您在新行上使用大括号,则可以例外. (9认同)
  • 您不需要对编码约定进行例外处理.只需将对象设置为临时变量,然后让它返回临时变量. (6认同)
  • @Kirk,我想你误解了我.我提到的kludge驱动行为是插入EOL分号.克罗克福德为什么会将这种卑鄙和狡猾的行为作为他选择编码风格的关键动机? (5认同)

bob*_*nce 32

这是一场圣战,你永远无法得到有用的答案!只要坚持项目中的其他人都在使用,不要争论!

对于它的价值,我是一个K&Rite.我发现OTBS在开放结构和下面的语句之间放置了很多视觉空间,当这两行通常密切相关时,可以更好地一起呈现,而不会介入几乎空白的行.我喜欢保留空白行以分隔相关语句块.

无论如何,在很多空格的编码风格中,这可能相对不重要.但就个人而言,我非常重视简洁,所以我可以在屏幕上保留更多的程序.

我不认为在闭合支架的不同柱上使用开放式支架是一个问题.从凹痕中很容易看到块状.除非你使用悬挂缩进.不要那样做.但这完全是另一场圣战.

  • 就个人而言,当我是那个决定的人时,是的.如果我不是,因为我是一个更广泛的项目的一部分,我不打算对其他人强迫什么是非常不重要的偏好. (5认同)
  • 对于大多数语言,我同意这是一场毫无意义的圣战,而且一致性应该是决定因素,但我认为对于Javascript,分号的自动插入为内联开口括号提供了真正的技术论据.不确定我完全同意它,但它是一个技术的,而不是宗教的论点. (5认同)

dal*_*ton 19

我遵循Douglas Crockford的JavaScript编码约定,该约定受Sun的Java风格指南的启发.

这是一个链接:http://javascript.crockford.com/code.html

  • 好点,因为支架放置真的很重要 (2认同)

And*_*rew 14

在我看来,这取决于还有谁将使用您的代码.如果你在一个C#团队工作并分担很多责任,那就把它放在一个新的界限上,避免不可避免的争吵.如果您使用大量PHP(或较旧的JS程序员),请将其放在第一行,原因完全相同.

但是,如果你正在寻找更具权威性的东西,道格拉斯·克罗克福德说,开口支撑应始终位于顶线.如果我没记错的话,他的推理是,它使它与其他语言保持一致.基本上,因为这是有效的,但(可能)不正确的代码:

function myFunc() 
{
    return 
    {
      ok: true
    };
} 
Run Code Online (Sandbox Code Playgroud)

...你应该普遍避免在新线上放置开括号.为什么?由于编程风格应该不会引起歧义.

上面的示例代码是有效的,因为它在语法上完全正确,如果您编写此代码,则不会引发异常.但是,{ok:true}它将返回undefined并且不会返回它下面的代码,而不是返回对象文字.将开口括号放在一行,它将返回您可能期望的对象文字.

问题是,你觉得这个论点足够引人注目吗?

  • 根本不引人注目.我的编码约定:A.使用你想要的任何支撑样式.B.任何依赖于BRACE STYLE的构造都是FUBAR,应该按照惯例避免使用. (9认同)

Lam*_*bda 5

两者都不比另一个好.只需选择一个并始终如一地使用它.