JavaScript代码规范

原文: Code Conentions for the JavaScript Programming Language

这是一篇JavaScript编程代码规范,它由Sun公司的文档Code Conventions for the Java Programming Language激发而来。
由于JavaScript is not Java,这篇规范和Java规范相比有很大改动。

代码质量在软件质量中占很大比例。在软件生命周期里,一个程序会被许多人接手。如果一个程序可以很好的表达自己的结构和特性,则在
不久的将来修改它时就会减少程序崩溃的可能。

代码规范可以帮助减少程序的脆弱性。

Webjx.Com

我们所有的JavaScript代码都直接发布给公众,它应该具有发布质量。 Webjx.Com

Neatness counts.

目录:
JavaScript文件
缩进
行宽
注释
变量声明
方法声明
命名
语句
- 简单语句
- 复合语句
- 标签
- return语句
- if语句
- for语句
- while语句
- do语句
- switch语句
- try语句
- continue语句
- with语句
空格
额外的建议
- {}和[]
- 逗号操作符
- 块作用域
- 赋值表达式
- ===和!==操作符
- 令人混淆的加和减
- 邪恶的eval

Webjx.Com

 

JavaScript文件
JavaScript程序应该作为一个.js文件存储和发布。

JavaScript代码不应该嵌入在HTML文件里,除非那些代码是一个单独的会话特有的。HTML里的JavaScript代码大大增加了页面的大小,并且
很难通过缓存和压缩来缓解。

网页教学网

<script src=filename.js>标签应该在body里越靠后的位置越好。这减少了由于加载script而导致的其它页面组件的延迟。没有必要使用
language或者type属性。由服务器而不是script标签来决定MIME类型。 网页教学网

缩进
缩进的最小单位是4个空格。不要使用tab键,because (as of this writing in the 21st Century) there still is not a standard
for the placement of tabstops. 使用空格会引起文件变大,但是这点大小对局域网无关紧要,而且差别被minification消除了。

行宽
不要让一行代码超过80个字符。当一条语句不能在单独一行写完时,可能有必要拆分它。在操作符后进行拆分,最好是在逗号后面拆分。
操作符后面进行拆分减少了通过插入分号伪装copy-paste错误的可能性。下一行应该缩进8个空格。

 

注释
慷慨的写注释。留下一些供需要理解你做了什么的人们(可能是你自己)下次阅读的信息是有用的。注释应该书写良好和清晰,就像它们
标注的代码一样。偶尔小幽默一把也是可以的。挫折和怨恨就别写了。

更新注释非常重要。错误的注释让程序更难读懂和理解。

网页教学网

让注释有意义。更多的关注于不能马上可见的东西。不要用如下内容浪费读者的时间:
i = 0; // Set i to zero. Webjx.Com

一般使用行注释。把块注释用于正式文档或外部注释。

变量声明
所有的变量应该在使用前声明。JavaScript不强求这点,但是这样做会让程序更易读,并且会让探测未声明的可能变成隐式的globals的
变量更容易。

网页教学网

var语句应该为方法体内的第一个语句。 Webjx.Com

每个变量声明应该自己占一行并有注释。它们应该按字母顺序排列。
var currentEntry; // currentyly selected table entry
var level; // indentation level
var size; // size of table Webjx.Com

JavaScript没有块作用域,所以在块里定义变量可能会让有其它C家族语言经验的程序员迷惑。在方法顶端定义所有变量。

尽量少使用全局变量。隐式的全局变量应该从来不使用。

方法声明
所有的方法应该在它们使用前声明。内部方法应该位于var语句后面。这让哪些变量包含在它的scope里更清楚。

方法名和参数列表的“(”(左圆括号)之间不应该有空格。在“)”(右圆括号)和“{”(左大括号)之间有一个空格。
方法体本身缩进4个空格。“}”(右大括号)应该和方法声明处对齐。
function outer(c, d) {
var e = c * d; Webjx.Com

function inner(a, b) {
return (e * a) + b;
}

 

return inner(0, 1);
}

这个规范可以和JavaScript很好的工作,因为在JavaScript里方法和对象字面量可以放在允许表达式的任何位置。它使用内部方法和复杂
结构提供最好的可读性。
function getElementsByClassName(className) {
var results = [];
walkTheDOM(document.body, function (node) {
var a; // array of class names
var c = node.className; // the node's classname
var i; // loop counter
// If the node has a class name, then split it into a list of simple names.
// If any of them match the requested name, then append the node to the set of results.
if (c) {
a = c.split(' ');
for (i = 0; i < a.length; i += 1) {
if (a[i] === className) {
results.push(node);
break;
}
}
}
});
return results;
}

如果一个方法字面量为匿名的,则在“function”和“(”(左圆括号)之间应该有一个空格。如果省略空格,则它可能看起来方法名是
“function”,而这是错误的。
div.onclick = function (e) {
return false;
};
that = {
method: function () {
return this.datum;
},
datum: 0;
};

 

尽量少用全局方法。 Webjx.Com

命名
命名应该由26个大小写字母(A .. Z, a .. z),10个数字(0 .. 9)和_(下划线)组成。不要使用国际字符,因为它们可能不易读或者不能在
任何地方都能容易理解。不要在名字里使用$(美元符号)或\(反斜线符号)。

 

不要使用_(下划线)作为名字的首字母。它有时被用来表示私有,但是它实际上不提供私有性。
如果私有性很重要,使用提供私有性的private members。
Avoid conventions that demonstrate a lack of competence. 网页教学网

大多数变量和方法名应该以小写字母开始。

 

必须使用new前缀的构造函数应该以大写字母开始。JavaScript不会在省略new时报编译期警告或运行时警告。
不使用new时会发生坏事情,所以大写首字母规范是我们拥有的唯一的防御。

全局变量应该全部使用大写字母。(JavaScript没有宏或常量,所以没有多少要求使用大写字母来表示JavaScript的特性的场景) 网页教学网

语句

 

简单语句
每行应该包含至少一个语句。在每个简单语句末尾添加一个“;”(分号)。注意一个给方法字面量或对象字面量赋值的赋值语句仍然是
一个赋值语句,所以也必须以分号结尾。

JavaScript允许任何表达式作为语句使用。这可能产生一些错误,特别是在插入分号时。唯一可以当作语句使用的表达式是赋值表达式和
调用表达式。 网页教学网

复合语句
复合语句是包含一个用“{}”(大括号)包围语句列表的的语句。
1,包围的语句应该再缩进4个空格。
2,“{”(左大括号)应该位于开始复合语句的行的末尾。
3,“}”(右大括号)应该新起一行并且和相匹配的“{”所在那行的起始位置对齐
4,当语句是控制结构的一部分时,所有语句都应该用括号包围,即使是单行语句,例如if或for语句。这让添加语句更容易而且不会引起八哥。

标签
语句标签是可选的。只有如下语句需要被标签标识: while,do,for,switch。 网页教学网

return语句
具有值的return语句不应该使用“()”(圆括号)包围值。返回值表达式必须和return关键字在同一行从而避免插入分号。

 

if语句
if语句应该使用如下格式:
if (condition) {
statements;
}

Webjx.Com

if (condition) {
statements;
} else {
statements;
} 网页教学网

if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}

Webjx.Com

 

for语句
for语句应该使用如下格式:
for (initialization; condition; update) {
statements;
} 网页教学网

for (variable in object) {
statements;
}

第一种格式应该和数组使用。

 

第二种格式应该和对象使用。注意添加到对象的prototype中的成员将被包含在遍历中。通过使用hasOwnProperty方法来区分对象的
成员是明智的:
for (variable in object) {
if (object.hasOwnProperty()) {
statements;
}
}

Webjx.Com

while语句
while语句应该使用如下格式:
while (condition) {
statements;
}

 

do语句
do语句应该使用如下格式:
do {
statements;
} while (condition);

Webjx.Com

不像其它复合语句,do语句始终使用“;”(分号)结尾。 Webjx.Com

switch语句
switch语句应该有如下格式:
switch (e­xpression) {
case e­xpression:
statements;
default:
statements;
}

 

每个case和switch对齐,这避免了缩进过度。 Webjx.Com

每组语句(除了default)应该以break,return或者throw结束。不要fall through。

Webjx.Com

try语句
try语句应该使用如下格式:
try {
statements;
} catch (variable) {
statements;
}

网页教学网

try {
statements;
} catch (variable) {
statements;
} finally {
statements;
} Webjx.Com

continue语句
不要使用continue语句。它会让方法的控制流程模糊。

 

with语句
不要使用with语句。

 

空格
空行通过将逻辑相关的代码放到一起来增加可读性。

 

空格应该用于如下情况:
1,关键字后面跟“(”(左圆括号)时应该用一个空格隔开。
while (true) {

2,方法名和方法的“(”(左圆括号)之间不要有空格。这利于区分关键字和方法调用。
3,所有的二元操作符,除了“.”(圆点)、“(”(左圆括号)和“[”(左中括号),都应该使用一个空格来和操作数隔开。
4,一元操作符和操作数之间不应该使用空格隔开,除了操作符是一个单词时,如typeof。
5,for语句控制部分的每个“;”(分号)应该在后面跟一个空格。
6,每个“,”(逗号)后面应该跟一个空格。

额外的建议

{}和[]
使用{}替代new Object()。使用[]替代new Array()。
当成员名字为连续的整数时使用数组。当成员名字为任意的字符串或名字时使用对象。 网页教学网

逗号操作符
不要使用逗号操作符,除了for语句的控制部分的严格使用。(这不适合逗号操作符,它应该用于对象字面量,数组字面量,var语句和参数
列表。)

 

块作用域
在JavaScript里块没有作用域,只有方法有作用域。不要使用块,除了复合语句一定需要用到外。 Webjx.Com

赋值表达式
不要在if和while语句的条件部分做赋值。不要写不易懂的代码。

Webjx.Com

===和!==操作符
始终使用===和!==操作符会更好。==和!=操作符会做类型强制转换。特别是,不要使用==来和“假”值做比较。 Webjx.Com

令人混淆的加和减
注意不要在“+”后面跟“+”或“++”。这种模式令人混淆。在它们之间插入圆括号来让你的意图更清晰。
total = subtotal + +myInput.value;

// is better written as

 

total = subtotal + (+myInput.value);

这样“+ +”就不会被读错成“++”。

Webjx.Com

邪恶的eval
eval方法是JavaScript里最滥用的特性。不要使用它。
eval有别名。不要使用Function构造函数。不要传递字符串给setTimeout或者setInterval。

 

时间: 2024-10-27 13:38:38

JavaScript代码规范的相关文章

JavaScript 代码规范

所有的 JavaScript 项目适用同一种规范 设计原则: 1.原子思想:即每个function就做一件事: 2.归纳思想:将同一类的操作,全部整合到一起: 3.方便维护:可以便于后来人进行快速维护: 4.方便拓展:即可以根据每个不同的项目进行不同的更改: 5.通用前端设计模式:一些前端可以通用的设计模式 6.注意写好注释,将注释写的具体点: JavaScript 代码规范 代码规范通常包括以下几个方面: 变量和函数的命名规则 空格,缩进,注释的使用规则 其他常用规范-- 规范的代码可以更易于

现如今最流行的JavaScript代码规范_基础知识

什么是最佳的JavaScript代码编程规范?这可能是一个众口难调的问题.那么,不妨换个问题,什么代码规范最流行? sideeffect.kr通过分析GitHub上托管的开源代码,得出了一些有趣的结果.一起来看看吧. 行末逗号对行首逗号行末引号: 复制代码 代码如下: var foo = 1,     bar = 2,     baz = 3; var obj = {     foo: 1,     bar: 2,     baz: 3 }; 行首引号: 复制代码 代码如下: var foo =

标准javascript代码规范详解

1. Javascript代码应符合Douban-JSLint检验标准 1-1. 语句必须都有分号结尾,除了for, function, if, switch, try, while 1-2. 只有长语句可以考虑断行,如:  代码如下 复制代码                                  TEMPL_SONGLIST.replace('{TABLE}', da['results'])                                              

seo之首页head区代码规范

head区是指首页HTML代码的<head>和</head>之间的内容. 必须加入的标签,对搜索引擎有很打的影响,下面介绍head区代码规范: 1.公司版权注释 <!---ThesiteisdesignedbyMaketown,Inc06/2000---> 2.网页显示字符集 简体中文:<METAHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312"> 繁

深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点_javascript技巧

具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多. 此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档.执行同行评审以及运行JSLint.这些习惯和最佳做法可以帮助你写出更好的,更易于理解和维护的代码,这些代码在几个月或是几年之后再回过头看看也是会觉得很自豪的. 书写可维护的代码(Writing Maintainable Code ) 软件bug的修复是昂贵的,并且

背景图片-我的这段javascript代码有什么问题嘛?前端的

问题描述 我的这段javascript代码有什么问题嘛?前端的 window.onload = function(){ var width = document.getElementById("123").style.width; var height = document.getElementById("123").style.height; document.write(width); document.getElementById("123"

通用javascript代码判断版本号是否在版本范围之间_javascript技巧

通用判断版本号是否在两者之间,也可以搭配判断是否大于某版本号,小于取反即可 PS:需确保版本规范一致,比如都是.号分割的n位版本号 var APP = {}; //判断指定版本是否在版本范围之间,需确保版本规范一致;比如 (..,..,..) APP.betweenVersion = function(curr,start,end,separator){ if(curr == start || curr == end){ return true; } var separator = separa

JavaScript模块规范之AMD规范和CMD规范_javascript技巧

模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理.模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式.可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在.对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得"有理可循". 还有一些对于模块化一些专业的定义为:模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块.那么

编写高质量JavaScript代码的基本要点_javascript技巧

才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会是件很美妙的事情.具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多. 此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档.执行同行评审以及运行JSLint.这些习惯和最佳做法可以