《JavaScript高级程序设计》学习笔记——最佳实践

Author:chemandy

第二十章 最佳实践

1.可维护性

1.1 什么是可维护的代码:

□可理解性

□直观性

□可适应性

□可扩展性

□可调试性

1.2 代码约定

①可读性

1)代码缩进,建议使用4空格缩进

2)代码注释

□函数和方法

□大段代码

□复杂的算法

□Hack

②变量和函数名

□变量名应为名词

□函数名应该以动词开头

□变量和函数都应使用合乎逻辑的名字,不要担心长度(进行js压缩时会替换掉)

③变量类型透明

□初始化,当定义一个变量后,应初始化一个值,来暗示它将来应该如何应用。

var found = false;

□使用匈牙利标记法指定变量

var bFound; //布尔值

var iCount; //整数

var sName; //字符串

var oPerson; //对象

□使用类型注释

var found /* Boolean */ = false;

2.松散耦合

①解耦HTML/JavaScript

②解耦CSS/JavaScript

③解耦应用逻辑/事件处理程序

3.编程实践

①尊重对象所有权

1)如果你不负责维护某个对象、它的对象或者它的方法,那么你就不能对他们进行修改。

□不要为实例或原型添加属性。

□不要为实例或原型添加方法。

□不要重定义已存在的方法。

2)最佳的方法是永远不修改不是由你所有的对象,可以通过以下方式为对象创建新的功能:

□创建包含所需功能的新对象,并用它与相关对象进行交互。

□创建自定义类型,继承需要进行修改的类型。然后为自定义类添加额外功能。

②避免全局变量

使用命名空间:

//创建全局对象。

var Wrox = {};

//为Professional JavaScript创建命名空间

Wrox.ProJS = {};

//将书中用到的对象附加上去

Wrox.ProJS.EventUtil = {…};

Wrox.ProJS.CookieUtil = {…};

③避免与null进行比较

□如果值为一个引用类型,使用instanceof操作符检查其构造函数;

□如果值为一个基本类型,使用typeof检查其类型

□如果是希望对象包含某个特定的方法名,则使用typeof操作符确保指定名字的方法存在于对象上。

□代码中的null比较少,就容易确定代码的目的,并消除不必要的错误。

④使用常量

□重复值

□用户界面字符串

□URLs

□任意可能会更改的值

4.性能

4.1 注意作用域

①避免全局查找:在一个函数中若会用到多次的全局对象则存储为局部变量。

②避免with语句

4.2 选择正确方法

①避免不必要的树形查找

□一旦多次用到对象属性,应该将其存储在局部变量中。第一次访问改值为O(n),后续访问为O(1).

②优化循环

□减值迭代

□简化终止条件

□简化循环体

□使用后测试循环

③展开循环

□当循环的次数是确定的,消除循环并使用多次函数调用往往更快。

□Duff装置处理循环。

④避免双重解析

□当JavaScript代码想解析JavaScript的时候就会存在双重解析惩罚。

当使用eval()函数或者是function构造函数以及使用setTimeout()传入一个字符串参数时。

⑤性能的其他注意事项

□原生方法较快

□switch语句较快

□位运算符较快

4.3 最小化语句数

完成多个操作的单个语句要比完成单个操作的多个语句快。

①多个变量声明

②插入迭代值

③使用数组和对象字面量

4.4 优化DOM交互

①最小化现场更新

②使用innerHTML

③使用事件代理

④注意NodeList

发生一下情况会返回NodeList对象

□getElementsByTagName()

□获取元素的childNodes属性

□获取元素的attribute属性

□访问了特殊的集合,document.forms、document.images等

5.部署(略)