JavaScript命名约定

pei*_*rix 254 javascript naming-conventions

我知道有很多争议(可能没有争议,但至少是争论)关于哪种命名约定最适合JavaScript.

如何命名变量,函数,对象等?

我会对此有所了解,因为我没有长时间使用JS(几年,只有),我只是请求创建一个具有命名约定的文档,以便在我们的工作项目中使用.所以我一直在寻找(google-ing),并且有很多不同的意见.

我在JS上阅读的书籍本身也使用不同的命名约定,但他们都同意一点:"找到适合你的东西,并坚持下去."但是现在我已经阅读了很多,我发现我像其他一些方法一样,比我现在习惯的要好一些.

Geo*_*off 202

我遵循道格拉斯克罗克福德的 javascript 代码约定.我还使用他的JSLint工具来验证遵循这些约定.

  • 对于许多开发人员来说,JSLint可能过于激进和限制,那么[JSHint](http://www.jshint.com/)可能是更好的选择. (30认同)
  • 虽然这是一个很好的链接,但我不相信"链接答案"有这么多的选票.您至少可以提取和格式化链接页面的相关部分. (13认同)
  • Crockford没有进入这个层次的细节,但是那些恰好以大写字母开头的变量呢,因为它们指的是首字母缩略词 - 第一个字母或整个首字母缩略词是否应该小写?示例:`ECBhandle`与`ecbHandle`(它确实_不重要ECB的含义). (7认同)
  • 我真的很期待Crockford,但他的代码约定似乎已经过时了.我建议在列表中进一步查看@PavelHodek的答案 (4认同)
  • 我认为他的链接很好.如果你这么担心,你应该编辑帖子. (2认同)

Dee*_*ter 160

正如杰夫所说,克罗克福德说的很好.

我遵循的唯一例外(并且已经广泛使用)是使用$ varname来表示jQuery(或任何库)对象.例如

var footer = document.getElementById('footer');

var $footer = $('#footer');

  • +1这是一个非常有意义的结构. (47认同)
  • 我也使用$.我经常看到人们使用$来表示对象的缓存副本.我一直认为这是在玩文字.缓存>"现金"> $ (7认同)
  • 我也开始使用它了. (2认同)
  • 我强烈建议不要在变量名中使用特殊字符.很多框架都特别使用$. (2认同)

Pav*_*dek 109

您可以按照此Google JavaScript样式指南进行操作

一般来说,使用functionNamesLikeThis,variableNamesLikeThis,ClassNamesLikeThis,EnumNamesLikeThis,methodNamesLikeThis和SYMBOLIC_CONSTANTS_LIKE_THIS.

编辑:查看JavaScript样式指南和美化师的精彩集合.

  • 我不确定我是否完全同意这一点,考虑到他们开发了Dart和GWT(chrome扩展javascript api也非常类似java).对于谷歌的一些团队来说,开发javascript的最佳方式可能是用其他语言编写. (15认同)
  • 对于Google源代码+1,如果这个星球上有任何公司知道如何做javascript"最好"它必须是他们. (6认同)
  • @DanielSokolowski使用intellisense时怎么样?如果您使用下划线为大量变量添加前缀,那么每次访问这些变量时,您只需键入另一个字符.最后,你的intellisense列表看起来更干净,只需要更快一点找到你需要的东西. (3认同)
  • 我总是发现Google的私有命名约定*odd*,而不是`_fooBar`他们做`fooBar_` - 微软做对了:http://www.asp.net/ajaxlibrary/act_contribute_codingStandards.ashx (2认同)

Sim*_*lGy 9

我想尝试的一个约定是使用'the'前缀命名静态模块.看一下这个.当我使用别人的模块时,不容易看出我应该如何使用它.例如:

define(['Lightbox'],function(Lightbox) {
  var myLightbox = new Lightbox() // not sure whether this is a constructor (non-static) or not
  myLightbox.show('hello')
})
Run Code Online (Sandbox Code Playgroud)

我正在考虑尝试一种惯例,其中静态模块使用'the'来表示它们的预先存在.有没有人见过比这更好的方法?看起来像这样:

define(['theLightbox'],function(theLightbox) {
  theLightbox.show('hello') // since I recognize the 'the' convention, I know it's static
})
Run Code Online (Sandbox Code Playgroud)


Jav*_*ier 6

我认为除了一些语法限制; 命名约定推理与语言无关.我的意思是,支持c_style_functions和JavaLikeCamelCase的论据同样可以使用相反的方式,只是语言用户倾向于遵循语言作者.

话虽如此,我认为大多数图书馆都倾向于大致遵循Java的CamelCase的简化.我发现道格拉斯·克罗克福德对我来说很有品味.