编写可维护的javascript(一):基本的格式化

来源:互联网 发布:java 数字字符串排序 编辑:程序博客网 时间:2024/05/18 20:09

一 基本的格式化

  • 语句结尾
    依赖于分析器的自动分号插入(ASI)机制,javascript代码省略分号是可以正常工作。ASI会自动寻找出代码中应当使用分号但实际没有分号的位置,并插入分号。在大多数情况下ASI都会正确插入分号,不会产生错误。
    // 原始代码    function getData() {        return         {            title: 'rule',            author: 'mangoyi'        }    }    // 分析器会自动解释成    function getData() {        return ;        {            title: 'rule',            author: 'mangoyi'        }    }

  • javascript编码风格倾向于将行长度限定在80个字符。
    if (isLeapYear && isFebruary && day == 29 && itsYourBirthday &&            noPlans) {        waitAnotherFourYears();    }

以上代码注释:if条件语句拆分成两行,断行是在&&运算符之后(总是将一个运算符置于行尾,ASI就不会自作主张地插入分号了)

  • 命名
    核心遵照驼峰式大小写命名法
    变量名总是遵循驼峰大小写命名法,并且命名前缀应当是名字。以名词为前缀可以让变量和函数区分开来,因为函数名前应当是动词。见下面例子:
    // good    var count = 10;    var myName = 'Mangoyi';    var found = true;    // bad (变量看起来像是函数)    var getCount = 10;    var isFound = true;    // good     function getName() {        return myName;    }    // bad (函数看起来像是变量)    function theName() {        return myName;    }

常量
约定使用大写字母和下划线来命名,下划线用以分割单词,比如:

    var MAX_COUNT = 10;

构造函数
构造函数以大写字母开头的驼峰式命名,常常是名词,因为构造函数是用来创建某个类型的实例的。

    // good    function Person(name) {        this.name = name;    }    Person.prototype.sayName = function() {        alert(this.name);    }    var me = new Person('Mangoyi');

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

    // 合法javascript代码    var name = "Mangoyi says,\"Hi\"";    //也是合法的javascript代码    var name = 'mangoyi says,"Hi"'

注:明确禁止创建多行字符串,多行字符串的一种替代方法是,使用字符串连接符(+)将字符串分成多份

    // bad(不允许)    var longString = "Here's the story, of a man \                      named Mangoyi";    // good    var longString = "Here's the story, of a man " +                     "named Mangoyi";

数字
请不要省略小数点之前或之后的数字。

null
null是一个特殊值。
理解null最好的方式是将它当做对象的占位符。

    // good    var person = null;    function getPerson() {        if (condition) {            return new Person('Mangoyi');        } else {            return null;        }    }    // good    var person = new getPerson();    if (person !== null) {        doSomething();    }    // bad(不好的做法: 用来和为初始化的变量比较)    var person;    if (person != null) {        doSomething();    }    // bad(不好的做法:检测是否传入了参数)    function doSomething(arg1, arg2) {        if (arg2 != null) {            doSomethingElse();        }    }

undefined
undefined是一个特殊值
那些没有被初始化的变量都有一个初始值,即undefined,表示这个变量等待被赋值。
typeof的行为
不管值是undefined的变量还是未声明的变量,typeof运算的结果都是‘undefined’ 比如:

    // foo 未被声明    var person;    console.log(typeof person);   // "undefined"    console.log(typeof foo);      // "undefined"

当变量未声明时,如果使用了一个可能赋值未一个对象的变量时,应将其赋值为null。

    // good    var person = null;    console.log(person ==== null)  //true

则此时typeof运算null类型时则返回‘object’,就可以和undefined区分开了。

对象直接量
创建对象最流行的一种做法是使用对象直接量。

    // bad     var book = new Object();    book.title = 'Javascript';    book.author = 'Mangoyi';

很少见到上面这种写法。
对象直接量允许你将所有属性都括在一对花括号中。
所以,定义对象直接量时,采用如下标准写法:

    var book = {        title : 'Javascript',        author : 'Mangoyi'    };

数组直接量
和对象直接量相似,数组直接量是Javascript中定义数组最简洁的一种方式。
不赞成显示地使用Array构造函数来创建数组。比如:

    // bad     var colors = new Array('red', 'green', 'blue');    // good    var colors = ['red', 'green', 'blue'];

文章内容从《编写可维护的Javascript》[美] Nicholas C. Zakas著 书中总结写出。