读《编写可维护的JavaScript》第一章总结

第一章 基本的格式化

 1.4 ① 换行

 当一行长度到达了单行最大的字符限制时,就需要手动将一行拆成俩行。通常我们会在运算符后换行,下一行会增加俩个层级的缩进。

    // 好的做法: 在运算符后换行,第二行追加俩个缩进
    callFunction(document, element, window, "some string value", true, 123, 
              navigator);
    
    // 不好的做法: 在运算符之前换行了
    callFunction(document, element, window, "some string value", true, 123 
       , navigator)

 

目的: 防止ASI(Automatic Semicolon Insertion)机制会在某些场景下在行结束的位置插入分号。总是将一个运算符置于行尾, ASI就不会自作主张地插入分号,也就避免了错误的发生。

1.5 ② 空行

代码看起来应当像一系列可读的段落,而不是一段柔在一起的连接文本。有时一段代码的语义和另一段代码不相关,这时就应该使用空行将它分隔。

1.6 ③ 命名

JavaScript语言的核心ECMAScript,即是遵照了驼峰式大小写(Camel case)命名法。驼峰式大小写命名法是由小写字母开始的,后续每个单词首字母都大写。

var thisIsMyName;

var anotherVariable;

var aVeryLongVariableName; 

1.6.1 ④ 变量和函数

变量名应当总是遵守驼峰式大小写命名法,并且命名前缀是名词。函数名前缀应当是动词。对于函数和方法命名来说,第一个单词应该是动词,这里有一些使用动词常见的约定:

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

 

 

 

 

 

 

    // 好的写法
    var count = 10;
    var myName = "Nicholas";
    var found = true;

    // 不好的写法:变量看起来像函数
    var getCount = 10;
    var isFound = true;

    // 好的写法
    funciton getName(){
        return myName;
    }

    // 不好的写法
    function theName(){
        return myName;
    }

 1.6.3 ⑤ 构造函数

在JavaScript中,构造函数只不过是前面冠以new运算符的函数,用来创建对象,构造函数的命名遵守大驼峰命名法(Pascal Case)。

 Pascal Case和 Camel Case都表示”驼峰大小写“,二者的区别在于Pascal Case以大写字母开始。因此anotherName可以替换成AnotherName。这样做可以将构造函数从变量和普通函数中区分出来。构造函数的命名也常常是名词,因为它们是用来创建某个类型的实例的。

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

1.7.1 ⑥ 直接量

在JavaScript中,字符串是独一无二的。字符串可以用双引号括起来,也可以用单引号括起来。

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

你需要关心的是:你的代码应当从头到尾只保持一种风格

 

 关于字符串还有另外一个问题需要注意,创建多行字符串。

 // 不好的写法
 var longSring = "Here 's the stroy, of a man \
 named Bradyh"
 // 好的写法
 var longString = "Here's the story, of a man " +
                 "name Bradyh"

多行字符串的一种替代写法:使用字符串连接符(+)将字符创分成多份。

1.7.3 ⑦ 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(); } }

1.7.5 ⑧ 对象直接量

  // 不好的写法                                         
  var book=new Object();                           
    book.title = "Maintainable JavaScript";                     
    book.author = "Nicholas C. Zakas";
// 好的写法 var book = { title:"Maintainable JavaScript", author:"Nicholas C. Zakas" };
// 不好的做法 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];

 

posted @ 2015-12-27 21:07  谢巴奥  阅读(155)  评论(0编辑  收藏  举报