// Type Conversion
+'010' === 10;
Number('010') === 10;
parseInt('010', 10) === 10;
10 + '' === '10';
+new Date() // timestamp
+new Date;
15. 扩展原型
复制代码 代码如下:
// 仅在需要向前兼容时才使用,其他情况不建议扩展原型对象
Array.prototype.forEach = function(){
// only for forward compatible
};
16. 循环优化
复制代码 代码如下:
// 缓存
for(var i=0, j = document.getElementsByTagName('a').length; i0; i--){
// maybe faster
}
// 据说是最快的
while(i--){
// maybe fastest
}
17. 尽量使用新特新
复制代码 代码如下:
Array.forEach();
getElementsByClassName();
querySlectorAll();
// 首先检测是否支持新特性,能用就用
if(document.getElementsByClassName){
// use
}else{
// your implementations
}
18. 惰性载入
复制代码 代码如下:
// 只判断一次,再次调用该函数则无需判断
function lazyDef(){
if(condition1){
lazyDef = function(){ };
}else if(condition2){
lazyDef = function(){ };
}
return lazyDef();
}
19. 私有函数与公共方法
复制代码 代码如下:
var MYAPP = {};
MYAPP.dom = (function(){
var _setStyle = function(el, prop, value){
console.log('setStyle');
};
return {
setStyle: _setStyle
};
})();
// 当 MYAPP.dom.setStyle 不慎被覆写时,_setStyle在内部仍然可用
20. 调试
复制代码 代码如下:
// 尽量使用,可以传入多个参数,最后输出拼接后的字符串
console.log('xx','xx','...');
console.dir(someObj);
console.dirxml(someDom);
console.time('timer');
console.warn('xxx');
// 封装可以保证不小心发布出去也不会导致问题,但报错时行号可能有问题
function msg(msg){
if(console && console.log){
console.log(msg); // wrong line number
}
}
基本上目前想到的只有这些,欢迎大家补充讨论:)