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
	这些字符在不同的浏览器有不一致的处理,避免使用
posted @ 2012-01-07 16:45  toxot  阅读(464)  评论(1编辑  收藏  举报