Javascript编码规范

Javascript编码规范 (1.0) o简介

?编撰

?要求

o空格

o对齐和缩进

o换行

o行长度

?字符串过长截断

?函数调用时参数过多

?三元运算符过长

?过长的逻辑条件组合

?过长的JSON和数组

?单行和跨行参数混用

?数组和对象初始化的混用

o命名

?命名法说明

?变量名

?参数名

?函数名

?方法/属性

?私有(保护)成员

?常量名

?类名

?枚举名

?枚举的属性

?命名空间

?语义

o语法

?变量声明

?字符串

?对象、数组和正则

?内置原型

?继承

?异常

o注释

?类型定义

?文件注释

?命名空间注释

?类注释

?函数/方法注释

?事件注释

?全局变量注释

?常量注释

?细节注释

o其它

o参考

简介

本文档主要的设计目标是商业体系前端Javascript开发风格保持一致,使容易被理解和被维护。

编撰

张立理、erik、顾轶灵、李玉北、王海洋、王杨、周莲洁。

本文档由商业运营体系前端技术组审校发布。

要求

在本文档中,使用的关键字会以中文+括号包含的关键字英文表示:必须(MUST)。关键字"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL"被定义在rfc2119中。

空格

在特定的位置加上空格有助于代码的可读性,以下位置必须(MUST)加上空格:

?除括号外,所有运算符的前后,如

?用作代码块起始的左大括号{前,包括if、else、try、finally这些关键字之后,以及函数定义的参数列表之后

?以下关键字之后:for、switch、while

?对象初始化({ ... })的每个属性名的冒号:后

?所有逗号,后

?单行的对象初始化({ ... })左大括号{后和右大括号}前

注意,在函数参数列表之前不得(MUST NOT)加上空格,以期和函数调用保持一致。以下是一个函数的正确声明方式:

function foo(x, y, z) {

// FunctionBody

}

var foo = function(x, y, z) {

// FunctionBody

};

对齐和缩进

必须(MUST)采用4个空格为一次缩进,不得(MUST NOT)采用TAB作为缩进。在以下情况下必须(MUST)缩进:

?一个代码块与其父代码块相比必须(MUST)多一次缩进

?未结束的语句在换行后必须(MUST)多一次缩进

?switch下的case和default必须(MUST)缩进

换行

在以下位置必须换行:

?每个独立语句结束后

?if、else、catch、finally、while等关键字前

?运算符处换行时,运算符必须(MUST)在新行的行首

对于因为单行长度超过限制时产生的换行,参考行长度中的策略进行分隔。

行长度

每一行代码严格以80字符为最大长度,即一行包括前后的空格,不得(MUST NOT)超过80个字符。

由于必定存在一些特殊的原因,导致一条语句的长度超过80,应当(SHOULD)按以下原则进行切分:

字符串过长截断

按一定长度截断字符串,并使用+运算符进行连接。分隔字符串尽量按语义进行,如不要在一个完整的名词中间断开。

特别的,对于HTML片段的拼接,通过缩进,保持和HTML相同的结构:

var html = '' // 此处用一个空字符串,以便整个HTML片段都在新行严格对齐 + '

'

+ '

Title here

'

+ '

This is a paragraph

'

+ '

Complete
'

+ '

';

也可使用数组来进行拼接,相对+运算更容易调整缩进:

var html = [

'

',

'

Title here

',

'

This is a paragraph

',

'

Complete
',

'

';

];

html = html.join(''); // 注意需要join

函数调用时参数过多

当参数过多,在一行书写函数调用语句会超过80个字符的限制时,应当(SHOULD)将每个参数独立写在一行上,并将结束的右括号)独立一行,所有参数必须(MUST)增加一个缩进,以控制每行的长度,如:

// 注意每一个参数的缩进

foo(

aVeryVeryLongArgument,

anotherVeryLongArgument,

callback

);

当参数较多,一行一个书写会导致过长时,应当(SHOULD)按逻辑对参数进行组合,最经典的是baidu.format函数,如:

// 将参数分为“模板”和“数据”两块

baidu.format(

dateFormatTemplate,

year, month, date, hour, minute, second

);

// 将参数分为“模板”、“日期”和“时间”

baidu.format(

dateFormatTemplate,

year, month, date,

hour, minute, second

);

三元运算符过长

三元运算符由3部分组成,因此其换行应当(SHOULD)根据每个部分的长度不同,形成3种不同的情况:

// 无需换行

var result = condition ? resultA : resultB;

// 条件超长的情况

var result = thisIsAVeryVeryLongCondition

? resultA : resultB;

// 结果分支超长的情况

var result = condition

? thisIsAVeryVeryLongResult

: resultB;

var result = condition

? resultA

: thisIsAVeryVeryLongResult;

不得(MUST NOT)出现以下情况:

// 最后一个结果很长,但不建议合并条件和第一分支

// 不要这么干

var result = condition ? resultA

: thisIsAVeryVeryLongResult;

这种方法会导致语义上的分裂,即“条件和分支”在一行,“另一分支”在一行,没有按逻辑进行组织。

过长的逻辑条件组合

当因为较复杂的逻辑条件组合导致80个字符无法满足需求时,应当(SHOULD)将每个条件独立一行,逻辑运算符放置在行首进行分隔,或将部分逻辑按逻辑组合进行分隔。最终将右括号)与左大括号{放在独立一行,保证与if内语句块能容易视觉辨识。如:

// 注意逻辑运算符前的缩进

if (user.isAuthenticated()

&& user.isInRole('admin')

&& user.hasAuthority('add-admin')

|| user.hasAuthority('delete-admin')

) {

// Code

}

过长的JSON和数组

如果对象属性较多导致每个属性一行占用空间过大,可以(SHOULD)按语义或逻辑进行分组的组织,如:

// 英文-数字的映射

var mapping = {

one: 1, two: 2, three: 3, four: 4, five: 5,

six: 6, seven: 7, eight: 8, nine: 9, ten: 10,

eleven: 11, twelve: 12, thirteen: 13, fourteen: 14, fifteen: 15, sixteen: 16, seventeen: 17, eighteen: 18, nineteen: 19, twenty: 20 };

通过5个一组的分组,将每一行控制在合理的范围内,并且按逻辑进行了切分。

对于项目较多的数组,也可以(SHOULD)采用相同的方法,如:

// 数字-英文的映射

var mapping = [

'one', 'two', 'three', 'four', 'five',

'six', 'seven', 'eight', 'nine', 'ten',

'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen',

'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty'

];

单行和跨行参数混用

当函数调用时,传递的参数大于或等于2个,且有一个或以上参数跨越多行时,应当(SHOULD)每一个参数独立一行,这通常出现在匿名函数或者对象初始化等作为参数时,如setTimeout函数等:

setTimeout(

function() {

alert('hello');

},

200

);

order.data.read(

'id=' + me.model.id,

function(data) {

me.attchToModel(data.result);

callback();

},

300

);

如果认为每个参数单独一行占用过多的空间,则应当(SHOULD)将跨域多行的参数独立出来为一个变量:

function attachDataToModel() {

me.attchToModel(data.result);

callback();

}

order.data.read('id=' + me.model.id, attachDataToModel, 300);

数组和对象初始化的混用

必须(MUST)严格按照每个对象的起始{和结束}在独立一行的风格书写,如:

var array = [

{

// ...

},

{

// ...

}

];

命名

命名的方法通常有以下几类:

命名法说明

?camel命名法,形如thisIsAnApple

?pascal命名法,形如ThisIsAnApple

?下划线命名法,形如this_is_an_apple

?中划线命名法,形如this-is-an-apple

根据不同类型的内容,必须(MUST)严格采用如下的命名法:

变量名

必须(MUST)使用camel命名法

参数名

必须(MUST)使用camel命名法

函数名

必须(MUST)使用camel命名法

方法/属性

必须(MUST)使用camel命名法

私有(保护)成员

必须(MUST)以下划线_开头

常量名

必须(MUST)使用全部大写的下划线命名法,如IS_DEBUG_ENABLED

类名

必须(MUST)使用pascal命名法

枚举名

必须(MUST)使用pascal命名法

枚举的属性

必须(MUST)使用全部大写的下划线命名法

命名空间

必须(MUST)使用camel命名法

语义

命名同时还需要关注语义,如:

?变量名应当(SHOULD)使用名词

?boolean类型的应当(SHOULD)使用is、has等起头,表示其类型

?函数名应当(SHOULD)用动宾短语

?类名应当(SHOULD)用名词

语法

变量声明

一个var关键字必须(MUST)只声明一个变量。

变量必须(MUST)即用即声明,不得(MUST NOT)在函数(或其它形式的代码块)起始位置统一声明所有变量。

字符串

字符串的起始和结束必须(MUST)使用单引号'。

对象、数组和正则

对象、数组和正则必须(MUST)优先使用其初始化器({...}、[...]、/.../)声明,非必要不得(MUST NOT)使用new Object|Array|RegExp。

如果一个对象的所有属性名均不是保留字,则该对象声明时,所有属性名不得(MUST NOT)添加引号,这包括属性名是数字的情况。

如果一个对象的属性名有一个或多个是保留字,则该对象声明时,所有属性名必须(MUST)添加引号。

内置原型

不得(MUST NOT)修改内置对象的原型

继承

建议(MAY)通过baidu.inherit或相似机制实现继承。

如自己实现继承,必须(MUST)对constructor进行修正。

异常

允许使用异常,但在创建Error对象时,必须(MUST)明确地传递message参数。注释

良好的注释有利于代码阅读和自文档化,以下内容必须(MUST)包含以/**开头和*/结尾的块注释,便于自文档化:

1.文件

https://www.360docs.net/doc/424135669.html,space

3.类

4.函数或方法

5.类属性

6.事件

7.全局变量

8.常量

自文档化的文档必须(MUST)说明what,而不是how。

类型定义

所有的类型定义都是以{开始, 以}结束,例如: {string}, {number}, {boolean}, {Object}, {Function}, {RegExp}, {Array}, {Date}。不仅仅局限于内置的类型,也可以是自定义的类型。比如定义了一个类Person ,就可以使用它来定义一个参数和返回值的类型。

注意:对于基本类型{string}, {number}, {boolean},首字母必须(MUST )小写。

类型定义 语法示例

解释 原生类型 String => {string}

Number => {number}

Boolean => {boolean}

Object => {Object}

Function => {Function}

RegExp => {RegExp}

Array => {Array}

Date => {Date}

...

-- 单一类型集合 {Array.} string 类型的数组

多类型 {(number |boolean)} 可能是number 类型, 也可能是boolean 类型

允许为null {?number} 可能是number, 也可能是null 不允许为null {!Object} Object 类型, 但不是null Function 类型 {function(number, boolean)} 函数, 形参类型

Function 带返回值 {function(number, boolean):string}

函数, 形参, 返回值类型 参数可选 @param {string=} opt_name 可选参数, =为类型后缀, opt_为形参前缀

可变参数 @param {...number} var_args 变长参数, ...为类型前缀, var_args 为形参名

任意类型 {*} 任意类型

@param {...*} var_args

@param {*=} opt_name

文件注释

文件必须(MUST )包含文件注释,文件注释必须(MUST )包含文件说明和开发者信息。文件说明用@file 标识,开发者信息用@author 标识。注释必须(MUST )以/**开始, 以*/结束。

推荐采用如下的文件注释(可以在自己的编辑器中配置模板文件): /**

* @file Describe the file

* @author leeight(liyubei@https://www.360docs.net/doc/424135669.html,)

*/

// 这里是文件的内容

命名空间注释

命名空间必须(MUST)使用@namespace标识。

/**

* @namespace

*/

var baidu = {};

类注释

必须(MUST)使用@constructor在类的构造函数上做标记。当类说明和构造函数说明需要区分时,可以(SHOULD)使用@class进行类说明。

/**

* 描述

*

* @constructor

*/

function Person() {

// constructor body

}

必须(MUST)使用@extends标记类的继承信息。

/**

* 描述

*

* @constructor

* @extends Person

*/

function Baiduer() {

Person.call(this);

// constructor body

}

baidu.inherits(Baiduer, Person);

使用包装方式扩展类成员时,必须(MUST)通过@lends进行重新指向。

/**

*

* @constructor

* @extends Person

*/

function Baiduer() {

Person.call(this);

// constructor body

}

baidu.extend(

Baiduer.prototype,

/** @lends Baiduer.prototype */{

_getLevel: function() {

// TODO

}

}

);

类的属性或方法等成员信息必须(MUST)使用@public/@protected/@private中的任意一个,指明可访问性。

/**

* 类描述

*

* @constructor

* @extends Person

*/

function Baiduer() {

Person.call(this);

/**

* 属性描述

*

* @type {string}

* @private

*/

this._level = 'T11';

// constructor body

}

baidu.inherits(Baiduer, Person);

/**

*

* @private

* @return {string} 返回值描述

*/

Baiduer.prototype._getLevel = function() {

};

函数/方法注释

函数/方法注释必须(MUST)包含函数说明、参数和返回值。

参数和返回值注释必须(MUST)包含类型信息和说明。

如果形参是可选参数,可以(SHALL)使用opt_为前缀。

/**

* 函数描述

*

* @param {string} p1 参数1的说明

* @param {string} p2 参数2的说明,比较长

* 那就换行了.

* @param {number=} opt_p3 参数3的说明(可选)

* @return {Object} 返回值描述

*/

function foo(p1, p2, opt_p3) {

var p3 = opt_p3 || 10;

return {

p1 : p1,

p2 : p2,

p3 : p3

};

}

对Object中各项的描述,必须(MUST)使用@param,不得(MUST NOT)使用@config。@config只能描述参数的直接1层属性。

/**

* 函数描述

*

* @param {Object} option 参数描述

* @param {string} option.url option项描述

* @param {string=} option.method option项描述,可选参数

*/

function foo(option) {

// TODO

}

重写父类方法时,应当(SHOULD)添加@override标识。

事件注释

必须(MUST)用@event标识事件,事件参数的标识与方法描述的参数标识一样。/**

* 值变更时触发

*

* @event

* @param {Object} e e描述

* @param {string} e.before before描述

* @param {string} e.after after描述

*/

onchange: function (e) {

}

如果不带占位函数的事件,可以(SHOULD)在fire时或构造函数中进行事件标识。此时必须(MUST)明确指定事件所属。

Select.prototype.clickHandler = function () {

/**

* 值变更时触发

*

* @event Select#change

* @param {Object} e e描述

* @param {string} e.before before描述

* @param {string} e.after after描述

*/

this.fire('change', {...});

};

全局变量注释

全局变量必须(MUST)包含注释。全局变量注释必须(MUST)包含说明和类型信息。

/**

* 全局变量说明

*

* @type {number}

*/

var currentStep = 1;

常量注释

常量必须(MUST)包含注释,且必须(MUST)使用@const标记,并包含说明和类型信息。

/**

* 常量说明

*

* @const

* @type {string}

*/

var REQUEST_URL = 'myurl.do';

细节注释

对于内部实现、不容易理解的逻辑说明、摘要信息等,我们可能需要编写细节注释。

细节注释必须(MUST)使用单行注释的//形式,并且在//后必须(MUST)跟一个空格。说明必须换行时,每行是一个单行注释的起始。

function foo(p1, p2, opt_p3) {

// 这里对具体内部逻辑进行说明

// 说明太长需要换行

for (...) {

....

}

}

有时我们会使用一些特殊标记进行说明。特殊标记必须(MUST)使用单行注释的形式。下面列举了一些常用标记:

1.TODO: 有功能待实现。此时需要对将要实现的功能进行简单说明。

2.FIXME: 该处代码运行没问题,但可能由于时间赶或者其他原因,需要修

正。此时需要对如何修正进行简单说明。

3.HACK: 为修正某些问题而写的不太好或者使用了某些诡异手段的代码。此

时需要对思路或诡异手段进行描述。

4.XXX: 该处存在陷阱。此时需要对陷阱进行描述。

其它

eval和with

当代码中使用eval或with时,该代码必须由一个同级别工程师和一个高级别工程师进行Review。

参考

1.https://https://www.360docs.net/doc/424135669.html,/closure/compiler/docs/js-for-comp

iler#types

2.https://www.360docs.net/doc/424135669.html,/

?ECOMFE

前端开发设计规范

前端开发设计规范 目录 前端开发设计规范 (1) 一、HTML使用规范 (1) 1.1、页面文件命名规范 (1) 1.2、页面head部分书写规范 (1) 1.3、HTML元素开发规范 (2) 1.3.1、HTML元素书写规范 (2) 1.3.2、HTML元素命名规范 (3) 二、WEB页面开发规范 (4) 2.1、错误跳转页面的处理 (4) 2.2、提示信息的处理 (4) 2.3、页面的返回 (4) 2.4、提交前数据的判断验证 (4) 2.5、删除操作 (5)

2.6、页面中java代码的使用 (5) 2.7、网站页面布局规范 (5) 2.7.1、前台页面尺寸 (5) 2.7.2、标准网页广告图标规格(参考) (6) 2.7.3、页面字体 (6) 2.7.4、字体颜色 (7) 三、javaScript开发规范 (7) 3.1、javaScript文件命名规范: (7) 3.2、javaScript开发规范 (7) 3.2.1、javaScript书写规范 (7) 3.2.2、javaScript命名规范 (8) 四、css样式规范 (10) 4.1、css样式文件命名规范 (10) 4.1.1、通用样式文件命名规范: (10) 4.1.2、业务类样式文件命名规范 (10) 4.1.3、css样式文件命名须知 (11)

4.2、css样式文件存放目录规范 (11) 4.3、css样式定义规范 (11) 4.3.1、css样式内容顶部注释规范 (11) 4.3.2、css样式内容注释规范 (12) 4.3.3、css样式定义规范 (12) 4.3.4、css样式常用id的命名 (13) 4.3.5、css样式常用class的命名 (16) 4.4、css样式书写规范 (16) 4.4.1、css样式排版规范 (16) 4.4.2、css样式书写风格规范 (16) 4.4.3、css样式属性定义顺序规范 (17) 4.4.4、css样式其他规范 (18) 4.4.5、css样式 Hack的使用 (19) 4.4.6、字体定义规范 (19) 4.4.7、css样式检测 (20) 4.4.8、注意事项 (20)

JavaScript编码规范

快读参考 核心 API 请使用下面的风格: 下面的虽然不是必要的,但建议使用: 命名规范 1.变量名称必须为小写字母。 2.类的命名使用骆驼命名规则,例如: Account, EventHandler 3.常量必须在对象(类)或者枚举变量的前部声明。枚举变量的命名必须要有实际 的意义,并且其成员必须使用骆驼命名规则或使用大写: var NodeTypes = { Element : 1, DOCUMENT: 2 } 4.简写单词不能使用大写名称作为变量名: getInnerHtml(), getXml(), XmlDocument

5.方法的命令必须为动词或者是动词短语:

obj.getSomeValue() 6.公有类的命名必须使用混合名称(mixedCase)命名。 7.CSS 变量的命名必须使用其对应的相同的公共类变量。 8.私有类的变量属性成员必须使用混合名称(mixedCase)命名,并前面下下划线(_)。 例如: var MyClass = function(){ var _buffer; this.doSomething = function(){ }; } 9.变量如果设置为私有,则前面必须添加下划线。 this._somePrivateVariable = statement; 10.通用的变量必须使用与其名字一致的类型名称: setTopic(topic) // 变量 topic 为 Topic 类型的变量 11.所有的变量名必须使用英文名称。 12.变量如有较广的作用域(large scope),必须使用全局变量;此时可以设计成一个 类的成员。相对的如作用域较小或为私有变量则使用简洁的单词命名。 13.如果变量有其隐含的返回值,则避免使用其相似的方法: getHandler(); // 避免使用 getEventHandler() 14.公有变量必须清楚的表达其自身的属性,避免字义含糊不清,例如: MouseEventHandler,而非 MseEvtHdlr。 请再次注意这条规定,这样做得的好处是非常明显的。它能明确的表达表达 式所定义的含义。例如: dojo.events.mouse.Handler // 而非 dojo.events.mouse.MouseEventHandler 15.类/构造函数可以使用扩展其基类的名称命名,这样可以正确、迅速的找到其基类 的名称: EventHandler UIEventHandler MouseEventHandler 基类可以在明确描述其属性的前提下,缩减其命名: MouseEventHandler as opposed to MouseUIEventHandler. 特殊命名规范

前台编码规范(HTML, JS, CSS)

密级:内部1引言 (2) 1.1编写目的 (2) 1.2变更记录 (2) 1.3定义 (2) 1.4参考资料 (2) 2HTML (2) 2.1命名 (2) 2.2标签 (3) 2.3排版 (3) 2.4CSHTML (3) 3JS (3) 3.1组织 (3) 3.2命名 (4) 3.3变量 (4) 3.4方法 (4) 3.5对象及控件 (4) 3.6第三方库 (4) 3.7排版 (4) 3.8AJAX (5) 4CSS (5) 4.1组织 (5) 4.2命名 (5) 4.3兼容性 (5) 4.4第三方库 (6) 4.5排版 (6)

前台编码规范 1引言 1.1编写目的 帮助开发团队形成一致的前台编码风格,并指出某些容易引发BUG的不良编码习惯,预期读者为长沙安晨信息科技有限公司的全体开发人员。 1.2变更记录 版本号作者日期备注 1.0Aaron7/1/2014 1.1Aaron7/31/2014Add examples 1.2Aaron8/4/2014Update the format 1.3定义 术语定义备注 HTML Hypertext Markup Language JS Javascript CSS Cascading Style Sheet 1.4参考资料 2HTML 2.1命名 文件名采用帕斯卡命令法,所有单词首字母大写,词汇缩小可以全部大写,单词间不加任何连接符。例如“UserLogin.cshtml”

?文件名应见名知义,能清晰描述页面主要功能,例如“AddUser.cshtml”。 2.2标签 ?所有标签都应该正确关闭,例如“

”,无子元素及内容的标签,可根据W3C规范简化为自关闭标签,例如“”,但有部分自关闭标签兼容性较 差,在无法确认的情况下,都应该使用双标签关闭。例如标签在IE浏览器中可 能无法加载背景图片。 ?为确保兼容性及用户体验一致性,应尽量避免使用以下过时标签:
。此外,不要将标签用于页面布局。 ?应尽量避免使用自定义标签名,以增强可读性和可维护性。 ?完整的独立*tml页面,应该内含
标签,并在
中登记keywords, description等信息,以便于搜索引擎收录。 2.3排版 ?HTML标记内部,不允许出现空行及无意义的空格。 ?应正确使用缩进来呈现嵌套关系,子元素应比父级元素缩进一个制表位。但仅有内容无子标签的元素,可在同一行书写,例如“”。 ?如标签属性过多过长,可适当在标签内部换行,但同一页面,同类标签应采用大致相同的换行策略,切忌五花八门。 2.4CSHTML ?向控件赋值应尽量直接使用标准的Model,ViewData或ViewBag,如非必要,不要使用@{}嵌入块,尤其是不要在嵌入块中进行无意义的重复引用,例如“@{var test=@ViewBag.Test;}”。 ?@Html生成器存在多个兼容性问题,应谨慎使用,简单的控件应尽可能使用原生html 标签。例如@Html.DropDownList在绑定已有选中值的数据源时,会丢失已选中项。 3JS 3.1组织 ?应尽可能将JS代码写入独立的JS文件中,而不要直接嵌入页面,以增强缓存利用率及可维护性。 ?相同或类似算法应尽可能统一到同一个方法中,以提高可维护性。尤其是不允许在Creat和Edit页面之间直接Copy相关JS代码。 ?在页面中引用JS文件时,应将引用标签写在标签之后。

浅谈JavaScript编程语言的编码规范

浅谈JavaScript编程语言的编码规范 简介: JavaScript 编程语言作为最流行的客户端脚本语言,早已被众多Web 开发人员所熟悉。随着Web2.0 时代的到来和Ajax 技术的广泛应用,JavaScript 也逐渐吸引着更多的视线。工作中要求越多的是对JavaScript 语言的深入学习,灵活运用,和对编码质量的保证。 对于熟悉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 中以

嵌套的节点应该缩进; 在属性上使用双引号(字符串拼接除外); 属性名全小写,用“-”做分隔符; 自动闭合标签处不能使用斜线。 Page title Company Hello, world! 2.HTML5 doctype 页面开头的doctype大写,html小写。 例: ... 3.字符编码 采用UTF-8的编码格式。 例: ... 4.引入CSS,JS CSS引入使用 JS 引入使用页面不允许出现style标签。 5.属性 1.属性名必须使用小写字母

...

JavaScript编码规范

快读参考 核心API请使用下面的风格: 结构规则注释 模块小写不要使用多重语义(Never multiple words) 类骆驼 公有方法混合其他的外部调用也可以使用lower_case(),这样的风格 公有变量混合 常量骆驼或大写 下面的虽然不是必要的,但建议使用: 结构规则 私有方法混合,例子:_mixedCase 私有变量混合,例子:_mixedCase 方法(method)参数混合,例子:_mixedCase,mixedCase 本地(local)变量混合,例子:_mixedCase,mixedCase 命名规范 1.变量名称必须为小写字母。 2.类的命名使用骆驼命名规则,例如: Account,EventHandler 3.常量必须在对象(类)或者枚举变量的前部声明。枚举变量的命名必须要有实际 的意义,并且其成员必须使用骆驼命名规则或使用大写: var NodeTypes={ Element:1, DOCUMENT:2 } 4.简写单词不能使用大写名称作为变量名: getInnerHtml(),getXml(),XmlDocument

5.方法的命令必须为动词或者是动词短语: obj.getSomeValue() 6.公有类的命名必须使用混合名称(mixedCase)命名。 7.CSS变量的命名必须使用其对应的相同的公共类变量。 8.私有类的变量属性成员必须使用混合名称(mixedCase)命名,并前面下下划线(_)。 例如: var MyClass=function(){ var_buffer; this.doSomething=function(){ }; } 9.变量如果设置为私有,则前面必须添加下划线。 this._somePrivateVariable=statement; 10.通用的变量必须使用与其名字一致的类型名称: setTopic(topic)//变量topic为Topic类型的变量 11.所有的变量名必须使用英文名称。 12.变量如有较广的作用域(large scope),必须使用全局变量;此时可以设计成一个 类的成员。相对的如作用域较小或为私有变量则使用简洁的单词命名。 13.如果变量有其隐含的返回值,则避免使用其相似的方法: getHandler();//避免使用getEventHandler() 14.公有变量必须清楚的表达其自身的属性,避免字义含糊不清,例如: MouseEventHandler,而非MseEvtHdlr。 请再次注意这条规定,这样做得的好处是非常明显的。它能明确的表达表达 式所定义的含义。例如: dojo.events.mouse.Handler//而非 dojo.events.mouse.MouseEventHandler 15.类/构造函数可以使用扩展其基类的名称命名,这样可以正确、迅速的找到其基类 的名称: EventHandler UIEventHandler MouseEventHandler 基类可以在明确描述其属性的前提下,缩减其命名: MouseEventHandler as opposed to MouseUIEventHandler.

JavaScript编码规范

产品源代码质量检测:JavaScript 编码规范 (A0)

目录 前言 ................................................................ 错误!未定义书签。 1概述 (4) 2文件引用及参考 (4) 3声明规则 (4) 3.1变量 (4) 3.2函数 (6) 4命名规则 (7) 4.1构造函数/类 (7) 4.2变量/对象属性 (7) 4.3常量 (8) 4.4命名空间 (8) 4.5函数/对象方法 (8) 4.6事件 (9) 5注释规则 (9) 5.1通用注释规则 (9) 5.2 JavaScript文件注释 (10) 5.3函数/方法注释 (10) 5.4变量/属性注释 (11) 6排版规则 (11) 6.1文件结构 (11) 6.2缩进 (11) 6.3分号 (11) 6.4空格 (12) 6.5行排版 (12) 6.6空行 (12) 6.7语句 (12) 6.7.1表达式语句 (12) 6.7.2复合语句 (13) 6.7.3 if-else语句 (13) 6.7.4 for语句 (13) 6.7.5 for-in语句 (13) 6.7.6 while语句 (13) 6.7.7 do-while语句 (13) 6.7.8 switch语句 (14) 6.7.9 try-catch-finally语句 (14) 7字符集编码规则 (14)

8编码健壮性遵循原则 (14) 8.1合理使用闭包 (14) 8.2合理使用for和for-in循环 (15) 8.3避免无限循环 (16) 8.4区分===和== (16) 8.5禁止使用with(){} (16) 8.6字符串拼接 (16) 8.7避免在函数中定义全局变量 (17) 8.8避免在JavaScript中包含过多的HTML、CSS内容 (17) 8.9异常处理 (17) 9安全 (18) 9.1 JSON串的安全过滤 (18) 9.2 JavaScript脚本攻击 (18) 9.3 Cookie泄露 (18) 9.4防止js代码泄露 (18) 10性能优化 (18) 10.1合理使用prototype (18) 10.2本地缓存对象属性 (18) 10.3减少操作HTML DOM结构的次数 (19) 10.4引用JavaScript文件 (19) 10.5事件代理 (19) 11第三方框架引入规范 (19) 12安全性要求 (19) 13附录 (19) 13.1一致性约束 (19) 13.2保留字 (20) 13.3 JSON格式 (21) 13.4常用类型值举例 (22) 13.5数据处理建议 (23) 13.5.1数据处理控件 (23) 13.5.2数据格式与处理 (23) 13.5.3缓存使用 (23)

javascript课程设计

课程设计报告正文书写要求 1.《课程设计报告书》的正文内容要求和格式如下: 一级标题:三号宋体加粗 二级标题:四号宋体加粗 正文内容:小四宋体 图、表号:5号宋体 一、报告书格式 1、标题如上一行,格式同上;内容格式同上; 2、内容为对题目的分析,及如何使用现有技术解决,分析过程有针对性有实际内容者为 佳; 3、如有多项,请使用1.2.…作为小标题;如果还有子项,请使用1)、2)、…作为小标 题; 二、个人总结 1、标题如上一行,格式同上;内容格式同上; 2、对你整个课程课设过程的体会和总结,不要太简单,按照自己实际完成情况的进行阐 述,要求半页以上。 三、 1.参考文献至少5个 2.《课程设计报告书》完成后。装订请严格按照装订顺序,左侧装订。 3.《课程设计报告书》杜绝雷同或抄袭,一旦发现,全部不及格,切记!切记!

潍坊科技学院 JavaScript课程设计 报告书 设计题目基于javascript的电子商务网站开发 专业班级 学生姓名 学号 指导教师 日期2012.12.24~2013.1.11 成绩

课程设计任务书 院系:专业:班级:学号: 一、课程设计时间 2012年12月24日至2013年1月11日,共计3周。 二、课程设计内容 使用html+javascript+css 完成以下任务: 1、能够熟练使用css结合html实现网页布局。 2、熟练使用文档对象模型和事件驱动,能够很好的实现web表单的交互式操作。 3、熟练使用javascrip中的对象,实现网页的动态效果。 三、课程设计要求 1. 课程设计质量: ?贯彻事件驱动的程序设计思想,熟练使用javascript中的对象,实现网页特效。 ?网页设计布局合理,色彩搭配合理,网页操作方便。 ?设计过程中充分考虑浏览器兼容等问题,并做适当处理。 ?代码应适当缩进,并给出必要的注释,以增强程序的可读性。 2. 课程设计说明书: 课程结束后,上交课程设计报告书和相关的网页。课程设计报告书的格式和内容参见提供的模板。 四、指导教师和学生签字 指导教师:学生签名: 五、教师评语:

Javascript 编写规范

JavaScript文件 JavaScript程序应独立保存在后缀名为.js的文件中。 JavaScript代码不应该被包含在HTML文件中,除非这是段特定只属于此部分的代码。在HTML中的JavaScript代码会明显增加文件大小,而且也不能对其进行缓存和压缩。 filename.js>应尽量放到body的后面。这样可以减少因为载入script而造成其他页面内容载入也被延迟的问题。也没有必要使用language或者type属性。MIME类型是由服务器而非scripttag来决定的。 缩进 缩进的单位为四个空格。避免使用Tab键来缩进(即使现在已经是21世纪了),也始终没有个统一的Tab长短标准。虽然使用空格会增加文件的大小,但在局域网中几乎可以忽略,且在最小化过程中也可被消除掉。 每行长度 避免每行超过80个字符。当一条语句一行写不下时,请考虑折行。在运算符号,最好是逗号后换行。在运算符后换行可以减少因为复制粘贴产生的错误被分号掩盖的几率。下一行应该缩进8个空格。 注释 不要吝啬注释。给以后需要理解你的代码的人们(或许就是你自己)留下信息是非常有用的。注释应该和它们所注释的代码一样是书写良好且清晰明了。偶尔的小幽默就更不错了。记得要避免冗长或者情绪化。 及时地更新注释也很重要。错误的注释会让程序更加难以阅读和理解。 让注释有意义。重点在解释那些不容易立即明白的逻辑上。不要把读者的时间浪费在阅读类似于: i = 0; //让i等于0使用单行注释。块注释用于注释正式文档和无用代码。 单行注释的符号是“//”,多行注释以"/*"开始,以"*/"结束。 变量声明 所有的变量必须在使用前进行声明。JavaScript并不强制必须这么做,但是这么做可以让程序易于阅读,且也容易发现那些没声明的变量(它们会被编译成全局变量)。

JavaScript代码规范标准[详]

这是一篇JavaScript编程代码规,它由Sun公司的文档Code Conventions for the Java Programming Language激发而来。 由于JavaScript is not Java,这篇规和Java规相比有很大改动。 代码质量在软件质量中占很大比例。在软件生命周期里,一个程序会被许多人接手。如果一个程序可以很好的表达自己的结构和特性,则在 不久的将来修改它时就会减少程序崩溃的可能。 代码规可以帮助减少程序的脆弱性。 https://www.360docs.net/doc/424135669.html, 我们所有的JavaScript代码都直接发布给公众,它应该具有发布质量。 https://www.360docs.net/doc/424135669.html, Neatness counts. 目录: JavaScript文件 缩进 行宽 注释 变量声明 方法声明 命名 语句 - 简单语句 - 复合语句 - 标签 - return语句 - if语句

- for语句 - while语句 - do语句 - switch语句 - try语句 - continue语句 - with语句 空格 额外的建议 - {}和[] - 逗号操作符 - 块作用域 - 赋值表达式 - ===和!==操作符 - 令人混淆的加和减 - 邪恶的eval https://www.360docs.net/doc/424135669.html, JavaScript文件 JavaScript程序应该作为一个.js文件存储和发布。 JavaScript代码不应该嵌入在HTML文件里,除非那些代码是一个单独的会话特有的。HTML 里的JavaScript代码大大增加了页面的大小,并且 很难通过缓存和压缩来缓解。 网页教学网