若是說代碼是可維護的,它須要遵循如下特色javascript
可讀性的另外一方面是註釋,下面內容須要進行註釋php
命名規則html
三種表示變量數據類型的方式java
初始化算法
//經過初始化指定變量類型 var found = false; //布爾型 var count = -1; //數字 var name = ""; //字符串 var person = null; //對象
使用匈牙利標記法編程
//用於指定數據類型的匈牙利標記法 var bFound; //布爾型 var iCount; //整數 var sName; //字符串 var oPerson; //對象
使用類型註釋數組
//用於指定類型的類型註釋 var found /*:Boolean*/ = false; var count /*:int*/ = 10; var name /*:String*/ = "Nicholas"; var person /*:Object*/ = null
幾條規則瀏覽器
//兩個全局量——避免!! var name = "Nicholas"; function sayName(){ alert(name); } //一個全局量——推薦 var MyApplication = { name: "Nicholas", sayName: function(){ alert(this.name); } }
function sortArray(values){ if (values != null){ //避免! values.sort(comparator); } } function sortArray(values){ if (values instanceof Array){ // 推薦 values.sort(comparator); } }
若是看到了與null比較的代碼,嘗試使用如下技術替換安全
var Constants = { INVALID_VALUE_MSG: "Invalid value!", INVALID_VALUE_URL: "/errors/invalid.php" }; function validate(value){ if (!value){ alert(Constants.INVALID_VALUE_MSG); location.href = Constants.INVALID_VALUE_URL; } }
function updateUI(){ var imgs = document.getElementsByTagName("img"); for (var i=0, len=imgs.length; i < len; i++){ imgs[i].title = document.title + " image " + i; } var msg = document.getElementById("msg"); msg.innerHTML = "Update complete."; } //改進 function updateUI(){ var doc = document; var imgs = doc.getElementsByTagName("img"); for (var i=0, len=imgs.length; i < len; i++){ imgs[i].title = doc.title + " image " + i; } var msg = doc.getElementById("msg"); msg.innerHTML = "Update complete."; }
function updateBody(){ with(document.body){ alert(tagName); innerHTML = "Hello world!"; } } //改進 function updateBody(){ var body = document.body alert(body.tagName); body.innerHTML = "Hello world!"; }
//credit: Speed Up Your Site (New Riders, 2003) var iterations = Math.floor(values.length / 8); var leftover = values.length % 8; var i = 0; if (leftover > 0){ do { process(values[i++]); } while (--leftover > 0); } do { process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); process(values[i++]); } while (--iterations > 0);
//某些代碼求值——避免!! eval("alert('Hello world!')"); //建立新函數——避免!! var sayHi = new Function("alert('Hello world!')"); //設置超時——避免!! setTimeout("alert('Hello world!')", 500); //已修正 alert('Hello world!'); //建立新函數——已修正 var sayHi = function(){ alert('Hello world!'); }; //設置一個超時——已修正 setTimeout(function(){ alert('Hello world!'); }, 500);
//4 個語句 —— 很浪費 var count = 5; var color = "blue"; var values = [1,2,3]; var now = new Date() //改進 //一個語句 var count = 5, color = "blue", values = [1,2,3], now = new Date()
var name = values[i]; i++; //改進 var name = values[i++];
//用 4 個語句建立和初始化數組——浪費 var values = new Array(); values[0] = 123; values[1] = 456; values[2] = 789; //用 4 個語句建立和初始化對象——浪費 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.sayName = function(){ alert(this.name); }; //改進 //只用一條語句建立和初始化數組 var values = [123, 456, 789]; //只用一條語句建立和初始化對象 var person = { name : "Nicholas", age : 29, sayName : function(){ alert(this.name); } };
var list = document.getElementById("myList"), fragment = document.createDocumentFragment(), item, i; for (i=0; i < 10; i++) { item = document.createElement("li"); fragment.appendChild(item); item.appendChild(document.createTextNode("Item " + i)); } list.appendChild(fragment);
var list = document.getElementById("myList"), html = "", i; for (i=0; i < 10; i++) { html += "<li>Item " + i + "</li>"; } list.innerHTML = html;
var images = document.getElementsByTagName("img"), image, i, len; for (i=0, len=images.length; i < len; i++){ image = images[i]; //處理 }
寫的代碼不該該原封不動地放入瀏覽器中服務器
JSLint能夠查找JavaScript代碼中語法錯誤以及常見的編碼錯誤,能夠發掘潛在問題
對於 Apache Web服務器,有兩個模塊能夠進行 HTTP壓縮: mod_gzip (Apache1.3.x)和 mod_deflate(Apache 2.0.x)。對於 mod_gzip ,能夠給 httpd.conf 文件或者是 .htacces s文件添加如下代碼啓用對JavaScript的自動壓縮:
告訴 mod_zip 要包含任何以.js 結尾的文件 mod_gzip_item_include file \.js$