Programs are meant to be read by humans and only incidentally for computers to execute.
程序是写给人读的,只是偶尔让计算机执行一下。
编程风格(style guideline): 规约单文件中代码的规划
编码规范(code convention): 编程最佳实践,文件和目录的规划以及注释
换行
当一行长度达到单行最大字符数限制时,需手动将一行拆成两行,通常我们会在运算符后换行,下一行会增加两个层级的缩进(2个Tab制表符)。
// 推荐: 在运算符后换行(这里是逗号),第二行增加两个缩进(2个Tab制表符)
callAFunction(document, element, "some string value", true, 123,
navigator;)
语句换行也可以运用这个规则:
if (isLeapYear && isFebruary && day == 29 && itsYourBirthday &&
noPlans) {
waitAnotherFourYears();
}
// if的主体部分依然是一个缩进
变量换行
var result = something + anotherThing + yetAnotherThing +
anotherSomethingElse;
// 当给变量赋值时,第二行的位置应当和赋值运算符的位置保持对齐
空行
用空行分隔代码,确保语义有关联的代码展现在一起,
- 在方法之间;
- 在方法的局部变量和第一条语句之间;
- 在多行或单行注释之前;
- 在方法的逻辑片段之间插入空行,提高可读性。
if (wl && wl.length) {
for (i = 0, l = wl.length; i < 1; ++i) {
p = wl[i];
type = Y.Lang.type(r[p]);
if (s.hasOwnProperty(p) {
if (merge && type == 'object') {
Y.mix(r[p], s[p]);
} else if (ov || !(p in r)) {
r[p] = s[p];
}
}
}
}
变量和函数
命名不仅是一门科学,也是一门技术。遵循小驼峰命名法,命名提现数据类型;例如命名count, length和size 表明数据类型是数字,而命名name, title 和message表明数据类型是字符串;函数名前缀应该是动词。
动词 | 含义 |
---|---|
can | 函数返回一个布尔值 |
has | 函数返回一个布尔值 |
is | 函数返回一个布尔值 |
get | 函数返回一个f非布尔值 |
set | 函数用来保存一个值 |
if (isEnabled()) {
setName("nicholas");
}
if (getName() === "Nicholas") {
doSomething();
}
常量
使用大写字母和下划线来命名,下划线用以分隔单词
var MAX_COUNT = 10;
var URL = "http://www.nczonline.net/";
构造函数
构造函数的命名常常是名词,用来创建某个类型的实例,通常用大驼峰命名法,前面往往跟new连用。
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
alert(this.name);
};
var me = new Person("Nicholas");
字符串
字符串可以用双引号括起来,也可以使用单引号括起来。
区别:双引号里面的字符串需要对双引号进行转义,单引号里的字符串不需要转义。
// 合法的JavaScript代码
var name = "Nicholoas says, \"Hi.\"";
// 合法的JS代码
var name = 'Nicholos says, "Hi"';
// 多行字符串建议用"+"将字符串分成多份
var longString = "Here's the story, of a man " +
"named Brady.";
对象直接量
创建对象时直接写出所有属性
// お薦めします,推荐的写法
var book = {
title: "Maintainable JavaScript",
author: "Nicholas C. Zakas"
};
// not Recommended
var book = new Object();
book.title = "Maintainable JavaScript";
book.author = "Nicholas C. Zakas";
数组直接量
// Good
var colors = ["red", "blue", "white"];
var numbers = [1, 2, 3, 4];
// Bad
var colors = new Array("red", "blue", "white");
var numbers = new Array(1, 2, 3, 4);