首页 > 代码库 > JavaScript编码规范

JavaScript编码规范

代码编写规范

  1. 注释及更新注释

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

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

  1. 空格的使用

  空格的使用同样有助于改善代码的可读性和一致性。在写英文句子的时候,在逗号和句号后面会使用间隔。在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 () {};

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

// 宽松一致的间距, 使代码更易读, 使得更加“透气”
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;
}

 

  1. 命名规范

  第一:使用大写字母写构造函数

  function MyConstructor() {...}  构造函数
function myFunction() {...}  一般函数

第二:常量全部用大写,全局变量名字全部大写。全部大写命名全局变量可以加强减小全局变量数量的实践,同时让它们易于区分。

第三:可以使用一个下划线前缀表_protected(保护)属性,两个下划线前缀表示__private (私有)属性(只是模拟表示,并不是真的保护或私有,只是为了提醒用户)。例如:

var person = {
    getName: function () {
        return this._getFirst() + ‘ ‘ + this._getLast();
    },

    _getFirst: function () {
        // ...
    },
    _getLast: function () {
        // ...
    }
};

 

  1. 花括号

4.1.        始终使用花括号

在可选的代码片段中也总是使用花括号。技术上将,在in或是for中如果语句仅一条,花括号是不需要的,但是你还是应该总是使用它们,这会让代码更有持续性和易于更新。

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

包括if…else…语句中也一样。花括号始终使用。

4.2.        左花括号始终与之前的语句放在同一行

因为分号插入机制(semicolon insertion mechanism)——JavaScript是不挑剔的,当你选择不使用分号结束一行代码时JavaScript会自己帮你补上。这种行为可能会导致麻 烦,如当你返回对象字面量,而左括号却在下一行的时候:

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

总之,总是使用花括号,并始终把它的(左花括号)与之前的语句放在同一行。

  1. 始终使用缩进

用tab制表符缩进,因为任何人都可以调整他们的编辑器以自己喜欢的空格数来显示Tab。有些人喜欢空格——通常四个,这都无所谓,只要团队每个人都遵循同一个规范就行。如下:

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;
}

使用缩进可以使代码看起来优雅漂亮。

  1. parseInt()下的数值转换

使用parseInt()你可以从字符串中获取数值,该方法接受另一个基数参数,这经常省略,但不应该。当字符串以”0″开头的时候就有可能会出问 题,例如,部分时间进入表单域,在ECMAScript 3中,开头为”0″的字符串被当做8进制处理了,但这已在ECMAScript 5中改变了。为了避免矛盾和意外的结果,总是指定基数参数。

var month = "06",
     year = "09";
month = parseInt(month, 10);
year = parseInt(year, 10);

比parseInt()方法性能更好的方法,同时也可以替代parseInt()的方法,如下所示:

+"08" // 结果是 8
Number("08") // 8

 

  1. 避免使用eval()

如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有 问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。如果代码是在运行时动态生成,有一个更好的方式不使用eval而达到同样的目 标。例如,用方括号表示法来访问动态属性会更好更简单:

// 反面示例
var property = "name";
alert(eval("obj." + property));

// 更好的
var property = "name";
alert(obj[property]);

 

 

  1. 避免隐式类型转换
  2. Switch模式
  3. 最好不要扩展内置原型
  4. for-in循环的正确使用
  5. for循环的正确使用
  6. 变量的预解析(var散布的问题)
  7. 单var形式
  8. 访问全局对象
  9. 忘记var关键字的副作用
  10. 全局变量的问题
  11. 最小全局变量

JavaScript编码规范