24

很难找到有关 javascript 信息的一个方面是大小写实践。通过套管实践,我的意思是应该为哪些元素(构造函数、私有函数、公共函数)使用哪种套管样式(即驼峰式大小写、帕斯卡大小写等)。

我听到的唯一规则来自 Douglas Crockford 在 YUI 剧院的讲座,指出构造函数应该是唯一以大写字母开头的函数。

除此之外,人们在 javascript 中遵循的大小写标准似乎并不多。

有谁知道 javascript 的任何大小写最佳实践,以及为什么使用它们是合理的?

您的 .js 文件是否也遵循套管样式?

4

6 回答 6

38

我更喜欢 PascalCase 用于构造函数,而 camelCase 用于其他一切。这就是 JS 标准库使用的风格,嗯……到目前为止我见过的每个 JS 框架 :)

我对从 web 提供的所有文件使用 all_lowercase 命名约定。有一些不区分大小写的文件系统。

于 2009-06-17T16:42:12.583 回答
16

核心语言将 InitialCaps 用于构造函数(例如 Object、Date、Number、RegExp),将 camelCase 用于方法和属性(例如 something.toString()、quantity.valueOf()、regexp.ignoreCase)。DOM 规范和实现也遵循这个约定(例如 HTMLElement.setAttribute())。因此,采用相同的约定是最有意义的,或者你会以一种可怕的混合风格结束,比如:

var number_of_fish_requested = document.getElementById("fish").value;
var fish_count = parseInt(number_of_fish_requested, 10);

这变得完全令人困惑,不仅是打字,更重要的是,阅读。

(你花在阅读代码、调试或修改代码上的时间,比你一开始写代码的时间还要多。)

于 2009-06-17T16:53:32.110 回答
2

到目前为止,我所看到的是非常多样化的套管标准。

就我而言,我使用 C# 样式来编写我的 JavaScript 代码。我经常使用类(以及函数作为类,并且通常没有独立的函数。)所以,我使用 PascalCase 来表示类名、公共方法、属性和所有全局变量,并使用 camelCase 来表示参数、局部变量和私有函数。这以某种方式反映了我的常见环境,有助于区分变量范围。我还倾向于将我的类函数保存在与我的 ClassName 同名的单独文件中(ClassName.js、ClassName.min.js)。

这是关于我的方法。

我还注意到 Java 程序员遵循 Java 规则(并且写作风格类似于 Java 语言)。Ruby on Rails 程序员遵循自己的命名标准,例如underscore_separated_var_name.

此外,正如您所提到的,在非常流行的框架中命名时有大量使用 pascalCase 的趋势,这些框架的作者来自不同的社区,如 Linux/开源社区和微软开发人员(jQuery、knockout.js、JSJaC 等)

我应该注意到,当涉及到 JS 时,这些方法都不是错误的或正确的。命名约定和文件结构的主要目的是可读性。如果您始终如一,那么您和您的其他开发人员将很快理解并继续使用您的代码。

于 2013-05-02T18:43:34.490 回答
1

除了构造函数,我更喜欢 camelCase。原因(我相信这也是 Crockford 先生建议这样做的原因)是因为在其他语言中,例如 Java,约定是大写你的类,这就是构造函数的用途。

那是我的 0.02 美元。

于 2009-06-17T16:46:12.830 回答
1

所有带有下划线分隔符的小写字母最容易阅读;它遵循自然语言。“Best”会让你陷入一场圣战;现实情况是,案例并不像其他设计问题那么重要,但这是一个容易引起两极分化的话题。

ALongButNotReallyReadableIdentifier
an_even_longer_but_completely_readable_identifier
于 2009-06-17T17:06:16.573 回答
-1

公认的答案是正确的,但也有一些例外。在 window.JSON 和 window.XMLHttpRequest 中,术语大写。

大多数人也将 PascalCase 用于 Javascript 中的枚举类型对象和其中的大写值。有时命名空间也在 PascalCase 中完成。

示例:MyCompany.Web.UI.MyComponent.ThemeOption = { 黑色:0,银色:1,蓝色:2}

于 2013-03-27T09:32:22.400 回答