Javascript 的代码质量规范
原文http://www.bujiaban.net/wordpress/?p=155
先简单介绍下JSLint 。是一款javascript程序代码质量检查工具。为什么叫JSLint?因为C语言在早期有个Lint工具帮助扫描检查c代码文件,JSLint于javascript就如lint 如c语言一样,帮助检查与验证我们的代码。
既然是代码质量检查工具,那么检查的标准是什么?怎么样的代码才算是高质量的?
JSLint从生产实践中总结出一套质量规范,代码规则,以此来作为检测的标准。姑且不论JSLint工具在与实践项目结合上的可操作性。这些规范规则能够为我们生产实践所用,作为团队开发的规范,对项目代码质量,可读性,可维护性都是有大大的好处。JSLint的具体使用方法可参看官网。
我对其中的规则整理如下。
全局变量
所有的变量或函数必须先定义再使用或调用
那如果是浏览器预定义的函数或变量呢?如alert
可以在js文件顶部
/*global alert*/ 告诉JSLint alert在其他地方已经定义了。alert后面还可以带个布尔值
/*global alert:true*/
alert = 1;
表示alert在这里可以赋值,如果为false表示不可赋值
JSLint提供了几个可选Option代替常用的一些非本地定义
分号;
for, function, if, switch, try, and while
除了这些语句,其他语句必须以分号结束。不能有空语句
逗号,
不能有多余的逗号如,数组的定义最后一个元素后面不能带逗号 var a = [1, 2, ];浏览器会有不一致的处理
块{}
if, while, do , for
这些语句必须{}
表达语句
只能是赋值语句或函数调用或delete语句,其他都认为是错误的,如 a; 报错
for in 语句
避免遍历原型链上所有属性,建议如下写法
for (name in object) {
if (object.hasOwnProperty(name)) {
....
}
}
switch
case或default前面必须是 break, return或 throw
var
变量与函数必须先定义再使用,同一个变量不能重复定义。函数的参数不能在函数内部重复定义,不能再块里面定义var,
因为javascript里面的块并没有块作用域,建议var定义全部放在函数顶部
with
不建议使用
== and !=
建议用===与!==来代替。在Option中可以关闭
迷惑的+/-
+不能跟在+或++后面,-不能跟在-或--后面
位操作
javascript没有整形的概念,在<< >> >>> ~ & |位操作时会将操作数从浮点转成整形,会导致意想不到的错误。不建议使用。Option可选
eval语句
不推荐使用
void类型
JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值。不推荐使用
new构造
{}代替new Object []代替new Array. new Number, new String, new Boolean这些用法都可以用字面常量来代替
如果是函数,
1.onfocus = new Function("document.bgColor='antiquewhite'")
2.onfocus = function () {document.bgColor = 'antiquewhite';};
第一种写法,函数体是个字符串,编译器不能发现语法类的错误。建议第二种写法
1.var foo = new function() {}
2.var foo = function () {}
这两种写法有什么不一样?第一种foo对象原型链上海挂有Object
不安全的字符
\u0000-\u001f
\u007f-\u009f
\u00ad
\u0600-\u0604
\u070f
\u17b4
\u17b5
\u200c-\u200f
\u2028-\u202f
\u2060-\u206f
\ufeff
\ufff0-\uffff
这些字符在不同的浏览器有不一致的处理,避免使用
浙公网安备 33010602011771号