最近看完了<编写可维护的javascript>这本书,正好记录下,日后方便查看
1. 缩进:普遍用4个空格
2. 结尾分号最好不省略,否则return
{name:'sf'}
会这样:return;{name:'sf'}
,关于分号见http://blog.segmentfault.com/robinqu/1190000000515129
* JavaScript会忽略程序中标识之前的空格。多数情况下也会忽略换行符。这样我们可以通过空格和换行,保持整齐,一致的编码风格。需要注意的是,如果当前语句和随后的非空格字符不能当成一个整句,JavaScript不会忽略换行符而是在语句行结束处填补分号。
* 当没有分号就无法解析代码时,把换行符当成一个分号
* 当换行符的下一个非空字符无法解释为语句的延续时,把换行符当成一个分号
* 如果一条语句以 (, [, /, +, or -开头, 可能会被解释为是之前语句的延续
3. 单行长度不超过80字符,如果超过可在运算符后换行,下一行增加2个层级的缩进get(a,b,c,
d)
4. 命名:变量用小驼峰规则如:thisMyName,anotherPeople,并且前缀为名词,用于和函数区分开,因为函数以动词为前缀如getName,setName,isName,hasName,常量用大写,下划线分隔如MAX_COUNT.构造函数用大驼峰如function Person
5. 多行字符串不建议var thisNmae='here is my\
story';可用+拼接var thisNmae='here is my+
history';
6.null vs undefined 。null的用处:
*初始化一个可能为对象的变量
*和初始化的变量比较
*当函数参数期望是对象时用作参数传入
*当函数的返回值期望是对象,作返回值传出
不应该使用null的地方:
*null来验证是否传入参数,未传参数为undefined
*用null检测未初始化变量
7. 单行注释// 这是注释
8.多行注释 /*这是注释*/
/*
* 注释内容
*/
9.文档注释
/**
注释内容
注释内容
注释内容
**/
10. 所有块语句都要加花括号如if for while do while try catch
11. for in 循环用来对实例对象和原型中的可以遍历的,不是用来遍历数组的
12. 单var语句 var i,len,
value = 10;
13.函数声明不该出现在if else中
14.立即执行函数var value = (function(){return {name:'sf'}})();
15.不要在全局作用域用use strict ,应该在函数作用域开头
16.字符串和数字比较会用Number转化为数字再比较如5 == '5' 25 == '0x19'
17.如果其中一个是对象,会先调用对象的valueOf得到原始值类型(null,undefined,int,string,boolean)再比较,如果没有定义valueOf调用toString如var obj = {
toString : function (){return '5';}
}
console.log(5== obj)// true
18.推荐使用===和!==比较,以免进行强制类型转化,和null比较例外如判断null或undefined
19.setTimeOut和setInterVal中不要使用字符串形式而用函数?不知为什么,知道的童鞋回复下,谢谢
20. 原始包装类型String,Boolean,Number,让原始值具有对象的行为如'string'.toUpperCase()可调用对象的方法,将字符串当对象对待,但给字符串增加属性获取不到,而是undefined,因为会立即销毁
21. 松耦合:
*将js从css抽离如.box{width:expression(doucumnet.body.offsetWidth+'px')}
*将css从js抽离,不推荐element.style.color='red';element.style.left='10px';
可用一个class如.myclass{color:red;left:10px;}
element.className+='myclass';
*将js从html抽离,如<button onclick="getName()"></button>,可用事件监听btn.addEventListener('click',getName,false)
*将html从js抽离,主要是用模板,大都是用replace和复杂的handlebars(有用过的吗?)
22. 避免使用全局变量,单全局变量,参考jquery和yui
零全局变量,(function(win){
var doc = win.documnent;
//相关代码
})(window));
23.判断数据类型,typeof判断字符串,数字,布尔,undefined是靠谱的
*检测null应该和null比较如if(element!==null){}
.
*用instanceof检测引用值如[] {},new Date(),new RegExp()
*检测函数typeof func ==='function'
,用in检测dom方法if('querySelector' in document)
,检测数组很蛋疼因为 typeof [] =='object',推荐function isArray(arr){
return Object.prototype.toString.call(arr) == '[Object Array]';
}
*检测属性用in if('count' in obj)
24.错误处理throw new Error('error')
ps:偶都木有用过
25. 不是你的对象不要动:不覆盖方法,不新增方法,不删除方法document.getElemntById=function(){return null;}
document.getSome=function(){alert('get it')}
document.getElemntById= null
26. 避免浏览器推断if(document.all){//ie}else{//other}
如果p,那么q,逆反命题如果非q,那么非p也成立
27.木有啦,后面还有几章没看下去就不记录了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。