JavaScript 编码风格指南
A.1 缩进
// 4个空格的层级缩进 if (true) { doSomething(); }
A.2 行的长度
// 每行限于80个字符,超出则在运算符后换行,缩进2个层级(8个空格) doSomething(argument1, argument2, argument3, argument4, argument5);
A.3 原始值
// 字符串使用双引号及长字符串的链接 var name = "Nicholas", longStr = "this is a long string you should " + "change another line."; // 数字 var count = 10, price = 10.50, num = 1e10; // null,表示或期望是对象
var person = null; function getPerson () { if (condition) { return new Person("Nicholas"); } else { return null; } }
// undefined 变量声明而未赋值的状态,避免使用; var variable = undefined // dont do this
if (typeof variable === "undefined") { // do like this }
A.4 运算符间距
// 运算符前后使用一个空格来保持表达式的整洁 var found = (value[i] === item); if (found && (count > 10)) { doSomething(); } for (i = 0; i < count; i++) { process(i); }
A.5 对象直接量
// 层级缩进、语段前后空行、函数前后空行、属性不加引号、冒号紧跟其后 var object = { key1: value1, key2: value2, func: function () { // a function to do something }, key3: value3 }
A.7 注释
// 单行注释1 if (condition) { // 如果代码执行到这里,表明通过了安全检查 doSomething(); } // 单行注释2 var result = result1 + result2; // result1, result2应当是整数 // 多行注释 function getResult (arg1, arg2) { /* * @para arg1 * @para arg2 */ doSomething(); }
A.8 变量声明
// 整齐、未初始化变量放最后 var count = 10, name = "Nicholas", found = false, empty;
A.9 函数声明
// 标准式 function sum(arg1, arg2) { return arg1 + arg2; } // 道格拉斯推荐式(变量引用式) var sum = function (arg1, arg2) { return arg1 + arg2; }; // 立即调用式 var value= (function() { // 函数体 return { message: "Hi" }; }());
A.10 命名
// 普通变量用小驼峰命名法,不要使用下划线,不要用动词开头 var accountNumber = "8341"; // 函数命名用动词开头表意 function getPerson() { // return a person object } // 构造函数用名词开头且首字母大写 function Person(name) { this.name = name; } // 常量 var TOTAL_COUNT = 10; // 私有变量 var object = { _count: 10, getCount: function() { return this._count; } };
A.11 严格相等及表达式赋值
// 通过相等判断赋予布尔值 var flag = (a === b);
A.12 三元操作符
// 三元操作符应当仅仅用在条件赋值语句中 var value = (condition ? value1 : value2); // dont do like this, do it use if instead condition ? doSomething() : doSomethingElse();
A.13 语句示例
// if if (condition) { statements } // for var i, len; for (i = 0, len = 10; i < len; i++) { // code } var prop; for (prop in object) { if (object.hasOwnProperty(prop)) { // code } } // while while (condition) { statements } // switch switch (value) { case 1: statements; break; case 2: // falls through case 3: statements; break; // no default }
A.14 使用严格模式吧,在一个函数里
(function() { "use strict"; // code }());