1. 變項定義
// 一般寫法
var a = 0;
var b = 1;
var c = 'xxx';
// 建議寫法
var a = 0,
// 建議寫法
var a = 0,
var a = 0,
b = 1, 'xxx';
2. 盡量使用字面量
// 一般寫法
var obj = new Object();
obj.c = 'cc';
var arr = new Array();
// 建議寫法
var obj = {
a: 'aa',bb 但= [];
function getXX(index){
return ['aa', 'bb', 'xx', 55, 'xxb'](index);
}
function get ',
500: 'xxx'
}[code];
}
3. 正則字面量
var regex = new Regp('someable);函數
regex = new RegExp(cls + '\s*', 'ig'); // only for dynamic regexs
// 其他情況皆使用字面量使用字面上的/ig;
4. 設定預設值(個人感覺typeof)
// Default values
var arg = arg || 'default'; // fallback
document.getElement像 ftest.testElement. event){
};
function getX(a){
return a+1 || 'default';
}
return typeof b !== "undefined" ? b : 'default';
}
5. 條件判斷
// Conditions
answer = obj && xxx &&&
// 連續判斷
if(obj && obj.xx && obj.xx.xxx){
}
if(obj.xx ){
// do something
}
// 使用全等判斷
if(a === b){
// do something
}
/
// 是否支援
if(document.getElementById){
// ability detect
}
6. 三元運算子
// Ternary
check value1: value = (condition) ? value1 : value2;
function xx(){
if(condition){
return value1;
}
}
return (condition) ? value1 : value2;
}
// 格式化三元運算子
foo = predicate ? "one" :
predicate format
7. 插入迭代值
// Insert iteration
var name = value[i];
i++;
// 直接將迭代值插入
var name = value[i++];
〜/遠.D. .display = 'none'; // offline
// operation
el.style.display = 'block';
// 使用文件碎片操作更好 www.2cto.com
var fragment = document.create); // better
el.innerHTML = ''; // fast remove all children, but may leaks memory
el.innerHTML = 'xxx'; ove //, Node it!
//// document.getElementsByTagName('img'); // be careful! dynamic list
9. 事件代理
// 使用事件代理,在更外層的元素上監聽事件
document.getElementBylickum. = function(evt){
var evt = evt || window.event,
target = evt.target || evt.srcElement11 // do something
}
10. 命名空間
// An Object as a Namespace
var MYAPP = {};
MYAPP.dom.get = function(id){};
MYAPP.style.css = function(APPel, style){}? ('event');
11. 鍊式操作
// Chaining operation: return this
el.value = value;
return this;
}
var obj = new MYAPP.dom.Element('span');
obj.setText('hello')
.setStyle('color', 'red')
.setStyle('font', 'Verdana') 私有🀎作用域
// Function
(function(){
var _private = 'cant see me';
})();
(function($lick) $. (){ });
})(jQuery);
13. 配置物件
// Configure Object
function foo(id, conf, null , null){
bar', {
key1 : 1,
key2 : 2
14. 型別轉換
// Type Conversion
14. 型別轉換
// Type Conversion
+'010== ;
parseInt('010', 10) === 10;
10 + '' === '10';
+new Date;
15. 擴充原型
原型// 僅在需要向前相容時才使用,其他情況不建議擴充原型物件
Array.prototype.forEach = function(){
// only forward compatible
};
16. 循環最佳化
};
for(var i=0, j = document.getElementsByTagName('a').length; i0; i--){
// maybe faster
}
// 據說是最快的
whi(i -){
}
17. 盡量使用新特新
Array.forEach();
getElementsByClassName();
Array.forEach();
getElementsByClassName();
Array.forEach();
getElementsByClassName();
就用
// use
}else{
// your implementations
}
// your implementations
}
一次(){
if(condition1){
lazyDef = function(){ };
}else if(condition2){ . return lazyDef();
19. 私有函數與公用方法
var MYAPP = {};
MYAPP.dom = (function(){
var _setStyle = function(el, prop, value){);
return {
setStyle: _setStyle
};
// 當MYAPP.
})();
『
// 盡量使用,可以傳入多個參數,最後輸出拼接後的字串
console.log('xx','xx','...');
console.dir(someObj);
console.dirxml(someDom);
console.time('timer');
console.warn('xxx');
// 封裝可以保證不小心發佈出去也不會導致問題,但報錯時行號可能有問題
function msg(msg) {
console.log(msg); // wrong line number
}
}
}