写作本文旨在加深自己印象,也为了更多人的了解到JS编码风格,提高自己的编码质量
想了解更多的内容请阅读《编写可维护的JavaScript》
// 好的写法
if (true) {
doSomething();
}
// 好的写法
doSomething(argument1, argument2, aegument3, argument4,
argument5);
// 不好的写法:第二行只有4个空格的缩进
doSomething(argument1, argument2, aegument3, argument4,
argument5);
// 不好的写法:在运算符之前换行
doSomething(argument1, argument2, aegument3, argument4
, argument5);
// 好的写法
var name = "Nicholas";
// 不好的写法: 单引号
var name = 'Nicholas';
// 不好的写法: 字符串结束之前换行
var longString = "Here's the story, of a man \
named Brady.";
// 好的写法
var count = 10;
// 好的写法
var price = 10.0;
var price = 10.00;
// 好的写法
var num = 0xA2;
// 好的写法
var num = 1e23;
// 不好的写法: 十进制数字以小数点结尾
var price = 10.;
// 不好的写法: 十进制数字以小数点开头
var price = .1;
// 不好的写法: 八进制 (base 8) 写法已废弃
var num = 010;
// 好的写法
var person = null;
// 好的写法
function getPerson() {
if (condition) {
return new Person("Nicholas");
} else {
return null;
}
}
// 好的写法
var person = getPerson();
if (person != null) {
doSomething();
}
// 不好的写法: 和一个未被初始化的变量比较
var person;
if (person != null) {
doSomething();
}
// 不好的写法: 通过测试判断某个参数是否传递
function doSomething(arg1, arg2, arg3, arg4) {
if (arg4 != null) {
doSomethingElse();
}
}
// 好的写法
if (typeof variable == "undefined") {
// do something
}
// 不好的写法: 使用了 undefined 直接量
if (variable == undefined) {
// do something
}
// 好的写法
var found = (values[i] === item);
// 好的写法
if (found && (count > 10)) {
doSomething();
}
// 好的写法
for (i = 0; i < count; i++) {
process(i);
}
// 不好的写法: 丢失了空格
var found = (values[i]===item);
// 不好的写法: 丢失了空格
if (found&&(count>10)) {
doSomething();
}
// 不好的写法: 丢失了空格
for (i=0; i
// 好的写法
var found = (values[i] === item);
// 好的写法
if (found && (count > 10)) {
doSomething();
}
// 好的写法
for (i = 0; i < count; i++) {
process(i);
}
// 不好的写法: 左括号之后有额外的空格
var found = ( values[i] === item);
// 不好的写法: 右括号之前有额外的空格
if (found && (count > 10) ) {
doSomething();
}
// 不好的写法: 参数两边有额外的空格
for (i = 0; i < count; i++) {
process( i );
}
// 好的写法
var object = {
key1: value1,
key2: value2,
func: function() {
// doSomething
},
key3: value3
};
// 不好的写法:不恰当的缩进
var object = {
key1: value1,
key2: value2
};
// 不好的写法:函数体周围缺少空行
var object = {
key1: value1,
key2: value2,
func: function() {
// doSomething
},
key3: value3
};
// 好的写法
doSomething({
key1: value1,
key2: value2
});
// 不好的写法:所有代码在一行上
doSomething({ key1: value1, key2: value2 });
// 好的写法
if (condition) {
// 如果代码执行到这里,则表明通过了所有安全性检查
allowed();
}
// 不好的写法:注释之前没有空行
if (condition) {
// 如果代码执行到这里,则表明通过了所有安全性检查
allowed();
}
// 不好的写法:错误的缩进
if (condition) {
// 如果代码执行到这里,则表明通过了所有安全性检查
allowed();
}
// 不好的写法:这里应当使用多行注释
// 接下来的这段代码非常难,那么,让我详细的解释一下
// 这段代码的作用氏首先判断条件是否为真
// 只有为真时才会执行。这里的条件是通过
// 多个函数计算出来的,在整个会话生命周期内
// 这个值氏可以被修改的
if (condition) {
// 如果代码执行到这里,则表明通过了所有安全检查
allowed();
}
// 好的写法
var result = something + somethingElse; // somethingElse will never be null
// 不好的写法: 代码和注释间没有足够的空格
var result = something + somethingElse;// somethingElse will never be null
// 好的写法
// if (condition) {
// doSomething();
// }
/*
注释开始。该行不应当有其他文字*
开头并保持左对齐。这些可以有文字描述*/
开头并同先前行保持对齐。也不应有其他文字*
字符的对齐)。每一个多行代码之前应当预留一个空行// 好的写法
if (condition) {
/*
* 如果代码执行到这里
* 说明通过了所有的安全检测
*/
allowed();
}
// 不好的写法: 注释之前无空行
if (condition) {
/*
* 如果代码执行到这里
* 说明通过了所有的安全检测
*/
allowed();
}
// 不好的写法: 星号后没有空格
if (condition) {
/*
*如果代码执行到这里
*说明通过了所有的安全检测
*/
allowed();
}
// 不好的写法: 错误的缩进
if (condition) {
/*
* 如果代码执行到这里
* 说明通过了所有的安全性检测
*/
allowed();
}
// 不好的写法: 代码尾部注释不要用多行注释格式
var result = something + somethingElse; /*somethingElse 不应当取值为null*/
// 好的写法
// TODO: 我希望找到一种更快的方式
doSomething();
// 好的写法
/*
* HACK: 不得不针对 IE 做的特殊处理. 我计划后续有时间时
* 重写这部分. 这些代买可能需要在 v1.2 版本之前替换掉
*/
if (document.all) {
doSomething();
}
// 好的写法
// REVIEW: 有更好的方法吗?
if (document.all) {
doSomething();
}
// 不好的写法: 注释声明空格不正确
// TODO : 我希望找到一种更快的方式
doSomething();
// 不好的写法: 代码和注释应当保持同样的缩进
// REVIEW: 有更好的方法吗?
if (document.all) {
doSomething();
}
// 好的写法
var count = 10,
name = "Nicholas",
found = false,
empty;
// 不好的写法: 不恰当的初始化赋值
var count = 10,
name = "Nicholas",
found= false,
empty;
// 不好的写法: 错误的缩进
var count = 10,
name = "Nicholas",
found = false,
empty;
// 不好的写法: 多个定义写在一行
var count = 10, name = "Nicholas",
found = false, empty;
// 不好的写法: 未初始化的变量放在最前面
var empty,
count = 10,
name = "Nicholas",
found = false;
// 不好的写法: 多个 var 表达式
var count = 10,
name = "Nicholas";
var found = false,
empty;
// 好的写法
function doSomething(arg1, arg2) {
return arg1 + arg2;
}
// 不好的写法: 第一行不恰当的空格
function doSomething (arg1, arg2) {
return arg1 + arg2;
}
// 不好的写法: 函数表达式
var doSomething = function doSomething(arg1, arg2) {
return arg1 + arg2;
}
// 不好的写法: 左侧的花括号位置不对
function doSomething(arg1, arg2)
{
return arg1 + arg2;
}
// 错误的写法: 使用了 Function 构造器
var doSomething = new Function("arg1", "arg2", "return arg1 + arg2")
// 好的写法
function outer() {
var count = 10,
name = "Nicholas",
found = false,
empty;
function inner() {
// 代码
}
// 调用 inner() 的代码
}
// 不好的写法: inner 函数的定义先于变量
function outer() {
function inner() {
// 代码
}
var count = 10,
name = "Nicholas",
found = false,
empty;
// 调用 inner() 的代码
}
// 好的写法
object.method = function() {
// 代码
};
// 不好的写法: 不正确的空格
object.method = function () {
// 代码
};
// 好的写法
var value = (function() {
// 函数体
return {
message: "Hi"
}
}());
// 不好的写法: 函数调用外层没有用圆括号包裹
var value = function() {
// 函数体
return {
message: "Hi"
}
}();
// 不好的写法: 圆括号位置不当
var value = (function() {
// 函数体
return {
message: "Hi"
}
})();
// 好的写法
var flag = (i < count);
// 不好的写法:遗漏圆括号
var flag = i < count;
// 好的写法
var accountNumber = "2312";
// 不好的写法:大写字母开头
var AccountNumber = "2312";
// 不好的写法:动词开头
var getAccountNumber = "2312";
// 不好的写法:使用下划线
var account_number = "2312";
// 好的写法
function doSomething() {
// 代码
}
// 不好的写法:大写字母开头
function DoSomething() {
// 代码
}
// 不好的写法:名词开头
function something() {
// 代码
}
// 不好的写法:使用下划线
function do_something() {
// 代码
}
动词 | 含义 |
---|---|
can | 函数返回一个布尔值 |
has | 函数返回一个布尔值 |
is | 函数返回一个布尔值 |
get | 函数返回一个非布尔值 |
set | 函数用来保存一个值 |
if (isEnabled()) {
setName("Nicholas");
}
if (getName() === "Nicholas") {
doSomething();
}
// 好的写法
function MyObject() {
// 代码
}
// 不好的写法:小写字母开头
function myObject() {
// 代码
}
// 不好的写法:使用下划线
function my_object() {
// 代码
}
// 不好的写法:动词开头
function getMyObject() {
// 代码
}
// 好的写法
var TOTAL_COUNT = 10;
// 不好的写法:驼峰形式
var totalCount = 10;
// 不好的写法:混合形式
var total_COUNT = 10;
// 好的写法
var object = {
_count: 10,
_getCount: function() {
return this._count;
}
}
// 不好的写法:全局使用严格模式
"use strict";
function doSomething() {
// 代码
}
// 好的写法
function doSomething() {
"use strict";
// 代码
}
// 好的写法
(function() {
"use strict";
function doSomething() {
// 代码
}
function doSomethingElse() {
// 代码
}
}());
// 好的写法
var same = (a === b);
// 好的写法
var same = (a == b);
// 好的写法
var value = condition ? value1 : value2;
// 不好的写法: 没有赋值, 应当使用 if 表达式
condition ? doSomething() : doSomethingElse;
// 好的写法
count++;
a = b;
// 不好的写法:多个表达式写在一行
count++; a = b;
return;
return collection.size();
return (size > 0 ? size : defaultSize);
if (condition) {
statements
}
if (condition) {
statements
} else {
statements
}
if (condition) {
statements
} else if (condition) {
statements
} else {
statements
}
// 好的写法
if (condition) {
doSomething();
}
// 不好的写法:不恰当的空格
if (condition){
doSomething();
}
// 不好的写法: 遗漏花括号
if (condition)
doSomething();
// 不好的写法:所有代码都在一行
if (condition) { doSomething(); }
// 不好的写法:所有代码都在一行且没有花括号
if (condition) doSomething();
for (initialization; condition; update) {
statements
}
for (variable in object) {
statements
}
// 好的方法
var i,
len;
for (i=0, len=0; i < len; i++) {
// 代码
}
// 不好的写法:初始化时候声明变量
for (var i=0, len=0; i < len; i++) {
// 代码
}
// 不好的写法:初始化时候声明变量
for (var prop in object) {
// 代码
}
while (condition) {
statements
}
do {
statements
} while (condition);
switch (expression) {
case expression:
statements
default:
statements
}
// 好的写法
switch (value) {
case 1:
/* falls through */
case 2:
doSomething();
break;
case 3:
return true;
default:
throw new Error("Some error");
}
// 好的写法
switch (value) {
case 1:
/* falls through */
case 2:
doSomething();
break;
case 3:
return true;
default:
// 没有default
}
try {
statements
} catch (variable) {
statements
}
try {
statements
} catch (variable) {
statements
} finally {
statements
}