javascript
1.缩进,分号,单行长度
一律使用4个空格
连续缩进 同样适用4个空格,跟上一行对齐
单行长度,理论上不要超过80列,保证可读性。
接上一条,如果需要换行,存在操作符的情况,一定在操作符后换行,然后换的行缩进4个空格
if (typeof find === “undefined” ||
typeof find.cdnrejected === “undefined” ||
find.cdnrejected !== true) {
url = “http://www.xxxxx.com“;
} else {
url = “http://www.xxxxx.com“;
}
2.空行、空格
方法之间加空行
单行或多行注释前加空行
等号两边加空格
逻辑块之间加空行增加可读性
var selectItem = function() {
// 方法之间加空行
}
// 这是逻辑块,和上一个代码块之间加空行
if (to8to_uid = 4655) {
}
3.命名规范
标准变量和函数名采用标准驼峰命名法(除了第一个单词的首字母以外,组成标识符的每个单词的首字符,均大写)
// 变量名
var thisVarName = ‘to8to’;
// 函数名
function thisIsFuncName() {
}
变量/属性命名: 名词开头 函数/方法: 动词开头
常量命名:字母全部大写,如果出现多个单词组合,使用下划线分割
var NAME = “我是”;
var TO8TO_CONFIG = “孤单的旅人”
构造函数 函数名称: 首字母大写,同时遵循小驼峰(所有单词首字母都大写)
function ThisIsClassName() {
this.name = ‘xxxx’;
this.domain = ‘http://www.xxxxx.com‘;
}
所有函数内变量声明放在函数内头部,只使用一个 var(多了JSLint报错), 一个变量一行, 在行末跟注释
function doSomethingWithItems(items) {
var value = 10, // 注释啊,注释啊,亲
result = value + 10, // 注释啊,注释啊
i, // 注释啊,注释啊,亲
len; // 注释啊,注释啊,亲
for (i=0, len=items.length; i < len; i++) {
doSomething(items[i]);
}
}
4.代码注释
单行注释:双斜线后,必须跟注释内容保留一个空格
// Good
if (condition) {
// 这是注释
to8to();
}
var to8to = “to8to”; // 双斜线距离分号四个空格,双斜线后始终保留一个空格
多行注释:最少三行,前边留空一行
/*
注释内容与星标前保留一个空格
/
文档注释:使用JSdoc风格,参考 http://usejsdoc.org/
/*@method get
@description 获取cookie值
@param name cookie名
@param options
@returns {|same}
/
Cookie.get = function (name, options) {
validateCookieName(name);
if (typeof options === “function”) {
options = {
converter: options
};
} else {
options = options || {};
}
var cookies = parseCookieString(document.cookie, !options[“raw”]);
return (options.converter || same)(cookies[name]);
};
5.括号对齐
标准示例 括号前后有空格, 花括号起始 不另换行,结尾新起一行
花括号必须要, 即使内容只有一行
涉及 if for while do…while try…catch…finally 的地方都必须使用花括号
// Good
if (condition) {
doSomething();
}
if (condition)
doSomething();
doSomethingElse();
6.数组与对象
for in 不要用在遍历Array上,应该用在遍历Object。
// 遍历数组应该用数组长度而不是for in
var arr = [‘1’, ‘2’, ‘3’];
// bad
for (i in arr) {
console.log(i, arr[i]);
}
// good
var arrLen = arr.length;
for (i = 0; i < arrLen; i++) {
console.log(i, arr[i]);
}
// 遍历object用for in
var obj = {name: ‘xxxx’, domain: ‘xxxx.com‘};
for (k in obj) {
console.log(k, obj[k]);
}
关联数组或hash使用Object实现而不是使用Array。
创建Object和Array应该使用字面量创建。
// bad
var newArr = new Array();
var newObj = new Object();
// good
var newArr = [];
var newObj = {};
7.其他注意事项
任何情况下记得使用分号结尾。
代码块中不允许使用函数声明形式,但是可以采用另外的方法。
// error
if (x) {
function getIt() {}
}
// 可以这样
if (x) {
var getIt = function() {};
}
非特殊情况禁止使用with和eval。
多行的字符串字面量应该用’+’进行拼接而不是使用换行’’。
// bad
var str = ‘wefwef
wefwef
wefwef
wefwef’;
// good
var str = ‘’;
str += ‘wefwef’;
str += ‘wefwef’;
str += ‘wefwef’;
str += ‘wefwef’;
不要改变内置对象的prototype。
// bad
String.prototype.trim = function() {
var res = /^\s/;
var value = this;
value = value.replace(res, ‘’);
res = /\s$/;
return value.replace(res, ‘’);
}
// good
var util = util || {};
util.trim = function(str) {
var res = /^\s/;
str = str.replace(res, ‘’);
res = /\s$/;
return str.replace(res, ‘’);
}
不要在如delete,typeof,void或是return,throw后面添加使用括号(Parentheses)。
// bad
delete(to8to_uid);
tyoeof(to8to_uid) !== ‘undefined’;
return(to8to_uid);
// good
delete to8to_uid;
typeof to8to_uid !== ‘undefined’;
return to8to_uid;
自定义的toString方法必须保证1.正确性;2.没有副作用;否则很容易在assert时出错。