4. 避免 ‘eval’
在Javascript中,eval()功能是一個(gè)在執(zhí)行期中執(zhí)行任意代碼的方法。在幾乎所有的情況下,eval 都不應(yīng)該被使用。如果它出現(xiàn)在你的頁面中,則表明你所做的有更好的方法。舉一個(gè)例子,eval 通常被不知道要使用方括號記法的程序員所使用。
原則上,”Eval is evil(Eval是魔鬼)”。別使用它,除非你是一個(gè)經(jīng)驗(yàn)豐富的開發(fā)者并且知道你的情況是個(gè)例外。
5. 正確地引用表單和表單元素
所有的 HTML 表單都應(yīng)該有一個(gè) name 屬性。對于 XHTML 文檔來說,name 屬性是不被要求的,但 Form 標(biāo)簽中應(yīng)有相應(yīng)有 id 屬性,并必須用 document.getElementById() 來引用。使用像 document.forms[0] 這樣的索引方法來引用表單,在幾乎所有情況下,是一個(gè)糟糕的做法。有些瀏覽器把文檔中使用 form 來命名的元素當(dāng)作一個(gè)可用的 form 屬性。這樣并不可靠,不應(yīng)該使用。
下面這個(gè)例子用使用方括號和正確的對象引用方法來展示如何防止錯(cuò)誤地引用一個(gè)表單的input:
正確引用表單 Input:
document.forms["formname"].elements["inputname"]
糟糕的做法:
document.formname.inputname
如果你要引用一個(gè)函數(shù)里的兩個(gè)表單元素,較好的做法是先引用這個(gè)form對象,并將其儲存在變量中。這樣避免了重復(fù)查詢以解決表單的引用:
var formElements = document.forms["mainForm"].elements; formElements["input1"].value="a"; formElements["input2"].value="b";
當(dāng)你使用 onChange 或者其他類似的事件處理方法,一個(gè)好的做法是總是通過一個(gè)引來把 input 元素本身引用到函數(shù)中來。所有 input 元素都帶有一個(gè)對包含其在內(nèi)的Form表單有一個(gè)引用:
<input type="text" name="address" onChange="validate(this)">
function validate(input_obj) { // 引用包含這個(gè)元素的form var theform = input_obj.form; // 現(xiàn)在你可以不需要使用硬代碼來引用表單自身 if (theform.elements["city"].value=="") { alert("Error"); } }
通過對表單元素的引用來訪問表單的屬性,你可以寫一個(gè)不包含硬代碼的函數(shù)來引用這個(gè)頁面中任何一個(gè)有特定名的表單。這是一個(gè)非常好的做法,因?yàn)楹瘮?shù)變得可重用。
避免 ‘with’
Javascript 中的 with 聲明在一個(gè)作用域的前端插入一個(gè)對象,所以任何屬性/變量的引用將會倚著對象被首先解決。這通常被用作一個(gè)避免重復(fù)引用的快捷方法:
使用 with 的例子:
with (document.forms["mainForm"].elements) { input1.value = "junk"; input2.value = "junk"; }
但問題在于程序員并沒有方法來驗(yàn)證 input1 或 input2 實(shí)際上已經(jīng)被當(dāng)作 Form 元素?cái)?shù)組的屬性來解決。它首先以為這些名來檢測屬性,如果找不到,它將會繼續(xù)(向下)檢測這個(gè)作用域。最后,它在全局對象中嘗試把input1 和 input2 作為一個(gè)全局對象來對待,而這以一個(gè)錯(cuò)誤作為結(jié)尾。
變通的方法是:創(chuàng)建一個(gè)引用來減少引用的對象,并使用它來解決這些引用。
使用一個(gè)引用:
var elements = document.forms["mainForm"].elements; elements.input1.value = "junk"; elements.input2.value = "junk";
出處:幸福收藏夾
責(zé)任編輯:bluehearts
上一頁 14條最佳JS代碼編寫技巧 [2] 下一頁 14條最佳JS代碼編寫技巧 [4]
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|