我們使用習(xí)慣用法可以使我們的意圖更加的清晰和簡(jiǎn)潔。
使用==時(shí),當(dāng)心強(qiáng)制轉(zhuǎn)換
考慮下面函數(shù):
function gw(f) { if (d.w.sv.checked == true) { zv = 'on'; } else { zv = 'off'; } procframe.location.replace(" escape(f.p.value) + "&sv=" + zv); return false; }
==運(yùn)算符不應(yīng)該被用著和true比較值,因?yàn)樗獔?zhí)行強(qiáng)制轉(zhuǎn)換。如果我們想確定d.w.sv.checked是否是布爾值 true,我們必須用===運(yùn)算符。如果我們僅在意一個(gè)值是真實(shí)存在的不是假的,最好不要用相等運(yùn)算符。
例如,由于強(qiáng)制轉(zhuǎn)換:1 == true是真,1 === true是假。==運(yùn)算符隱藏了類型錯(cuò)誤。
使用?:運(yùn)算符選擇兩值之一
if語(yǔ)句通常被用來(lái)從兩個(gè)值中選擇一個(gè)。這應(yīng)該是三元操作符?:最適合的。
zv = d.w.sv.checked ? 'on' : 'off';
絕不使用隱含的全局變量
變量zv不是作為一個(gè)var或函數(shù)參數(shù)來(lái)聲明的,所以它是一個(gè)隱式的全局變量。如果這個(gè)頁(yè)面的另一個(gè)函數(shù)使用了同樣名字的全局變量,則可能得到一個(gè)失敗的結(jié)果。這樣的臭蟲(bug)是非常難以發(fā)現(xiàn),卻很容易避免。這個(gè)例子中,我們既可以聲明zv為一個(gè)var,也可以發(fā)現(xiàn)它僅僅被使用過(guò)一次而整個(gè)去掉它。
function gw(f) { procframe.location.replace(" escape(f.p.value) + "&sv=" + d.w.sv.checked ? 'on' : 'off'); return false; }
絕不使用?:運(yùn)算符選擇兩種行為之一
我們常質(zhì)疑那些返回一個(gè)常量的函數(shù),但這有時(shí)是在瀏覽器環(huán)境下所必需的。
下面我們看一個(gè)不正確使用?:運(yùn)算符的例子。它常被用于在兩個(gè)任務(wù)間選擇。
function u(o, z) { var em = o.id.substring(1); var p = d.getElementById('e' + em); if (p) { (z == 0) ? p.style.backgroundColor = '#fff' : p.style.backgroundColor = '#989898'; } p = d.getElementById('e' + (em - 1)); if (p) { (z == 0) ? p.style.backgroundColor = '#fff' : p.style.backgroundColor = '#989898'; } }
對(duì)Z的判斷是模糊不清的。Z正好等于0時(shí)我們選擇#fff顏色,那么,Z不等于時(shí)?如上所述似乎指明的是前者,但它實(shí)際上是后者。在這個(gè)例子中幸運(yùn)的是,我們大概想要的就是后者,所以它不是技術(shù)上錯(cuò)誤(這次)。但是在文體上只糟糕的。
我們可以用if代替?:,但碰巧的是這些值對(duì)應(yīng)的是同一個(gè)左值(lvalue),所以我們無(wú)需if就可以改正這個(gè)錯(cuò)誤。
function u(o, z) { var em = o.id.substring(1), p = d.getElementById('e' + em); if (p) { p.style.backgroundColor = z ? '#fff' : '#989898'; } p = d.getElementById('e' + (em - 1)); if (p) { p.style.backgroundColor = z ? '#fff' : '#989898'; } }
出處:隨網(wǎng)之舞
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) Javascript風(fēng)格要素 [2]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|