`

javascript的编码规范总结

阅读更多

 

建立和遵循编码规范是很重要的,这让你的代码保持一致性,可预测,更易于阅读和理解。一个新的开发者加入这个团队可以通读规范,理解其它团队成员书写的代码,更快上手干活。

要记住,建立和坚定不移地遵循规范要比纠结于规范的细节重要的多。

1.缩进(Indentation)

代码没有缩进基本上就不能读了。唯一糟糕的事情就是不一致的缩进,因为它看上去像是遵循了规范,但是可能一路上伴随着混乱和惊奇。重要的是规范地使用缩进。

一些开发人员更喜欢用tab制表符缩进,因为任何人都可以调整他们的编辑器以自己喜欢的空格数来显示Tab。有些人喜欢空格——通常四个,这都无所谓,只要团队每个人都遵循同一个规范就好了。这本书,例如,使用四个空格缩进,这也是JSLint中默认的缩进。

什么应该缩进呢?规则很简单——花括号里面的东西。这就意味着函数体,循环 (do, while, for, for-in),if,switch,以及对象字面量中的对象属性。下面的代码就是使用缩进的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function outer(a, b) {
var c = 1,
d = 2,
inner;
if (a > b) {
inner = function () {
return {
r: c - d
};
};
} else {
inner = function () {
return {
r: c + d
};
};
}
return inner;
}

2.花括号{}(Curly Braces)

花括号(亦称大括号,下同)应总被使用,即使在它们为可选的时候。技术上将,在in或是for中如果语句仅一条,花括号是不需要的,但是你还是应该总是使用它们,这会让代码更有持续性和易于更新。

想象下你有一个只有一条语句的for循环,你可以忽略花括号,而没有解析的错误。

// 糟糕的实例
for (var i = 0; i < 10; i += 1)
alert(i);

但是,如果,后来,主体循环部分又增加了行代码?

 

// 糟糕的实例
for (var i = 0; i < 10; i += 1)
alert(i);
alert(i + " is " + (i % 2 ? "odd" : "even"));

第二个alert已经在循环之外,缩进可能欺骗了你。为了长远打算,最好总是使用花括号,即时只有一行代码。

 

if条件类似,你应该这样写:

1
2
3
4
5
if ( true ) {
alert(1);
} else {
alert(2);
}

开发人员对于左大括号的位置有着不同的偏好——在同一行或是下一行。个人喜欢在同一行,发现很多人也和我一样。

1
2
3
4
5
6
7
8
9
if ( true ) {
alert( "It's TRUE!" );
}
//或
if ( true )
{
alert( "It's TRUE!" );
}

这个实例中,仁者见仁智者见智,但也有个案,括号位置不同会有不同的行为表现。这是因为分号插入机制(semicolon insertion mechanism)——JavaScript是不挑剔的,当你选择不使用分号结束一行代码时JavaScript会自己帮你补上。这种行为可能会导致麻 烦,如当你返回对象字面量,而左括号却在下一行的时候:

1
2
3
4
5
6
7
8
9
10
11
// 警告: 意外的返回值
function func() {
return
// 下面代码不执行
{
name : "Batman"
}
}

如果你希望函数返回一个含有name属性的对象,你会惊讶。由于隐含分号,函数返回undefined。前面的代码等价于:

// 警告: 意外的返回值
function func() {
return undefined;
// 下面代码不执行
{
name : "Batman"
}
}

 

总之,总是使用花括号,并始终把在与之前的语句放在同一行:

1
2
3
4
5
function func() {
return {
name : "Batman"
};
}

就像使用花括号,你应该总是使用分号,即使他们可由JavaScript解析器隐式创建。这不仅促进更科学和更严格的代码,而且有助于解决存有疑惑的地方,就如前面的例子显示。

3.空格(White Space)

空格的使用同样有助于改善代码的可读性和一致性。在写英文句子的时候,在逗号和句号后面会使用间隔。在JavaScript中,你可以按照同样的逻辑在列表模样表达式(相当于逗号)和结束语句(相对于完成了“想法”)后面添加间隔。

适合使用空格的地方包括:

  • for循环分号分开后的的部分:如for (var i = 0; i < 10; i += 1) {...}

  • for循环中初始化的多变量(i和max):for (var i = 0, max = 10; i < max; i += 1) {...}

  • 分隔数组项的逗号的后面:var a = [1, 2, 3];

  • 对象属性逗号的后面以及分隔属性名和属性值的冒号的后面:var o = {a: 1, b: 2};

  • 限定函数参数:myFunc(a, b, c)

  • 函数声明的花括号的前面:function myFunc() {}

  • 匿名函数表达式function的后面:var myFunc = function () {};

使用空格分开所有的操作符和操作对象是另一个不错的使用,这意味着在+, -, *, =, <, >, <=, >=, ===, !==, &&, ||, += 等前后都需要空格。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 宽松一致的间距
// 使代码更易读
// 使得更加“透气”
var d = 0,
a = b + 1;
if (a && b && c) {
d = a % c;
a += d;
}
// 反面例子
// 缺失或间距不一
// 使代码变得疑惑
var d = 0,
a = b + 1;
if (a&&b&&c) {
d=a % c;
a+= d;
}

最后需要注意的一个空格——花括号间距。最好使用空格:

  • 函数、if-else语句、循环、对象字面量的左花括号的前面({)

  • else或while之间的右花括号(})

空格使用的一点不足就是增加了文件的大小,但是压缩无此问题。

有一个经常被忽略的代码可读性方面是垂直空格的使用。你可以使用空行来分隔代码单元,就像是文学作品中使用段落分隔一样。

 

4.命名规范(Naming Conventions)

让你的代码更具可预测性和可维护性的另一种方法是采用命名规范。这就意味着你需要用同一种形式给你的变量和函数命名。

下面是建议的一些命名规范,你可以原样采用,也可以根据自己的喜好作调整。同样,遵循规范要比规范是什么更重要。

 

1.以大写字母写构造函数(Capitalizing Constructors)

JavaScript并没有类,但有new调用的构造函数:

1
var adam = new Person();

 

因为构造函数仍仅仅是函数,这样写仅看函数名就可以帮助告诉你这应该是一个构造函数还是一个正常的函数。

命名构造函数时首字母大写具有暗示作用,表示这是一个构造函数,可以使用new调用,而使用小写命名的一般函数和方法不应该使用new调用:

1
2
function MyConstructor() {...}
function myFunction() {...}

2.驼峰(Camel)命名法

 

当你的变量或是函数名有多个单词的时候,最好单词的分离遵循统一的规范,有一个常见的做法被称作“驼峰(Camel)命名法”,就是单词小写,每个单词的首字母大写。

对于构造函数,可以使用大驼峰式命名法(upper camel case),如MyConstructor() 。对于函数和方法名称,你可以使用小驼峰式命名法(lower camel case),像是myFunction() , calculateArea() getFirstName()

要是变量不是函数呢?开发者通常使用小驼峰式命名法,但还有另外一种做法就是所有单词小写以下划线连接:例如,first_name, favorite_bands, old_company_name ,这种标记法帮你直观地区分函数和其他标识——原型和对象。

 

3.使用命名规范来弥补或替代语言特性

有时,开发人员使用命名规范来弥补或替代语言特性。

例如,JavaScript中没有定义常量的方法(尽管有些内置的像Number, MAX_VALUE),所以开发者都采用全部单词大写的规范来命名这个程序生命周期中都不会改变的变量,如:

1
2
3
// 珍贵常数,只可远观
var PI = 3.14,
MAX_WIDTH = 800;

还有另外一个完全大写的惯例:全局变量名字全部大写。全部大写命名全局变量可以让它们易于区分。

另外一种使用规范来模拟功能的是私有成员。虽然可以在JavaScript中实现真正的私有,但是开发者发现仅仅使用一个下划线前缀来表示一个私有属性或方法会更容易些。考虑下面的例子:

1
2
3
4
5
6
7
8
9
10
11
var person = {
getName: function () {
return this ._getFirst() + ' ' + this ._getLast();
},
_getFirst: function () {
// ...
},
_getLast: function () {
// ...
}
};

在此例中,getName() 就表示公共方法,部分稳定的API。而_getFirst() _getLast() 则表明了私有。它们仍然是正常的公共方法,但是使用下划线前缀来警告person对象的使用者这些方法在下一个版本中时不能保证工作的,是不能直接使用的。

下面是一些常见的_private 规范:

  • 使用尾下划线表示私有,如name_getElements_()

  • 使用一个下划线前缀表_protected (保护)属性,两个下划线前缀表示__private (私有)属性

  • Firefox中一些内置的变量属性不属于该语言的技术部分,使用两个前下划线和两个后下划线表示,如:__proto____parent__

5.注释(Writing Comments)

 

你必须注释你的代码,即使不会有其他人向你一样接触它。通常,当你深入研究一个问题,你会很清楚的知道这个代码是干嘛用的,但是,当你一周之后再回来看的时候,想必也要耗掉不少脑细胞去搞明白到底怎么工作的。

很显然,注释不能走极端:每个单独变量或是单独一行。但是,你通常应该记录所有的函数,它们的参数和返回值,或是任何不寻常的技术和方法。要想到注 释可以给你代码未来的阅读者以诸多提示;阅读者需要的是(不要读太多的东西)仅注释和函数属性名来理解你的代码。例如,当你有五六行程序执行特定的任务, 如果你提供了一行代码目的以及为什么在这里的描述的话,阅读者就可以直接跳过这段细节。没有硬性规定注释代码比,代码的某些部分(如正则表达式)可能注释 要比代码多。

最重要的习惯,然而也是最难遵守的,就是保持注释的及时更新,因为过时的注释比没有注释更加的误导人。

 

 

相关文章


 1.   JavaScript中全局变量的问题

 

 

分享到:
评论

相关推荐

    JavaScript程序编码规范.doc

    ### JavaScript程序编码规范详解 #### 一、引言 在软件开发领域,代码的质量直接影响着项目的长期维护性和可扩展性。良好的编码规范不仅能够提升代码的可读性,还能够帮助团队成员更快地理解和协作。《JavaScript...

    javascript 编码规范

    ### JavaScript编码规范详解 在软件开发领域,编码规范扮演着至关重要的角色,它不仅能够提升代码的可读性和可维护性,还能够促进团队协作,减少潜在的错误。JavaScript作为前端开发的核心语言,其编码规范尤其重要...

    Javascript编码规范

    ### JavaScript编码规范详解 #### 一、引言 随着Web技术的发展,JavaScript作为一种重要的前端脚本语言,在网页交互设计和动态效果实现上扮演着至关重要的角色。然而,由于JavaScript语言本身的特性,例如语法较为...

    Google_JavaScript_编码规范指南

    总结来说,Google的JavaScript编码规范指南为开发者提供了一套标准化的编码实践建议,涵盖了从基础的语法到高级编码技术的方方面面。遵循这些规范不仅可以提升代码质量,还能帮助维护项目的一致性和可扩展性。

    Javascript编码规范.docx

    以下是一些关键的JavaScript编码规范要点: 1. **注释规范**: - 避免无意义的注释,例如在显而易见的代码旁写“初始化变量为零”。好的注释应提供额外的上下文信息,解释代码的目的或复杂逻辑。 - 使用`//`进行...

    应用组JavaScript编码规范

    **应用组JavaScript编码规范** **概述** 编写此规范的目的是为了提高爱维特信息技术有限公司应用组内部的JavaScript代码质量,确保代码的可读性、可维护性和一致性。预期读者主要是公司的JavaScript开发者,他们...

    JavaScript 程序编码规范

    本文档旨在提供一套JavaScript编码规范,帮助开发者写出更加规范、易读和维护的代码。 #### 二、JavaScript文件 **文件命名与组织** - **文件命名**:推荐使用`.js`作为文件扩展名,便于区分和管理。 - **文件位置...

    富途所有项目共享的ESLint规则与JavaScript编码规范对应

    本篇文章将深入探讨富途的ESLint配置及其对应的JavaScript编码规范。 1. ESLint概述 ESLint 是一个可配置的静态代码检查工具,它可以检测出语法错误、潜在的运行时错误以及不符合特定编码风格的代码。通过自定义...

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

    总结来说,JavaScript编码规范的制定和遵循对于任何需要提高代码质量、降低维护成本的项目都是不可或缺的。与C/C++和Java等语言相比,JavaScript的灵活语法可能会导致一些开发者不重视编码规范,但这恰恰是需要改进...

    Google-JavaScript-编码规范指南

    ### Google JavaScript 编码规范指南知识点详解 #### 1. **背景** Google JavaScript 编码规范指南旨在为开发者提供一套全面且实用的JavaScript编程规范。这套规范由Google官方发布,目的是为了统一代码风格,...

    JavaScript编码规范

    ### JavaScript编码规范详解 #### 一、重要性与目的 JavaScript是一种非常灵活且易于学习的脚本语言。然而,正是由于其灵活性,许多开发者在编写代码时往往过于随意,这可能导致后期代码的修改、扩展和维护变得...

    Vue前端编码规范.pdf

    ### Vue前端编码规范详解 #### 一、概述 在现代前端开发中,特别是使用Vue框架进行项目构建时,遵循一套合理的编码规范对于提高代码质量、维护性和团队协作效率至关重要。本文将详细介绍Vue前端项目的编码规范,...

    前端js代码规范

    本文将详细介绍北京道达天际科技有限公司的一套JavaScript编码规范,该规范涵盖了代码风格、命名规则、注释习惯以及语言特性的最佳实践。 #### 二、代码风格 **2.1 文件** - **UTF-8编码:** 建议使用无BOM的UTF-8...

    Javascript编程规范

    ### JavaScript编程规范详解...综上所述,遵循这些编码规范可以帮助开发团队编写出易于维护、高效且高质量的JavaScript代码。通过实施统一的编码标准,可以大大简化项目的长期维护工作,并提高代码的可读性和可扩展性。

    web安全前端编码规范1

    《Web安全前端编码规范详解》 在Web应用开发中,前端的安全性同样至关重要。本文将详细阐述《Web安全前端编码规范》,旨在提升Web应用的安全性,预防潜在的攻击风险。 一、项目设计阶段的安全考虑 在项目初始设计...

    Javascript脚本规范1

    因此,遵循一定的JavaScript编码规范至关重要。 1. JavaScript 文件组织 - 将JavaScript代码存储在独立的.js文件中,避免直接嵌入HTML,以提高代码复用和维护性。同时,通过外部引用js文件,可以减少HTTP请求的...

    Asp.Net编码规范

    在ASPX页面中嵌入的JavaScript代码,同样遵循客户端JavaScript编码规范,但需注意与服务器端代码的交互,如使用`PageMethods`或`WebMethods`进行异步调用。 3.3 服务器端脚本规范 3.3.1 C#(或其他.NET语言)编码...

    最全的Javascript编码规范(推荐)

    本文总结了一些核心的JavaScript编码规范,适用于日常的程序开发。 1. **嵌入规则**: - 尽量将JavaScript代码存储在独立的`.js`文件中,然后通过`&lt;script src="filename.js"&gt;&lt;/script&gt;`标签引入到HTML页面中。...

Global site tag (gtag.js) - Google Analytics