a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 177|回复: 3

[专业语言] JAVA专业语言:浅谈JavaScript编程语言的编码规范

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
JavaScript 编程说话作为最风行的客户端剧本说话,深受Web开发人员爱戴。JavaScript语法矫捷,简单易懂,对代码的名目的要求也相对松散。也正因为如斯,JavaScript 的编码规范也往往被不放在眼里,开发过程中修修补补,最终也就演酿成为后续维护人员的恶梦。为了此种恶梦不再发生,IBM高级软件工程师王丹丹对JavaScript 编程说话的编码规范进行了总结,现转载于此,供巨匠进修。全文如下:) G' Z) j4 K" d$ c8 E1 l
对于熟悉C/C++或Java说话的工程师来说,JavaScript显得矫捷,简单易懂,对代码的名目的要求也相对松散。很轻易进修,并运用到自己的代码中。也正因为这样,JavaScript的编码规范也往往被不放在眼里,开发过程中修修补补,最终也就演酿成为后续维护人员的恶梦。软件存在的持久价值直接与编码的质量成比例。编码规范能辅佐我们降低编程中不需要的麻烦。而 JavaScript代码是直接发送给客户浏览器的,直接与客户碰头,编码的质量更应该受到关注。
5 U  v, V/ T& _2 p本文浅谈JavaScript编程中关于编码规范的问题,剖析其中启事。但愿引起更多Web 开发人员对JavaScript编码规范问题的关注和对软件产物质量问题的正视。4 u1 e( F2 r( S7 o
前言# c: q( H; S# Z" e4 l
说起C/C++和Java编码规范,相信良多工程师并不目生。但说到 JavaScript 说话的编码规范,也许您会忍俊不禁。JavaScript 不是语法良久捷吗?变量随时用随时可以声明;语句竣事符可以不要;字符串和数字也可以相加;参数多一个少一个也不会报错。没错,当您年夜 C/C++ 和 Java 严酷的语法划定之下,转向 JavaScript 说话,会感受自由了良多,轻松了良多。语法松散是 JavaScript 主要的特征。它矫捷易懂,给开发人员带来了良多便利,但如不美观编写过程中不注重,代码的调试成本和维护成本则会无形地增添。
# A6 e% m& P& q- }3 ?JavaScript 编码会随应被直接发送到客户端的浏览器,代码规范不只是代码质量的保证,也影响到产物的持久诺言。但愿 JavaScript 编程说话的规范问题也能同样引起更多伴侣的关注。
* E& i. ]! T/ W& J2 {% N7 RJavaScript 编码规范建议
( D/ \4 g( \  W3 W6 s3 _本文就JavaScript 编码过程中涉及的排版、命名、声明、浸染域、及一些非凡符号的使用等方面,按照小我在进修工作中的总结,给出自己的一些建议,并剖析其中启事,以供参考。8 {5 L6 ~6 y8 }) f+ f* U, F- H( R
JavaScript 文件引用: V; F4 E- Q8 }; j
1 a+ a, ^# ^" W0 v! V- i
JavaScript 轨范应该尽量放在 .js 的文件中,需要挪用的时辰在 HTML 中以   缩进  V2 e# p% v# }
关于缩进的问题,不只是 JavaScript,几乎所有的说话编写的时辰,城市说起缩进的问题。缩进几乎是代码编写规范的第一课,是代码可阅读性判定的直接身分。( w" ]! Y: ~! X6 ]; s. m2 h& C. Y
代码缩进的益处是不言而喻的,可是对于若何缩进,则没有尺度而言。最受接待的是便利使用 TAB 键缩进,也有些喜欢用 2 个、4 个、8 个空格进行缩进。这样缩进气概纷歧,也同样给代码的阅读带来障碍。
( B* z# K6 x  @本文倡导用 4 个空格来进行缩进,并在统一产物中采用统一种缩进尺度。不撑持用 TAB 键进行缩进。这是因为直到此刻还没有统一的尺度来界说 TAB 键所庖代的空白巨细,有些编纂器解析为 4 个空格巨细,有些则解析为 8 个。因而用分歧的编纂器查看代码,可能造成名目杂乱。当然 TAB 简单易用,为解决这个问题,建议在设置开发情形时,将编纂器里的 TAB 快捷键年夜头设置为 4 个空格。据体味 Eclipse, Vi, Nodepad++,Editplus, UltraEdit 登械毙的编纂器,均供给了此功能。
% x" \: m0 F8 g$ p$ \- d2 l注释
/ H2 l! F+ ?! w0 C8 i代码中的注释很主要,自然也是毋庸置疑的。凡是我们会强调代码中注释数目的若干好多,而不放在眼里了对注释质量的提高。编码是实时添加注释,会给后续代码的维护人员带来很年夜的便当。可是如不美观注释不注重更新,或者因为拷贝、粘贴引起的错误的注释,则会误导阅读人员,反而给阅读带来障碍。* D& I) S6 M) e$ P3 b2 S

% R2 Y( M8 F) b2 w9 U- g% o除了注释要 实时更新外,我们还应对注释的内容要出格关注。注释要尽量简单、清楚了然,避免使用含混艰涩的说话,同时着重 注释的意义,对不太直不美观的部门进行注解。请见清单 2。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:45 | 显示全部楼层

JAVA专业语言:浅谈JavaScript编程语言的编码规范

</p>清单 2. 有意义的注释) A* q' A, M% o, g" m" ^2 A( A
3 P+ q8 R5 q4 u3 F" u! e
  这样的注释体例在 JavaScript 代码中经常见到。"initialize valueA to be sero" 这样的注释有什媚暌姑呢?莫非阅读轨范的工程师年夜"var valueA = 0;"复制语句中看不出来么?"set timeout to be 20s"这条注释,不只是因拷贝、粘贴引起的侍旧宿细的错误,同时也误导了轨范员对这条语句的理解。setTimeout() 函数的浸染并非是设置函数执行的超不时刻,而是期待一按时刻后执行所挪用的函数,害人匪浅呀。这样的注释内容宁可删失踪。4 v2 w% P9 N7 t: [% p
此外,JavaScript 的注释有两种"//" 和"/* .... */",建议"//"用作代码行注释,"/* .... */"形式用作对折个代码段的注销,或较正式的声明中,如函数参数、功能、文件功能等的描述中。4 ?: f2 r: x! W& x$ p
标识符命名, W) o% |" T& @/ x
JavaScript 中的标识符的命名轨则:
/ T* U; A! a" P) i) H1 ?5 U&#8226; 以字母、下划线'_'或美元符号'$'开首
7 Q3 `+ w5 O9 |' J2 r&#8226; 许可名称中包含字母,数字,下划线'_'和美元符号'$'5 a! H; `9 {( u8 A4 [4 ^
&#8226; 区分巨细写
2 L2 F, \2 }5 U: C8 S变量、参数、成员变量、函数等名称均以小写字母开首,机关器的名称以年夜写字母开首。下划线'_'开首的变量一般习惯于标识私有 / 局部成员。而美元符号'$'开首的变量习惯于标识系统相关,好比系统历程等。应避免用下划线'_'或美元符号'$'来命名标识符。尽可能地降低代码的阅读承担。
4 f7 v) T- ^1 M声明" r4 Q- ]2 c9 U, W
变量的声明
# n: p; o- P, j" l! f' {* p尽管 JavaScript 说话并不要求在变量使用前先对变量进行声明。但我们仍是应钙揭捉成这个好习惯。这样可以斗劲轻易的检测出那些未经声明的变量,避免其变为潜匿的全局变量,造成隐患。
% g! g2 Z2 M4 D1 ?$ F在函数的起头应先用 var 关头字声明函数中要使用的局部变量,注释变量的功能及代表的寄义,且应以字母挨次排序。每个变量零丁有一行,以便添加注释。这是因为 JavaScript 中只有函数的 {} 剖明浸染域,用 var 关头字声明的局部变量只在函数内有用,而未经 var 声明的变量则被视为全局变量。我们来看下清单 3。8 H3 R% z9 U# Y6 [- u  [
清单 3. 局部变量声明
+ ]# w: O7 [$ M5 D8 U2 m. M, K0 D: s6 e0 S6 F
  年夜上例的输出诧异地发现,用 var 声明过的变量 valueA 和没有声明的变量 valueB 是有区此外。出格需要注重的是,在函数内部用 var 声明的变量为局部变量,这样可以有用地避免因局部变量和全局变量同名而发生的错误。
% t2 s, r* q4 I函数的声明
/ h1 h5 w4 |4 H0 R# ]( p函数也应在挪用前进行声明,内部函数应在 var 声明内部变量的语句之后声明,可以清楚地剖明内部变量和内部函数的浸染域。
" z# R" U6 N: q- D( |/ E- ^8 O此外,函数名紧接左括号'('之间,而右括号')'和后面的'{'之间要有个空格,以清嚣张地显示函数名以其参数部门,和函数体的起头。若函数为匿名 / 无名函数,则 function 关头字和左括号'('之间要留空格,否则可能误认为该函数的函数名为 function。
* }' o9 e/ v+ {( r1 P; e! L清单 4. 内部函数声明
. R6 q* Y/ I: A5 A& D* ^" Y9 f+ s1 [) }; t1 d2 H1 e1 j
  , Z& [! v6 z* V5 i
年夜清单 4 的输出可以看出,inF() 函数仅在 outF() 函数的内部生效,局部变量 innerA 对内部函数的浸染域生效。这样的编码体例使得变量和函数的浸染域变得清楚。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:46 | 显示全部楼层

JAVA专业语言:浅谈JavaScript编程语言的编码规范

</p>语句$ b$ v' X/ @6 l- q& D2 [/ x# }: ^4 @
对于简的暌癸句而言,需要说起的仍然是分号需要性,同时,一行最多有一个语句。如不美观一个赋值语句是用函数和对象来赋值,可能需要跨多行,必然切记要在赋值语句末加上分号。
" a9 L0 K9 \6 @$ P6 r这是因为 JavaScript 中,所有表达式都可以当语句,遇换行符时会解析为表达式的竣事,此时不规范的换行和分号的丢失踪,可能惹人新的错误。
7 a! O$ B2 ~* S+ {% f3 S+ {0 ?对于复合语句,if, for, while, do, switch, try … catch 等代码体,函数界说的函数体,对象的界说等都需要放在花括号'{}'琅缦沔。
0 z  l$ O9 H- b4 a&#8226; '{' 应在行末,标识表记标帜代码块的起头。, G3 p+ B* K8 J8 F8 S+ T& s
&#8226; '}' 应在一行开首,标识表记标帜代码块的竣事,同时需要和'{'地址行的起头对齐,以剖明一个完整的复合语句段。这样可以极年夜地提高代码的可阅读性,节制逻辑能清楚地默示出来。, d  t4 ]" P1 m- x* A
&#8226; 被包含的代码段应该再缩进 4 个空格。
+ p" U8 `: P! E+ o1 Q&#8226; 即使被包含的代码段只有一句,也应该用花括号'{}'包含。尽管不用花括号代码也不会错,但如若需要增添语句的话,则较轻易因花括号漏失踪而引起的编译错误或逻辑错误。
7 s% Z1 O6 P: A& U3 oreturn语句在使用时也需稳重,如不美观用表达式的执行作为返回值,请把表达式和 return 放在统一行中,以免换行符被曲解析为语句的竣事而引起返回错误。return 关头字后若没有返回表达式,则返回 undefined。机关器的默认返回值为 this。' U3 G  K+ m& G% z  x1 w
清单 5. return 表达式: ^, A& l& w5 x) t9 l& t1 i

6 j0 M+ |+ G1 Z( b             在清单 5 中显示了因返回表达式没有和 return 关头字放在统一行而引起的返回错误,需正视。  t4 {7 E8 V; n1 V, L6 P" e
非凡符号
( }1 V. W! f7 f; A& E空白符
0 k+ Q0 y+ J, T; l恰当的空白行可以年夜年夜提高代码的可阅读性,可以使代码逻辑更清楚易懂。同时,在表达式中恰当的留空白,也会给代码的阅读带来便利。
* P7 i9 P( r' I; h关头字的后面若有括号,则最好在关头字和左括号'('之间留空白,如 for, if, while 等。而函数名和括号之间则不宜留空白,但若是匿名函数,则必需在 function 和左括号'('之间留空白,否则,编纂器会误认为函数名为 function。) O. }& w% {5 l0 L7 L+ o5 w
在表达式中,二元运算符 ( 除左括号'(',左方括号'[',浸染域点'.') 和两个操作数之间最好留空白。一元运算符(若不是词 typeof 等)和其操作数之间不宜留空白。/ N, G0 s: Y- W* c7 w0 }, b: D
逗号','的后面需要留空白,以显示明晰的参数距离,变量距离等。5 \' W) s% T5 [+ u; D! E

0 i$ v. I( }( [. U1 T分号';'之后凡是剖明表达语句的竣事,而应空行。在 for 的前提语句中,分号之后则应该留空白。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:47 | 显示全部楼层

JAVA专业语言:浅谈JavaScript编程语言的编码规范

</p>{ } 和 [ ]( o& n( U1 R4 E% q2 I
在 JavaScript 中,如需界说空对象和挲组,凡是很自然地想到用 new Object() 和 new Array() 的体例。其实花括号'{}'和方括号'[]'可以直接用来界说一个空对象和一个空数组。这种书写体例可以使代码看起来简单易懂。% ^4 @' j5 f! I- j6 Y- `
== 和 ===% ?8 n0 Q2 b* B7 P' k
判定"逻辑等"在代码里承泛泛的不外工作了,但 JavaScript 与其他熟知的编程说话分歧的是,除了可以使用两个等号'=='来作判定觉得,还可以使用三个等号'==='来进行逻辑等判定。两者的分歧是'=='作逻辑等判定时,会前进前辈行类型转换后再进行斗劲。'==='则不会。因而,'=='进行的判定结不美观可能发生误差。'!='与'!=='的区别亦是如斯。本文倡导尽量使用'==='来进行逻辑等的判定,用'!=='进行逻辑不等的判定。
" r8 e8 b( ^1 y6 Z清单 6. === 的使用
; O, b1 y1 }8 T7 Z0 ~$ n7 O
& r9 @+ m) N% j$ p! g) S/ X# O' Y  清单 6 中,valueA 和 valueB 两个变量的值显然是不相等的,起码 valueA 是个字符串,而 valueB 是一个数字。但用'=='进行判定是,轨范却输出相等的字样。这是因为编译器对两个变量进行斗劲时,因为他们的类型分歧,而自动地将 valueB 转换成字符串,尔后再和 valueA 进行斗劲的。用'==='获得的判定结不美观正和预期的结不美观相符。
  V2 M# e5 W# {# t! Y" C+7 A# y8 q9 m  _0 [& W" k* c, m8 x
加号'+'也同样是轨范员所熟知的操作符之一。JavaScript 和其他编程说话分歧的是,在 JavaScript 中,'+'除了暗示数字值相加,字符串相毗连以外,还可以作一元运算符用,把字符串转换为数字。因而如不美观使用不妥,则可能与自增符'++'同化而引起计较错误。这一点,在清单 7 中可以清嚣张地看出。; N# @$ s) `% m/ {2 V2 h
清单 7. 巧用 + 号
" f% V0 b" J8 B- u, j8 v* M) {: M6 w* w' K5 z* S& f1 w9 G
   总结
7 z5 ~3 D* @% S# m本文就 JavaScript 代码的排版、命名、声明、语句、和一些非凡字符的使用等方面,谈了自己对 JavaScript 编程规范的建议。此外,还有良多方面需要深切体味研究,如 with, eval 语句和 this 对象的使用等等。我们在熟悉其普遍性的同时也需要注重其非凡性,在编写代码时多专心寄望,以缔造更多更优质的轨范代码。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-30 00:17 , Processed in 0.170905 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表