Javascript、Html、Css编码文件状态:[]草稿[]正式发布[√]正在修改文件标识:ND-Webs-Documents当前版本:1.0.0作者:柯培宗完成日期:2007-09-28网龙公司地址:福州市温泉支路58号传真:0591-7606704总机:7519198E-mail:crm@nd.com.cn版本历史............................................................................................................................................2JAVASCRIPT命名.................................................................................................................................2HTML命名...........................................................................................................................................12CSS命名................................................................................................................................................12规范参考........................................................................................................................................16版本历史版本/状态作者参与者起止日期备注注释:版本从1.0开始,在第一版本正式发布后加一个需求版本号加0.01,改版加0.1,核心框架变化加1Javascript命名符合ECMA-Script这是一篇JavaScript编程代码规范,它由Sun公司的文档CodeConventionsfortheJavaProgrammingLanguage激发而来。由于JavaScriptisnotJava,这篇规范和Java规范相比有很大改动。代码质量在软件质量中占很大比例。在软件生命周期里,一个程序会被许多人接手。如果一个程序可以很好的表达自己的结构和特性,则在不久的将来修改它时就会减少程序崩溃的可能。代码规范可以帮助减少程序的脆弱性。我们所有的JavaScript代码都直接发布给公众,它应该具有发布质量。Neatnesscounts.目录:JavaScript文件缩进行宽注释变量声明方法声明命名语句-简单语句-复合语句-标签-return语句-if语句-for语句-while语句-do语句-switch语句-try语句-continue语句-with语句空格额外的建议-{}和[]-逗号操作符-块作用域-赋值表达式-===和!==操作符-令人混淆的加和减-邪恶的evalJavaScript文件JavaScript程序应该作为一个.js文件存储和发布。JavaScript代码不应该嵌入在HTML文件里,除非那些代码是一个单独的会话特有的。HTML里的JavaScript代码大大增加了页面的大小,并且很难通过缓存和压缩来缓解。scriptsrc=filename.js标签应该在body里越靠后的位置越好。这减少了由于加载script而导致的其它页面组件的延迟。没有必要使用language或者type属性。由服务器而不是script标签来决定MIME类型。缩进缩进的最小单位是4个空格。不要使用tab键,because(asofthiswritinginthe21stCentury)therestillisnotastandardfortheplacementoftabstops.使用空格会引起文件变大,但是这点大小对局域网无关紧要,而且差别被minification消除了。行宽不要让一行代码超过80个字符。当一条语句不能在单独一行写完时,可能有必要拆分它。在操作符后进行拆分,最好是在逗号后面拆分。操作符后面进行拆分减少了通过插入分号伪装copy-paste错误的可能性。下一行应该缩进8个空格。注释慷慨的写注释。留下一些供需要理解你做了什么的人们(可能是你自己)下次阅读的信息是有用的。注释应该书写良好和清晰,就像它们标注的代码一样。偶尔小幽默一把也是可以的。挫折和怨恨就别写了。更新注释非常重要。错误的注释让程序更难读懂和理解。让注释有意义。更多的关注于不能马上可见的东西。不要用如下内容浪费读者的时间:代码1.i=0;//Setitozero.一般使用行注释。把块注释用于正式文档或外部注释。变量声明所有的变量应该在使用前声明。JavaScript不强求这点,但是这样做会让程序更易读,并且会让探测未声明的可能变成隐式的globals的变量更容易。var语句应该为方法体内的第一个语句。每个变量声明应该自己占一行并有注释。它们应该按字母顺序排列。代码1.varcurrentEntry;//currentylyselectedtableentry2.varlevel;//indentationlevel3.varsize;//sizeoftableJavaScript没有块作用域,所以在块里定义变量可能会让有其它C家族语言经验的程序员迷惑。在方法顶端定义所有变量。尽量少使用全局变量。隐式的全局变量应该从来不使用。方法声明所有的方法应该在它们使用前声明。内部方法应该位于var语句后面。这让哪些变量包含在它的scope里更清楚。方法名和参数列表的“(”(左圆括号)之间不应该有空格。在“)”(右圆括号)和“{”(左大括号)之间有一个空格。方法体本身缩进4个空格。“}”(右大括号)应该和方法声明处对齐。代码1.functionouter(c,d)2.{3.vare=c*d;4.5.functioninner(a,b)6.{7.return(e*a)+b;8.}9.10.returninner(0,1);11.}这个规范可以和JavaScript很好的工作,因为在JavaScript里方法和对象字面量可以放在允许表达式的任何位置。它使用内部方法和复杂结构提供最好的可读性。代码1.functiongetElementsByClassName(className)2.{3.varresults=[];4.walkTheDOM(document.body,function(node)5.{6.vara;//arrayofclassnames7.varc=node.className;//thenode'sclassname8.vari;//loopcounter9.//Ifthenodehasaclassname,thensplititintoalistofsimplenames.10.//Ifanyofthemmatchtherequestedname,thenappendthenodetothesetofresults.11.if(c)12.{13.a=c.split('');14.for(i=0;ia.length;i+=1)15.{16.if(a[i]===className)17.{18.results.push(node);19.break;20.}21.}22.}23.});24.returnresults;25.}如果一个方法字面量为匿名的,则在“function”和“(”(左圆括号)之间应该有一个空格。如果省略空格,则它可能看起来方法名是“function”,而这是错误的。代码1.div.onclick=function(e)2.{3.returnfalse;4.};5.that=6.{7.method:function()8.{9.returnthis.datum;10.},11.datum:0;12.};尽量少用全局方法。命名命名应该由26个大小写字母(A..Z,a..z),10个数字(0..9)和_(下划线)组成。不要使用国际字符,因为它们可能不易读或者不能在任何地方都能容易理解。不要在名字里使用$(美元符号)或\(反斜线符号)。不要使用_(下划线)作为名字的首字母。它有时被用来表示私有,但是它实际上不提供私有性。如果私有性很重要,使用提供私有性的privatemembers。Avoidconventionsthatdemonstratealackofcompetence.大多数变量和方法名应该以小写字母开始。必须使用new前缀的构造函数应该以大写字母开始。JavaScript不会在省略new时报编译期警告或运行时警告。不使用new时会发生坏事情,所以大写首字母规范是我们拥有的唯一的防御。全局变量应该全部使用大写字母。(JavaScript没有宏或常量,所以没有多少要求使用大写字母来表示JavaScript的特性的场景)语句简单语句每行应该包含至少一个语句。在每个简单语句末尾添加一个“;”(分号)。注意一个给方法字面量或对象字面量赋值的赋值语句仍然是一个赋值语句,所以也必须以分号结尾。JavaScript允许任何表达式作为语句使用。这可能产生一些错误,特别是在插入分号时。唯一可以当作语句使用的表达式是赋值表达式和调用表达式。复合语句复合语句是包含一个用“{}”(大括号)包围语句列表的的语句。1,包围的语句应该再缩进4个空格。2,“{”(左大括号)应该位于开始复合语句的行的末尾。3,“}”(右大括号)应该新起一行并且和相匹配的“{”所在那行的起始位置对齐4,当语句是控制结构的一部分时,所有语句都应该用括号包围,即使是单行语句,例如if或for语句。这让添加语句更容易而且不会引起八哥。标签语句标签是可选的。只有如下语句需要被标签标识:while,do,for,switch。return语句具有值的return语句不应该使用“()”(圆括号)包围值。返回值表达式必须和return关键字在同一行从而避免插入分号。if语句if语句应该使用如下格式:代码1.if(condition)2.{3.statements;4.}5.6.if(condition)7.{8.statements;9.}10.else11.{12.statements;13.}14.15.if(condition)16.{17.statements;18.}19.elseif(condition)20.{21.statements;22.}23.else24.{25.statements;26.}for语句for语句应该使用如下格式:代码1.for(initialization;condition;update)2.{3.statements;4.}5.6.for(variableinobject)7.{8.statements;9.}第一种格式应该和数组使用。第二种格式应该和对象使用。注意添加到对象的prototype中的成员将被包含在遍历中。通过使用hasOwnProperty方法来区分对象的成员是明智的:代码1.for(variableinobject)2.{3.if(object.hasOwnProperty())4.{5.statements;6.}7.}while语句while语句应该使用如下格式:代码1.while(condition)2.{3.statements;4.}do语句do语句应该使用如下格式:代码1.do2.{3.statements;4.}while(condition);不像其它复合语句,do语句始