JavaScript编写可维护的代码。

基本的格式化

缩进层级

4个空格缩进,最好统一tab为4个字符。

语句结尾

结尾分号

产生错误的例子

//原始代码
function getData() {
    return 
    {
        title:"Maintainable JavaScript",
        author:"Nicholas C. Zakas"
    }
//分析器会它理解
function getData() {
    return;
    {
        title:"Maintainable JavaScript",
        author:"Nicholas C. Zakas"
    };
}

可以通过将左花括号移至与return同一行的位置来修复这个问题。

//这段代码工作正常,尽管没有用分号
function getData() {
    return {
        title:"Maintainable JavaScript",
        author:"Nicholas C. Zakas
    }
}

行的长度

80个字符
换行
通常我们会在运算符后换行,下一行会增加两个层级的缩进(8个字符)

例外:当给变量赋值时,第二行的位置应当和赋值运算符的位置保持对齐,例如

var result = something + antherThing + yetAnotherThing + somethingElse + 
             anotherSomethingElse;

空行

  • 在方法之间
  • 在方法的局部和语句之间
  • 在多行或单行注释之前
  • 在方法内的逻辑片段之间插入空行,提高可读性

命名

驼峰命名法

 驼峰式大小写命名是由小写字母开始的,后续每个单词首字母都大写。

变量和函数

 变量名应当总是遵循驼峰小大写命名法,并且前缀是名词。以名词作为前缀可以让变量和函数区分开来,因为函数名前缀应当是动词。
//好的写法
var count = 10;
var myName = "Nicholas";
var found = true;
//不好的写法:变量像函数
var getCount = 10;
var isFound = true;
//好的写法
function getName() {
    return myName;
}
//不好的写法:函数看起来像变量
function theName() {
    return myName;
}

动词常见的约定

动词 含义
can 函数返回一个布尔值
has 函数返回一个布尔值
is 函数返回一个布尔值
get 函数返回一个非布尔值
set 函数用来保存一个值

常量

在ECMAScript6,JavaScript中并没有真正的常量的概念。然而,为了区分普通的变量和常量,它使用大写字母和下划线来命名。

构造函数

在JavaScript中,构造函数只不过是前面冠以new运算符的函数,用来创建对象。语言本身已经包含了很多内置构造函数,比如Object和RegExp,同样开发者也可以创建自己的构造函数来生成新类型。

//好的做法
function Person() {
    this.name = name;
}
Person.prototype.sayName = function() {
    console.log(this.name);
}
var me = new Person("Nicholas");    

直接量

字符串

//合法的JavaScript代码
var name = "Nicholas says,\"Hi.\"";
//也是合法JavaScript代码
var name = 'Nicholas says."Hi"';

在这段代码中,在使用双引号括起来的字符串里需要对双引号进行转义,而在使用单引号括起来的字符串
里则不必如此。

null

null是一个特殊值,但我们常常误解它,将它和undefined搞混。在下列场景中应当使用null。

  • 用来初始化一个变量,这个变量可能赋值为一个对象。
  • 用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象。
  • 当函数的参数期望是对象时,用作参数传入。
  • 当函数的返回值期望是对象时,用作返回值传出。

还有下面一些场景不应当使用null
- 不要使用null是否传入了某个参数。
- 不要用null来检测一个未初始化的变量。

示例代码

//好的用法
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();
    }
}

理解null最好的方式是将它当作对象的占位符。这个规则在所有的主流编程规范中都没有提及,但对于全局可维护性来说至关重要。

对象直接量

创建最流行的一种做法是使用对象直接量,在直接量上中直接写出所有属性,这种方式可以取代先显示地创建Object的实例然后添加属性的这种做法。

//不好的写法
var book = new Object();
book.title = "Maintainable JavaScript";
book.author = "Nicholas C. Zakas";
//好的写法
var book = {
    title:"Maintainable JavaScript",
    author:"Nicholas C. Zakas"
};

数组直接量

和对象直接量类似,数组直接量是JavaScript中定义数组最简洁的一种方式。

//不好的写法
var colors = new Array("red","green","blue");
var numbers = new Array(1,2,3,4);
//好的做法
var colors = ["red","green","blue"];
var numbers = [1,2,3,4];

你可能感兴趣的:(javascript)