js.md
4.47 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');
- 模块抛出接口应该给予注释说明功能和使用方法