这篇文是来自JavaScript 设计模式第二章精要的心得,有很多ㄚ琪没注意过的地方,ㄚ琪在此公开给各位瞧瞧。
减少全域变数
全域变数的问题
使用全域变数的问题是,‘应用程式或网站的所有程式码都共用它们,他们存在于相同的全域命名空间(namespace)之中,总是有可能发生命名冲突’。看到这ㄚ琪这才了解一直在写烂的JavaScript程式码,看来就觉得像是丁丁。另一个好理由是可移植性。
遗漏“var”的副作用
‘隐含的全域变数和明确定义的全域变数之间有个微小的差别,就是能否用delete运算子将变数删除:
- 用var创造出的全域变数不可以删除
- 不使用var隐含创造出来的全域变数可以删除’
存取全域物件
单一var模式
‘在函式最开头使用单一个var述句是个非常有用的模式,具有下列优点:
- 当你要寻找所有函式所需变数的时候,只需寻找单一个地方
- 避免未宣告就使用变数所造成的逻辑错误
- 帮助你记得宣告变数,于是可以尽少使用全域变数
- 较少的程式码’
Hoisting:分散的var造成的问题
‘Javascript允许你在一个函式内有多个var叙述,并放在任何位置,而他们的行为跟在函式顶端就宣告一模一样。这行为称之为hoisting(提升)。如果你使用了一个变数,并在之后又宣告它的话,可能造成逻辑错误。’
for回圈
‘使用for回圈可以重复(iterate)整个阵列或类似阵列的物件。…通常for回圈的使用模式类似这样:
// sub-optimal loop
for (var i = 0; i < myarray.length; i++) {
// do something with myarray[i]
}
这问题就是每次都要存取阵列长度,这会拖慢你的程式。哇,ㄚ琪平常很懒就是直接这样用,没想到是有缺陷的,天龙人当久了总是会这样的,不被打一下可能都不会醒。
建议可以改成这样:
for (var i = 0, max = myarray.length; i < max; i++) {
// do something with myarray[i]
}
据说在HTMLCollections上使用回圈在任何的浏览器上可以快两倍,在IE则是快190倍,吼吼。
for-in 回圈
‘for-in 回圈应用来重复整个非阵列物件,它又称为列举(enumeration)。技术上,也可以用for-in回圈来重复整个阵列,但不建议这样做。
在列举物件属性时很重要的一件事是:使用hasOwnProperty()方法过滤掉来自原型(prototype)。’
不要扩充内建型别的原型
switch模式
避免隐含的型别转换
避免使用eval()
使用parseInt()转型成数值
编码规范
缩排
大括号
左括号的位置
空格
命名惯例
让建构式为首字母大写
字词的分隔方式:驼峰式命名法(Camel-Case,Camel Case,camel case)
其他命名方式
撰写注解
撰写API文件:使用JSDoc Toolkit(http://code.google.com/p/jsdoc-toolkit/)和YUIDoc (http://yuilibrary.com/projects/yuidoc)。
YUIDoc范例
一开始是为了帮助YUI (Yahoo! User Interface)文件化而开发。
写得让人看得懂
同侪审查
在推出产品最小化程式码
执行JSLint
这本书真的可以成王道,推。