这么高级的标题,简单说就是,emmm写代码时可以采用的一种比较高级,可读性更强,更适合团队合作的风格~
毕竟工作的时候大部分是和同事们一起编写代码和维护,而不是单打独斗。这个时候如果每个人都保持着自己独特的风格,emmm,我觉得后继者会很头痛吧,毕竟,大家都没办法保证手上的项目能一直自己维护着。
之所以会看《编写可维护的javascript》这本书呢,是学长看了我写的代码之后建议我学习一下的(手动尴尬),好了废话说太多了,我们开始吧~
缩进层级
书上讲到了四种常用的缩进格式
//使用制表符进行缩进
if ( length ){
doSomething()...
}
//使用两个空格进行缩进
if ( length ){
doSomething()...
}
//使用四个空格进行缩进
if ( length ){
doSomething()...
}
//使用8个空格进行缩进
if ( length ){
doSomething()...
}
我个人是习惯用制表符(tab键)缩进的,但是书上说不同编译器对制表符的长度的设置不一,不同编辑器界面代码展示会有差异,所以以后会试着开始用4个空格去代替tab键吧~但我觉得使用什么方式的缩进没有标准,但是团队协作时必须要约定好相同的标准,不然将上面这四种风格杂糅在一个文件里眼睛也是太辛苦了
语句结尾
大家都知道JavaScript是一种弱语言,每行的结尾加不加 ;号都会编译成功,但是一些特殊的情况就会编译失败,例如
function getDate() {
return
{
doSomething()...
}
}
分析器会用以下方式分析
function getDate() {
return ;
{
doSomething()...
};
}
编译时返回结果是undefined,解决方法是把大括号提到return这行来
function getDate() {
return {
doSomething()...
}
}
感觉都不是什么大问题,所以要细心,也可以养成随手加 ;的习惯呀,又规范又好看hhh~
行的长度
总结一下讲就是,作者倾向于将行长限定在80个字符
换行
一般一行超过了最大限制,我们就需要换行并且缩进两个层级,或者与赋值运算符对齐。记住每行的结尾留一个运算符,否则ASI机制有可能就给这行加一个 ‘ ;’,从而导致错误的发生。
空行
适当的空行可以增加代码的可读性,书中作者建议了这些位置用来添加空行
- 流控制语句之前
- 方法之间
- 方法中局部变量与语句之间
- 多行或单行注释之前
- 方法内的逻辑片段之间
命名
"计算机科学只存在两个难题:缓存失效和命名" —— Phil Kaerlton
一般是采用驼峰命名法或者匈牙利命名法,前者又分为大小驼峰法。
大驼峰法 (Pascal Case)每个单词的首字母都大写,例如 MaxLength
小驼峰法(Camel Case)以小写字母开头,后续每个单词的首字母都大写,例如 toLink,myFirstProgram
匈牙利命名法 在名字前以类型首字母点缀,例如 sName,iCount
1.变量和函数
尽量遵循驼峰大小写法。
变量的命名前缀应当使用名词,函数应当使用动词作为命名前缀,这样可以将两者比较好的区分。
作者提供了几个比较常用的函数动词:can,has,is,get,set
2.常量
使用全大写字母和下划线命名,例如:MAX_COUNT , URL
也常使用大驼峰法命名常量~
3.构造函数
构造函数一般与new运算符一起使用,用来创建对象。一般遵循大驼峰法命名。例如:Person , Animal
直接量
我的理解是 就是我们常说的基本类型和引用类型。包括字符串,数字,布尔值,null和undefined,也包括对象和数组。
1.字符串
赋值时使用单双引号都是可以的
var name = "zhangsan"
var name = 'zhangsan'
在折行时有两种方式,使用‘ \ ’ 或者 ‘+’
var longString = "hello,everyone. this is your honey \
girl";
var longString = "hello,everyone. this is your honey "+
"girl";
作者更推荐使用‘ + ’号去折行哦~
2.数字
尽量不要使用以下写法,可能会引起歧义
var price = 10.
var price = .1
var price = 010
前两种是省略了小数部分或者整数部分,也可能是开发者的遗漏。
最后这个则是使用了八进制写法,已被弃用
3.null
4.undefined
3和4我不能很好的表达出来,但是就是要区分它们的适用区间,然后在使用这两个值去判断时需要谨慎一些
因为仅声明未赋值的变量打印出来也是undefined,所以尽量在未知变量声明时赋值上null ,从而保证只有变量未声明这一种情况会出现undefined。
let a;
console.log(a) // undefined
console.log(a==null) // true
console.log(a==undefined) // true
console.log(a===null) // false
console.log(a===undefined) // true
console.log(typeof a) // undefined
// b未声明
console.log(b) // Uncaught ReferenceError: b is not defined
console.log(b===null) // false
console.log(b===undefined) // true
console.log(typeof b) // undefined
let c = null ;
console.log(a) // null
console.log(c===null) // true
console.log(c===undefined) // false
console.log(typeof c) // object
5.对象直接量
不建议先建立空对象实例,再使用属性的方式添加。而建议在声明时即写出所有的属性
var book = {
title :"Maintainable JavaScript",
author :"Nicholas C. Zakas"
}
6.数组直接量
不建议使用new Array来创建数组,而建议使用 “ [ ] ” 来创建数组
// 不好的写法
var arr = new Array('one','two','three');
// 好的写法
var arr = ['one','two','three'];
注释
1.单号注释
建议注释前空一行,且与下一行对齐,双斜杠后空一格
if (flag) {
// 单行注释格式
doSomething();
}
2.多行注释
以/*开始,以*/结束, 中间行以*开行。
if (flag) {
/ *
* 多行注释格式
* 多行注释格式
* /
doSomething();
}