以下內容摘自Web前端開發最佳實踐--黨建著
養成良好的編碼習慣,提高代碼的可維護性
-
避免定義全域變數或函式
定義全域的變數和函式,會影響代碼的可維護性,如果在頁面中運行的javascript 代碼是在相同的作用域里面,那就可能代碼之間存在互相影響的可能性,
有很多種手段可以解決因為定義了全域變數而導致代碼"污染"的問題,
1.最簡單的方法是把變數和方法封裝在一個變數物件上,使其變成物件的屬性,例如:
var myTes={
length:0'
init:function(){...},
action:function(){...}
}
2.另一種改進的方案是把全域的變數包含在一個區域作用域中,然后在這個作用域中完成這些變數的定義以及變數使用的邏輯,例如,可以通過定義一個匿名函式實作:
(function()
{
var length=0;
function init(){...}
function action(){...}
})()
所有的邏輯都包含在了這個立即執行的匿名函式中,形成了一個獨立的模塊,最大限度的防止了代碼之間的"污染",當然,在實際的業務中,模塊之間會有互動,這時可使用return陳述句,回傳需要公開的介面,
var myDocument=(function()
{
var length=0;
function init(){...}
function action(){...}
return {
init:init
}
})();
外部代碼訪問init()方法時,就可以呼叫myDocument.init了,此代碼巧妙地做到了代碼邏輯的封裝,又公開了外部需要訪問的介面,是模塊化最佳實踐之一,
3.確保在定義變數時使用var關鍵字,如果定義變數時沒有使用var,瀏覽器決議時并不會報錯,而是自動把這一變數決議為全域變數,比如如下的代碼就定義了一個全域的變數length:
(function()
{
length=0;
function init(){...}
function action(){...}
}
)()
-
使用簡化的編碼方式
//物件創建
var persion=new Object();
person.age=23;
person.name='daniel';
改為:
var person={age:23,name:'daniel'};
//陣列創建
var list=new Array();
list[0]=12,
list[1]=20;
list[2]=24;
改為:
var list=[12,20,24];
-
使用比較運算子=== 而不是 ==
-
避免使用with陳述句
在javascript中,with陳述句可用來快捷地訪問物件地屬性,with陳述句地格式如下:
with(object)
{
.......
}
with陳述句地原理是:javascirpt決議和運行時,會給with陳述句單獨建立一個作用域,而和with陳述句結合的屬性則成為了此作用域的區域變數,因此可直接訪問,例如:
with(Math)
{
a=PI*r*r;
}
以下代碼等同于以上代碼
a=Math.PI*r*r;
使用with陳述句確實簡化了代碼,但使用with陳述句可能也會帶了一些bug已經兼容問題
- 使得代碼難以閱讀,對于with陳述句內部的變數參考,只有在運行時才能知道變數屬于哪個物件,例如:
function f(x,o)
{
with(o)
{
print(x);
}
}
以上with陳述句中的x,可能來自于引數x,也可能來自o引數上的x屬性,
2.with陳述句的設計方面也有缺陷,在with陳述句內部修改和with陳述句結合的物件后,并不能同步到with內部,即不能保證物件資料的一致性,例如:
var group ={
value:{
node:1
}
};
with(group.value)
{
group.value=https://www.cnblogs.com/cby-love/p/{
node:2
};
//顯示錯誤:1
console.log(node);
}
//顯示正確:2
console.log(group.value.node);
-
避免使用eval
- 有時使用eval函式會讓代碼難以閱讀,影響代碼的可維護性,如:
如果通過變數來獲取某個物件的屬性值,可以使用eval('obj.'+key);
其實可以使用下標法取得屬性值:obj[key]
2. eval的使用也存在安全性問題,因為它會執行任意傳入的代碼,而傳入的代碼有可能是未知的或者來自不受控制的源,
.使用更嚴格的編碼格式
設立嚴格模式的目的主要是為了消除javascript語法上不合理的地方,從而提高代碼安全性、編譯效率、增加運行速度且更好地兼容javacscript未來的新版本,
嚴格模式主要是針對如下不合理的地方做了改進,包括:禁用with關鍵字、防止意外的全域變數、函式中的this 不再默認指向全域、防止函式引數重名、防止物件 屬性重名、更安全的使用eval等,
啟用嚴格模式很簡單,主要在代碼中添加如下代碼即可:
"use strict";
使用嚴格模式時需要遵循的幾條最佳實踐,
- 不要在全域中啟用嚴格模式
為了兼容一些老代碼,最好不要全域啟用嚴格模式,如果想給大量的代碼設定嚴格模式,則可以把代碼包含在一個立即執行的函式中,并在函式開頭啟用嚴格模式,示例代碼如下:
(function(){
"use strict"
// ..........
})();
2. 如果要更嚴格地撰寫javascript代碼,可以使用javascript代碼檢查工具,目前最流行的檢查工具主要是JSLint和JSHint,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/160793.html
標籤:JavaScript
上一篇:JS---案例:開機影片
