原文:深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
1.最小全局变量(Minimizing Globals)的重要性
JavaScript通过函数管理作用域。在函数内部声明的变量只在这个函数内部,函数外面不可用。另一方面,全局变量就是在任何函数外面声明的或是未声明直接简单使用的。
- 原因:
在同一个全局命名空间,如果程序的两个不同部分定义了同名,但不同作用的全局变量的时候,容易发生命名冲突。所以要尽可能少的使用全局变量。
2.单var形式(Single var Pattern)的好处
提供了一个单一的地方去寻找功能所需要的所有局部变量
防止变量在定义之前使用的逻辑错误
帮助你记住声明的全局变量,因此较少了全局变量
少代码(类型啊传值啊单线完成)
function func() {
var a = 1,
b = 2,
sum = a + b,
myobject = {},
i,
j;
// function body...
}
3.for循环(for Loops)缓存变量
//避免每次运行i < myarray.length;,对myarray.length求值
for (var i = 0, max = myarray.length; i < max; i++) {
}
4.for-in循环(for-in Loops)
for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。
5.避免隐式类型转换(Avoiding Implied Typecasting )
JavaScript的变量在比较的时候会隐式类型转换。这就是为什么一些诸如:false == 0 或 “” == 0 返回的结果是true。为避免引起混乱的隐含类型转换,在你比较值和表达式类型的时候始终使用=和!操作符。
var zero = 0;
if (zero === false) {
// 不执行,因为zero为0, 而不是false
}
// 反面示例
if (zero == false) {
// 执行了...
}
6.parseInt()下的数值转换(Number Conversions with parseInt())
使用parseInt()你可以从字符串中获取数值,总是指定基数参数。
var month = "06",
month = parseInt(month, 10);//十进制处理
month = parseInt(month);//默认当作八进制处理
7.左花括号的位置(Opening Brace Location)
使用花括号,并始终把在与之前的语句放在同一行。
function func() {
return {
name : "Batman"
};
}
8.合理使用空格(White Space)
空格的使用同样有助于改善代码的可读性和一致性。
适合使用空格的地方包括:
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 () {};
使用空格分开所有的操作符和操作对象是另一个不错的使用,这意味着在+, -, *, =, <, >, <=, >=, =, !, &&, ||, +=等前后都需要空格。
// 宽松一致的间距
// 使代码更易读
// 使得更加“透气”
var d = 0,
a = b + 1;
if (a && b && c) {
d = a % c;
a += d;
}
9.命名规范(Naming Conventions)
命名规范对使用变量没有影响,只是为了方便区别,让人一看就明白它的的作用
-
以大写字母写构造函数(Capitalizing Constructors):因为构造函数仍仅仅是函数,仅看函数名就可以帮助告诉你这应该是一个构造函数还是一个正常的函数。
-
单词分离:当你的变量或是函数名有多个单词的时候,最好单词的分离遵循统一的规范,有一个常见的做法被称作“驼峰(Camel)命名法”,就是单词小写,每个单词的首字母大写。对于构造函数,可以使用大驼峰式命名法(upper camel case),如MyConstructor()。对于函数和方法名称,你可以使用小驼峰式命名法(lower camel case),像是myFunction(), calculateArea()和getFirstName()。
-
其它命名形式(Other Naming Patterns):
-
(1)定义常量:采用全部单词大写的规范来命名这个程序生命周期中都不会改变的变量
-
(2)全局变量名字全部大写。全部大写命名全局变量可以加强减小全局变量数量的实践,同时让它们易于区分
var PI = 3.14,
MAX_WIDTH = 800;
- (3)使用一个下划线前缀来表示一个私有属性或方法
var person = {
getName: function () {
return this._getFirst() + ' ' + this._getLast();
},
_getFirst: function () {
// ...
},
_getLast: function () {
// ...
}
};
10.注释(Writing Comments)的好处
-
当自己一段时间回过头看时,可以很快知道,不需要再细细思考,耽误时间
-
不用每个单独变量或是单独一行注释。但是,你通常应该记录所有的函数,它们的参数和返回值,或是任何不寻常的技术和方法。要想到注 释可以给你代码未来的阅读者以诸多提示;阅读者需要的是(不要读太多的东西)仅注释和函数属性名来理解你的代码。