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 这些字符在不同的浏览器有不一致的处理,避免使用