1.1 使用4个空格作为一个缩进层级。
1.2 语句结尾写分号。
1.3 代码单行长度不超过80个字符。
1.4 换行:
当一行长度达到了单行最大字符数限制时,就需要手动将一行拆成两行。通常会在运算符后换行,下一行将会增加两个层级的缩进。
//好的做法
if (isLeapYear && isFebruary && day == 29 && itsYourBirthday &&
noPlans) {
waitAnotherFourYears();
}
//不好的做法:第二行只有一个缩进
callAFunction(document, element, window, "some string value", true,
123, navigator);
//不好的做法:在运算符之前换行了
callAFunction(document, element, window, "some string value", true
, 123,navigator);
这个规则有一个例外:当给变量赋值时,第二行的位置应当与赋值运算符的位置保持对其。例如:
var result = something + anotherThing + yetAnotherThing + someThingElse +
anotherSomethingElse;
1.5 空行
空行是常常被忽略的一个方面,通常来讲,代码看起来应当像一系列可读的段落,而不是一大段揉在一起。应该在下面这些场景中添加空行:
- 在方法之间
- 在方法中的局部变量和第一条语句之间
- 在多行或单行注释之间
- 在方法内的逻辑片段之间
- 其他...
1.6 命名
“计算机科学只存在两个难题:缓存失败和命名。” ————Phil Karlton。
使用驼峰命名方法给变量和函数命名。如:anotherThing、yetAnotherThing。
链接:常用命名
1.6.1 变量和函数
遵守驼峰大小写命名法;
变量名:前缀应该是名词;
函数名:前缀应该是动词。如:
//好的写法
var count =10;
var myName = "Jwk";
var found = true;
//不好的写法:变量看起来像函数
var getCount = 10;
var isFound = true;
//好的写法
function getName() {
return myName;
}
//不好的写法:函数看起来像变量
function theName() {
return myName;
}
常用动词:(链接:更多)
| can | 函数返回一个布尔值 |
| has | 函数返回一个布尔值 |
| is | 函数返回一个布尔值 |
| get | 函数返回一个非布尔值 |
| set | 函数用来保存一个值 |
1.6.2 常量
虽然JavaScript中并没有真正的常量的概念,但这并不能阻止开发者将变量作为常量。
约定使用大写字母和下划线来命名常量。例如:
if (count < MAX_COUNT) {
doSomething();
}
1.6.3 构造函数
在JavaScript中,构造函数是前面冠以new运算符的函数,用来创建对象。例如,Object和RegExp。所以开发者创建自己的构造函数时,命名应该与本地语言保持一致,采用驼峰命名法。
驼峰命名分为大写和小写两种,例如anoherName和AnotherName,构造函数采用后一种大写模式,这样可以将构造函数从变量和普通函数中区分出来。
看下一段代码:
var me = Person("Nicholas");
var you = getPerson("Michael");
根据上面的约定,我们一眼可以看出来第一行出了问题,缺少new运算符,第二行看起来还ok。
1.7直接量
1.7.1 字符串
约定使用双引号包裹字符串。
约定不使用“\”来创建多行字符串,使用“+”代替。
1.7.2 数字
//整数
var count = 10;
//小数
var price = 10.0;
var price = 10.00;
//不推荐的小数写法:没有小数部分
var price = 10.;
//不推荐的小数写法:没有整数部分
var price = .1;
//不推荐的写法:八进制写法已经被弃用了
var num = 010;
1.7.3 null 和 undefined
这两个词经常会被搞混,邪门的是null === undefined 返回结果竟为true。
null :把他当做对象的占位符
undefined :没有被初始化的变量都有一个初始值,即undefined,表示这个变量等待被赋值。
1、如果你使用了一个可能赋值为一个对象的变量时,将其赋值为null。不要写声明了但未赋值的变量。
//好的做法
var person = null;
console.log(person === null); //true
console.log(typeof person); //"object"
//不好的做法,foo未被声明
var person;
console.log(typeof person); //"undefined"
console.log(typeof foo); //"undefined"
这样写就可以保证只有在一种情况下typeof才会返回“undefined”:当变量未声明时。
2、比较的时候注意,因为 undefined === null ,返回true
//不好的写法
var person;
if (person != null) {
//...
}
1.7.4 对象直接量
最流行的做法是使用对象直接量方法替代传统的创建object实例再添加属性的做法。
//不好的写法
var book = new Object();
book.title = "编写可维护的 JavaScript";
//好的写法
var book = {
title : "编写可维护的 JavaScript"
}
1.7.5 数组直接量
同对象直接量一样。
//不好的写法
var colors = new AArray("red", "green", "blue");
//好的写法
var color = [ "red", "green", "blue"];