《编写高质量代码-改善javascript程序的188个建议》读
编写高质量代码
改善javascript程序的188个建议:
1、警惕Unicode乱码
考虑到代码的安全性,我们应该尽量使用基本字符进行编码
2、正确辨析js语法中的词、句和段
3、减少全局变量污染
因为全局变量可以可以在程序的任何地方被修改,所以使用全局变量降低了程序的安全性
减少全局变量的方法
(1)在应用程序中创建唯一一个全局变量,并定义该变量为当前应用的容器(减少冲突)
(2)闭包
4、注意js数据类型的特殊性
(1)防止浮点数溢出:二进制的浮点数不能正确处理十进制的小数,处理时先化成整数再转化成小数
(2)慎用js类型自动转换
(3)正确检测数据类型
(4)避免误用parseInt
5、防止js自动插入分号
6、正确处理js特殊值
(1)正确使用NaN和Infinity
(2)正确使用null和undefined
(3)使用假值
7、小心保留字的误用
8、谨慎使用运算符
(1)用===,不用=
(2)谨慎使用++和-
(3)小心都好运算符
(4)警惕运算符的副作用
{% highlight ruby %}
var a = 1;
a = (a++)+(++a)-(a++)-(++a);
alert(a);
{% endhighlight %}
9、不要信任hasOwnProperty
10、谨记对象非空特性
11、慎重使用伪数组
12、避免使用with
13、养成优化表达式的思维方式
(1)加小括号
(2)改变表达式结构顺序
(3)避免布尔表达式的叠加
但是有时可以使用!!来做强制类型转换,将后面的表达式强制转换为布尔类型的数据(boolean)
(4)if语句分解较复杂的三目运算
14、不要滥用eval
15、避免使用continue
16、防止switch贯穿
17、块标志并非多余
18、比较function语句和function表达式
(1)function语句在解析时会被提升,这放宽了函数必须先声明后使用的要求
(2)最好不要在if语句中使用function语句
19、不要使用类型构造器
不要使用new Boolean,new Number
20、不要使用new
因为忘记写的话会导致构造函数的this指向window,所以不用,Are you kidding?
21、推荐提高循环性能的策略
22、少用函数迭代
23、推荐提高条件性能的策略
24、优化if逻辑
25、恰当选用if和switch
26、小心if嵌套的思维陷阱
27、小心if隐藏的bug
28、使用查表法提高条件检测的性能
29、准确使用循环体
30、使用递归模式
31、使用迭代
32、使用制表
33、优化循环结构
第二章 字符串、正则表达式和数组
34、字符串是非值操作
35、获取字节长度
36、警惕字符串连接操作
37、推荐使用replace
38、正确使用正则表达式工作机制
39、正确理解正则表达式回溯
40、正确使用正则表达式分组
41、正确使用正则表达式引用
42、用好正则表达式静态值
43、使用exec增强正则表达式功能
44、正确使用原子组
45、警惕嵌套量词和回溯失控
46、提高正则表达式执行效率
47、避免使用正则表达式的场景
48、慎用正则表达式修剪字符串
49、比较数组与对象同源特性
50、正确检测数组类型
51、理解数组长度的有限性和无限性
52、建议使用splice删除数组
53、小心使用数组唯独
54、增强数组排序的sort功能
55、不要拘泥于数字下标
56、使用arguments模拟重载
第三章 函数式编程
57、禁用Function构造函数
58、灵活使用Arguments
59、推荐动态调用函数
60、比较函数调用模式
61、使用闭包跨域开发
62、在循环体和异步回调中慎重使用闭包
63、比较函数调用很引用本质
64、建议通过Function扩展类型
65、比较函数的惰性求值和非惰性求值
66、使用函数实现历史记录
67、套用函数
68、推荐使用链式语法
69、使用模块化规避缺陷
70、惰性实例化
71、推荐分支函数
72、惰性载入函数
73、函数绑定有价值
74、使用高阶函数
75、函数柯里化
76、要重视函数节流
77、推荐作用域安全的构造函数
78、正确理解执行上下文和作用域链
第四章 面向对象编程
79、参照Object构造体系分析prototype机制
80、合理使用原型
81、原型域链不是作用域链
82、不要直接检索对象属性值
83、使用原型委托
84、防止原型反射
85、谨慎处理对象的Scope
86、使用面向对象模拟继承
87、分辨this和function调用关系
88、this是动态指针,不是静态引用
89、正确使用this
90、预防this误用的策略
91、推荐使用构造函数原型模式定义类
92、不建议使用原型继承
93、推荐使用类继承
94、建议使用封装类继承
95、慎重使用示例继承
96、避免使用复制继承
97、推荐使用混合继承
98、比较使用js多态、重载和覆盖
99、建议主动封装类
100、谨慎使用类的静态成员
101、比较类的构造和析构特性
102、使用享元类
103、使用掺元类
104、谨慎使用伪类
105、比较单例的两种模式
第5章 DOM编程
106、
第七章 数据交互与存储
137、使用隐藏框架实现异步通信
138、使用iframe实现异步通信
139、使用script实现异步通信
140、正确理解JSONP异步通信协议
141、比较常用的服务器请求方法
142、比较常用的服务器发送数据方法
143、避免使用xml格式进行通信
144、推荐使用JSON格式进行通信
145、慎重使用HTML格式进行通信
146、使用自定义格式进行通信
147、ajax性能向导
148、使用本地存储数据
149、警惕基于DOM的跨域侵入
150、优化ajax开发的最佳实践
151、数据存储要考虑访问速度
152、使用局部变量存储数据
153、警惕人为改变作用域链
154、慎重使用动态作用域链
155、小心闭包导致内存泄露
156、灵活使用Cookie存储长信息
157、推荐封装Cookie应用接口
第八章 js引擎与兼容性
158、比较主流浏览器内核解析
159、推荐根据浏览器特性进行检测
160、关注各种引擎对ES3的分歧
161、关注各种引擎对ES3的补充
162、关注各种引擎对Event解析的分歧
163、关注各种引擎对Dom解析的分歧
164、关注各种引擎对CSS渲染的分歧
第九章 javascript编程规范和应用
165、不要混淆javascript与浏览器
166、掌握js预编译过程
167、准确分析js执行顺序
168、避免二次评估
169、建议使用直接量
170、不要让javascript引擎重复工作
171、使用位操作符执行逻辑运算
172、推荐使用原生方法
173、编写无阻碍js脚本
174、使脚本延迟执行
175、使用XHR脚本注入
176、推荐最优化非阻塞方案
177、避免深陷作用域访问
178、推荐js性能调优
179、减少Dom操作中的repaint和reflow
180、提高Dom访问效率
181、使用setTimeout实现工作线程
182、使用Web Worker
183、避免内存泄露
184、使用svg创建动态图形
185、减少对象成员访问
186、推荐100ms用户体验
187、使用接口解决js文件冲突
188、避免js与css冲突