js.md 4.67 KB

JavaScript代码规范

行的长度

每行长度不应该超过120个字符,如果一行多余120个字符,应该在一个运算符后换行,下一行增加2级缩进,即8个空格)

doSomething(argument1, argument2, argument3, argument4,
        argument5);

运算符间距

二元运算符前后必须使用一个空格保持表达式的整洁,操作符包括赋值运算符和逻辑运算符

var name = 'xuqi'; // GOOD
var name='xuqi'; // BAD

括号间距

当使用括号时,紧接左括号之后和紧接右括号之前不应该有空格。

doSomething(arg); // GODD
doSomething( arg ); // BAD

变量声明

  • 所有变量在使用前应该先定义
  • 变量定义应该放在函数开头
  • 使用var,const,let表达式定义变量,每行定义一个
  • 除了首行,所有行都应该多一层缩进使变量声明对齐
  • 初始化的变量放在未初始化的变量之前
  • 所有的变量命名必须使用英文单词
  • 浮点变量必须指明实部(即便以0.开头)和小数点后一位
var name = 'xuqi',
    age,
    sex,
    ...;

const $ = require('yoho.jquery');

let i;

另外,晦涩的变量名最好给出注释,否则别人很难读懂接下来代码的意思。

函数声明

  • 函数在使用前应该先定义
  • 函数名和开始圆括号之间无空格(包括匿名函数的function关键字与圆括号之间)
  • 开始圆括号和结束圆括号之间无空格
  • 参数名之间应该在逗号之后保留一个空格
  • 开始花括号应该同function关键字保持同一行,结束圆括号和开始花括号之间应该保留一个空格
  • 函数体保持一级缩进
function doSomething(arg1, arg2) {
    doThing1();
    doThing2();
}

const method = function() {
    doSomething();
};

另外,IIFE的标准格式也在这里指出:

(function(args) {
    //
}(args)); //(args)位于外层括号内

对象直接量

  • 起始左括号应该与表达式保持一行
  • 每个属性的键名前保持一个缩进,第一个属性应该在左括号后另一起行
  • 每个属性的键名不包含引号,其后跟一个冒号(前无空格,后有空格),然后是值
  • 如果属性值为函数,函数体应该在属性名之下另起一行,并且其前后均应保留一个空行
  • 一组相关属性的前后插入空行以提高代码的可读性
  • 结束的右括号独占一行
var person = {
    name: 'xuqi',
    age: 25,

    groupAttr1: xx1,
    groupAttr2: xx2,

    walk: function() {
        //your walk fn
    }
};
  • 当对象字面量作为函数参数时,起始括号应该与函数名同行
doSomething({
    //do something
});

命名

变量:

  • 采用小驼峰命名格式
  • 变量命名为名词(区别函数)
  • 变量中不使用_

函数:

  • 采用小驼峰命名格式
  • 函数命名为动词(区别变量)
  • 函数名中不使用_

构造函数:

  • 采用大驼峰命名格式
  • 命名应该是名词

私有成员:

  • 一个对象中不希望外部访问的以下划线开头(约定)

等号运算符

使用===!==,禁止使用==!=

undefined

禁止使用name === undefined判断一个变量是否定义。应该使用typeof(name) === 'undefined';

常用语句规范

if语句

if (condition) {
    doSomething();
} else if (condition1) {
    doSomething2();
} else {
    soOtherThing();
}

for语句

// GOOD
var i;
for (i = 0; i < len; i++) {
    doSomething();
}
for (i in collection) {
    if (collection.hasOwnProperty(i)) {
        doSomething();
    }
}

// BAD
for (var i = 0; i < len; i++) {
    doSomething();
}
for (i in collection) {
    doSomething();
}

while,do语句

while (condition) {
    doSomething();
}

do {
    doSomething();
} while (condition)

switch语句

  • 每一个case保持一个缩进
  • 每一组语句都应该以break,return等结尾,或者用一行注释表示跳过(falling through)
  • 无default的情况也要注释特别说明
switch (val) {
    case 1:
        //nothing 
    case 2:
        doSomething();
        break;
    default:
        doDefault();
}

try语句

try {
    doSomething();
} catch (err) {
    doSomething2();
} finally {
    doSomething3();
}

模块化规范

  • 模块开头require加载所有依赖模块
var $ = require('yoho.jquery'),
    flip = require('../plugin/flip'); //普通文件

require('../plguin/login');
  • 模块抛出接口应该给予注释说明功能和使用方法