首页 > 代码库 > JavaScript编码规范
JavaScript编码规范
代码编写规范
- 注释及更新注释
你必须注释你的代码,即使不会有其他人向你一样接触它。通常,当你深入研究一个问题,你会很清楚的知道这个代码是干嘛用的,但是,当你一周之后再回来看的时候,想必也要耗掉不少脑细胞去搞明白到底怎么工作的。
注释不能走极端:每个单独变量或是单独一行。但是,你通常应该记录所有的函数,它们的参数和返回值,或是任何不寻常的技术和方法。要想到注释可以给你代码未来的阅读者以诸多提示;阅读者需要的是(不要读太多的东西)仅注释和函数属性名来理解你的代码。例如,当你有五六行程序执行特定的任务, 如果你提供了一行代码目的以及为什么在这里的描述的话,阅读者就可以直接跳过这段细节。没有硬性规定注释比代码多,代码的某些部分(如正则表达式)可能注释要比代码多。
- 空格的使用
空格的使用同样有助于改善代码的可读性和一致性。在写英文句子的时候,在逗号和句号后面会使用间隔。在JavaScript中,你可以按照同样的逻辑在列表模样表达式(相当于逗号)和结束语句(相对于完成了“想法”)后面添加间隔。以下一些情况最好使用空格:
第一:for循环分号分开后的部分:如for (var i = 0; i < 10; i += 1) {...}
第二:for循环中初始化的多变量(i和max):for (var i = 0, max = 10; i < max; i += 1) {...}
第三:分隔数组项的逗号的后面:var a = [1, 2, 3];
第四:对象属性逗号的后面以及分隔属性名和属性值的冒号的后面:var o = {a: 1, b: 2};
第五:限定函数参数:myFunc(a, b, c)
第六:函数声明的花括号的前面:function myFunc() {}
第七:匿名函数表达式function的后面:var myFunc = function () {};
使用空格分开所有的操作符和操作对象是另一个不错的使用,这意味着在+, -, *, =, <, >, <=, >=, ===, !==, &&, ||, +=
等前后都需要空格。
// 宽松一致的间距, 使代码更易读, 使得更加“透气”
var d = 0,
a = b + 1;
if (a && b && c) {
d = a % c;
a += d;
}
// 反面例子, 缺失或间距不一, 使代码变得疑惑
var d = 0,
a = b + 1;
if (a&&b&&c) {
d=a % c;
a+= d;
}
- 命名规范
第一:使用大写字母写构造函数
function MyConstructor() {...} 构造函数
function myFunction() {...} 一般函数
第二:常量全部用大写,全局变量名字全部大写。全部大写命名全局变量可以加强减小全局变量数量的实践,同时让它们易于区分。
第三:可以使用一个下划线前缀表_protected(保护)属性,两个下划线前缀表示__private (私有)属性(只是模拟表示,并不是真的保护或私有,只是为了提醒用户)。例如:
var person = {
getName: function () {
return this._getFirst() + ‘ ‘ + this._getLast();
},
_getFirst: function () {
// ...
},
_getLast: function () {
// ...
}
};
- 花括号
4.1. 始终使用花括号
在可选的代码片段中也总是使用花括号。技术上将,在in或是for中如果语句仅一条,花括号是不需要的,但是你还是应该总是使用它们,这会让代码更有持续性和易于更新。
// 糟糕的实例
for (var i = 0; i < 10; i += 1)
alert(i);
// 好的实例
for (var i = 0; i < 10; i += 1) {
alert(i);
}
包括if…else…语句中也一样。花括号始终使用。
4.2. 左花括号始终与之前的语句放在同一行
因为分号插入机制(semicolon insertion mechanism)——JavaScript是不挑剔的,当你选择不使用分号结束一行代码时JavaScript会自己帮你补上。这种行为可能会导致麻 烦,如当你返回对象字面量,而左括号却在下一行的时候:
// 警告: 意外的返回值
function func() {
return
// 下面代码不执行
{
name : "Batman"
}
}
//好的习惯
function func() {
return {
name : "Batman"
};
}
总之,总是使用花括号,并始终把它的(左花括号)与之前的语句放在同一行。
- 始终使用缩进
用tab制表符缩进,因为任何人都可以调整他们的编辑器以自己喜欢的空格数来显示Tab。有些人喜欢空格——通常四个,这都无所谓,只要团队每个人都遵循同一个规范就行。如下:
function outer(a, b) {
var c = 1,
d = 2,
inner;
if (a > b) {
inner = function () {
return {
r: c - d
};
};
} else {
inner = function () {
return {
r: c + d
};
};
}
return inner;
}
使用缩进可以使代码看起来优雅漂亮。
- parseInt()下的数值转换
使用parseInt()你可以从字符串中获取数值,该方法接受另一个基数参数,这经常省略,但不应该。当字符串以”0″开头的时候就有可能会出问 题,例如,部分时间进入表单域,在ECMAScript 3中,开头为”0″的字符串被当做8进制处理了,但这已在ECMAScript 5中改变了。为了避免矛盾和意外的结果,总是指定基数参数。
var month = "06",
year = "09";
month = parseInt(month, 10);
year = parseInt(year, 10);
比parseInt()方法性能更好的方法,同时也可以替代parseInt()的方法,如下所示:
+"08" // 结果是 8
Number("08") // 8
- 避免使用eval()
如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有 问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。如果代码是在运行时动态生成,有一个更好的方式不使用eval而达到同样的目 标。例如,用方括号表示法来访问动态属性会更好更简单:
// 反面示例
var property = "name";
alert(eval("obj." + property));
// 更好的
var property = "name";
alert(obj[property]);
- 避免隐式类型转换
- Switch模式
- 最好不要扩展内置原型
- for-in循环的正确使用
- for循环的正确使用
- 变量的预解析(var散布的问题)
- 单var形式
- 访问全局对象
- 忘记var关键字的副作用
- 全局变量的问题
- 最小全局变量
JavaScript编码规范