您现在的位置: 万盛学电脑网 >> 程序编程 >> 脚本专题 >> javascript >> 正文

javascript编程语言的编码规范

作者:佚名    责任编辑:admin    更新时间:2022-06-22

  对于熟悉 C/C++ 或 Java 语言的工程师来说,javascript 显得灵活,简单易懂,对代码的格式的要求也相对松散。很容易学习,并运用到自己的代码中。也正因为这样,javascript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦。软件存在的长期价值直接与编码的质量成比例。编码规范能帮助我们降低编程中不必要的麻烦。而 javascript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注。

  本文浅谈 javascript 编程中关于编码规范的问题,分析其中缘由。希望引起更多 Web 开发人员对 javascript 编码规范问题的关注和对软件产品质量问题的重视。

  前言

  提及 C/C++ 和 Java 编码规范,相信许多工程师并不生疏。但说到 javascript 语言的编码规范,也许您会忍俊不禁。javascript 不是语法很灵活吗?变量随时用随时可以声明;语句结束符可以不要;字符串和数字也可以相加;参数多一个少一个也不会报错。没错,当您从 C/C++ 和 Java 严格的语法规定之下,转向 javascript 语言,会觉得自由了很多,轻松了很多。语法松散是 javascript 重要的特征。它灵活易懂,给开发人员带来了很多方便,但如果编写过程中不注意,代码的调试成本和维护成本则会无形地增加。

  javascript 编码会随应被直接发送到客户端的浏览器,代码规范不只是代码质量的保证,也影响到产品的长期信誉。希望 javascript 编程语言的规范问题也能同样引起更多朋友的关注。

  javascript 编码规范建议

  本文就 javascript 编码过程中涉及的排版、命名、声明、作用域、及一些特殊符号的使用等方面,根据个人在学习工作中的总结,给出自己的一些建议,并分析其中缘由,以供参考。

  javascript 文件引用

  javascript 程序应该尽量放在 .js 的文件中,需要调用的时候在 HTML 中以

  从清单 4 的输出可以看出,inF() 函数仅在 outF() 函数的内部生效,局部变量 innerA 对内部函数的作用域生效。这样的编码方式使得变量和函数的作用域变得清晰。

  语句

  对于简单语句而言,需要提及的仍然是分号必要性,同时,一行最多有一个语句。如果一个赋值语句是用函数和对象来赋值,可能需要跨多行,一定切记要在赋值语句末加上分号。

  这是因为 javascript 中,所有表达式都可以当语句,遇换行符时会解析为表达式的结束,此时不规范的换行和分号的丢失,可能引入新的错误。

  对于复合语句,if, for, while, do, switch, try … catch 等代码体,函数定义的函数体,对象的定义等都需要放在花括号'{}'里面。

  '{' 应在行末,标志代码块的开始。

  '}' 应在一行开头,标志代码块的结束,同时需要和'{'所在行的开始对齐,以表明一个完整的复合语句段。这样可以极大地提高代码的可阅读性,控制逻辑能清晰地表现出来。

  被包含的代码段应该再缩进 4 个空格。

  清单 1. 行结束的位置

			
 <script language="javascript"> 
 var valueA = 1; 
 var valueB = valueA         ///bad 
       +1; 
 var valueC = valueB +      ///good 
       valueA; 
 alert(valueB);              //output: valueB=2 
 alert(valueC);//output: valueC=3 
 </script> 

  缩进

  关于缩进的问题,不只是 JavaScript,几乎所有的语言编写的时候,都会提及缩进的问题。缩进几乎是代码编写规范的第一课,是代码可阅读性判断的直接因素。

  代码缩进的好处是不言而喻的,但是对于如何缩进,则没有标准而言。最受欢迎的是方便使用 TAB 键缩进,也有些喜欢用 2 个、4 个、8 个空格进行缩进。这样缩进风格不一,也同样给代码的阅读带来障碍。

  本文提倡用 4 个空格来进行缩进,并在同一产品中采用同一种缩进标准。不支持用 TAB 键进行缩进。这是因为直到现在还没有统一的标准来定义 TAB 键所代替的空白大小,有些编辑器解析为 4 个空格大小,有些则解析为 8 个。因而用不同的编辑器查看代码,可能造成格式混乱。当然 TAB 简单易用,为解决这个问题,建议在设置开发环境时,将编辑器里的 TAB 快捷键重新设置为 4 个空格。据了解 Eclipse, Vi, Nodepad++,Editplus, UltraEdit 等流行的编辑器,均提供了此功能。

  注释

  代码中的注释很重要,自然也是毋庸置疑的。通常我们会强调代码中注释数量的多少,而轻视了对注释质量的提高。编码是及时添加注释,会给后续代码的维护人员带来很大的便利。但是如果注释不注意更新,或者由于拷贝、粘贴引起的错误的注释,则会误导阅读人员,反而给阅读带来障碍。

  除了注释要 及时更新外,我们还应对注释的内容要特别关注。注释要尽量简单、清晰明了,避免使用含混晦涩的语言,同时着重 注释的意义,对不太直观的部分进行注解。请见清单 2。

  清单 2. 有意义的注释

 <script language="javascript"> 
 //following section is used to initialize golbal variables             (good) 
 var valueA = 0;     //initialize  valueA to be sero                       (bad) 
 var valueB = 1; 
 ... 
 //call f1 function after waiting for 50 seconds.                         (good) 
 setTimeout(f1,50000); //set timeout to be 20s                     (copy error) 
 ... 
 </script> 

  这样的注释方式在 JavaScript 代码中经常见到。"initialize valueA to be sero" 这样的注释有什么用呢?难道阅读程序的工程师从"var valueA = 0;"复制语句中看不出来么?"set timeout to be 20s"这条注释,不只是因拷贝、粘贴引起的时间大小的错误,同时也误导了程序员对这条语句的理解。setTimeout() 函数的作用并非是设置函数执行的超时时间,而是等待一定时间后执行所调用的函数,害人匪浅呀。这样的注释内容宁可删掉。

  此外,JavaScript 的注释有两种"//" 和"/* .... */",建议"//"用作代码行注释,"/* .... */"形式用作对整个代码段的注销,或较正式的声明中,如函数参数、功能、文件功能等的描述中。

  标识符命名

  JavaScript 中的标识符的命名规则:

  以字母、下划线'_'或美元符号'$'开头

  允许名称中包含字母,数字,下划线'_'和美元符号'$'

  区分大小写

  变量、参数、成员变量、函数等名称均以小写字母开头,构造器的名称以大写字母开头。下划线'_'开头的变量一般习惯于标识私有 / 局部成员。而美元符号'$'开头的变量习惯于标识系统相关,比如系统进程等。应避免用下划线'_'或美元符号'$'来命名标识符。尽可能地降低代码的阅读负担。

  声明

  变量的声明

  尽管 JavaScript 语言并不要求在变量使用前先对变量进行声明。但我们还是应该养成这个好习惯。这样可以比较容易的检测出那些未经声明的变量,避免其变为隐藏的全局变量,造成隐患。

  在函数的开始应先用 var 关键字声明函数中要使用的局部变量,注释变量的功能及代表的含义,且应以字母顺序排序。每个变量单独占一行,以便添加注释。这是因为 JavaScript 中只有函数的 {} 表明作用域,用 var 关键字声明的局部变量只在函数内有效,而未经 var 声明的变量则被视为全局变量。我们来看下清单 3。

  清单 3. 局部变量声明

			 <script language="javascript"> 
 var valueA  = "a"; 
 var valueB  = "b"; 
 function f1() { 
   var valueA = "c"; 
   alert("valueA="+valueA);        //output: valueA=c 
   valueB = "d"; 
   alert("valueB="+valueB);        //output: valueB=d 
 } 
 f1(); 
 alert("valueA="+valueA);            //output: valueA=a 
 alert("valueB="+valueB);            //output: valueB=d 
 </script> 

  从上例的输出惊奇地发现,用 var 声明过的变量 valueA 和没有声明的变量 valueB 是有区别的。特别需要注意的是,在函数内部用 var 声明的变量为局部变量,这样可以有效地避免因局部变量和全局变量同名而产生的错误。

  函数的声明

  函数也应在调用前进行声明,内部函数应在 var 声明内部变量的语句之后声明,可以清晰地表明内部变量和内部函数的作用域。

  此外,函数名紧接左括号'('之间,而右括号')'和后面的'{'之间要有个空格,以清楚地显示函数名以其参数部分,和函数体的开始。若函数为匿名 / 无名函数,则 function 关键字和左括号'('之间要留空格,否则可能误认为该函数的函数名为 function。

  清单 4. 内部函数声明

			 <script language="javascript"> 
 var innerA = 1; 
 function outF() { 
   var innerA = 2; 
   function _inF() { 
       alert("valueA="+innerA); 
   } 
   _inF(); 
 } 
 outF();