《编写可维护的JavaScript》读书笔记——1.基本的格式化
缩进层级
使用制表符进行缩进,每一个缩进层级都用单独的制表符(tab character)表示。一个缩进层级是一个制表符,两个缩进层级是两个制表符,以此类推。
语句结尾
每个语句的结尾都不要省略分号。
行的长度
行的长度建议不要超过80个字符。
换行
一行长度超过最大字符数(80个字符)就要手动拆成两行。通常在运算符后换行,下一行会增加两个层级的缩进。在给变量赋值时,第二行的位置应当和赋值运算符的位置保持对齐。
// 好的做法:在运算符后换行,第二行追加两个缩进
callAFunction(document, element, window, "some string value",
true, 123, navigator);
// 变量赋值的情况
var result = something + anotherthing + yetAnotherthing +
somethingElse + anotherSomethingElse;
空行
使用空行确保语义有关联的代码展现在一起。通常在以下情况下使用空行:
1. 每个控制流程语句之前(比如 if 和 for 语句)
2. 在方法中间
3. 在方法中的局部变量(local variable)和第一条语句之间
4. 在多行或单行注释之前
5. 在方法内的逻辑片段内插入空行,提高可读性
命名
驼峰式大小写命名法(Camel Case):由小写字母开始的,后面每个单词首字母都大写。
var thisIsMyName;
var anotherVariable;
var aVeryLongVariableName;
命名——变量和函数
变量和函数名称应总是遵循驼峰大小写命名法,变量的命名前缀应当是名词,函数名前缀应当是动词。命名长度应尽量短而抓住重点,避免无意义的命名。
变量名注意体现值的数据类型,如 count、length、size表明数据类型是数字。
函数和方法命名,第一个单词应该是动词,下面是一些常见动词约定:
动词 | 含义 |
---|---|
can | 函数返回一个布尔值 |
has | 函数返回一个布尔值 |
is | 函数返回一个布尔值 |
get | 函数返回一个非布尔值 |
set | 函数用来保存一个值 |
// 变量名
var count = 10;
var myName = "Nicholas";
var found = true;
// 函数名
function getName() {
return myName;
}
命名——常量
使用大写字母和下划线来命名常量,JavaScript并不区分变量和常量,帮助区分变量和常量。
var MAX_COUNT = 10;
var URL = "www.baidu.com";
命名——构造函数
用大写字母开始的驼峰大小写命名法命名。JavaScript中构造函数是前面冠以new运算符的函数,用来创建对象。
function Person(name){
this.name = name;
}
var me = new Person("Nicholas");
直接量
字符串
用双引号括起来,多行字符串时使用加号连接符连接。
var longString = "Here's the story, of a man " +
"named Brady.";
数字
在JavaScript中,所有的数字形式都存储为相同的数据类型——浮点型。禁止使用八进制,容易产生错误和歧义。
// 整数
var count = 10;
// 小数
var price = 10.0;
var price = 10.00;
// 十六进制写法
var num = 0xA2;
// 科学计数法
var num = 1e23;
null
null一般用于作为对象的替代品,适用于以下场景:
- 用来初始化一个变量,这个变量可能赋值为一个对象
- 用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象
- 当函数的参数期望是对象时,作为参数传入
- 当函数的返回值期望是对象时,作为返回值传出
不适用场景:
- 检测是否传入了某个参数
- 检测一个未初始化变量
undefined
在代码中避免使用undefined,一个可能会被赋值的变量应赋值为null。typeof 运算符才可以区分是未声明的变量还是已经声明的变量
// foo未声明
var person = null; // 较好的写法
var num; // 不好的写法
console.log(person === null); // 结果是true
console.log(typeof person); // "object"
console.log(typeof foo); // "undefined"
console.log(typeof num); // "undefined"不能区分是否未声明
对象直接量
创建对象使用对象直接量。
// 不好写法,先创建实例再添加属性
var book = new Object();
book.title = "Maintanable JavaScript";
book.author = "Nicholas C. Zakas";
// 好的写法,使用对象直接量
var book = {
title: "Maintanable JavaScript",
author: "Nicholas C. Zakas"
}
数组直接量
// 不好的写法
var color = new Array("red", "green", "blue");
var numbers = new Array(1, 2, 3, 4);
// 好的写法
var color = ["red", "blue", "green"];
var numbers = [1, 2, 3, 4];