條件語(yǔ)句(3個(gè)陷阱)
- 所有的條件語(yǔ)句都必須位于圓括號(hào)中。
if(var1 == var2){}
- 不要犯無(wú)意地使用賦值運(yùn)算符的錯(cuò)誤:把第二個(gè)參數(shù)的值賦給第一個(gè)參數(shù)。因?yàn)樗且粋(gè)邏輯問(wèn)題,它將一直返回true且不會(huì)報(bào)錯(cuò)。
if(var1 = var2){} // 返回true。把var2賦值給var1
- JavaScript是弱類型,除了在 switch語(yǔ)句 中。當(dāng)JavaScript在case比較時(shí),它是非弱類型。
var myVar = 5; if(myVar == '5'){ //返回true,因?yàn)镴avaScript是弱類型 alert("hi"); //這個(gè)alert將執(zhí)行,因?yàn)镴avaScript通常不在意數(shù)據(jù)類型 } switch(myVar){ case '5': alert("hi"); //這個(gè)alert將不會(huì)執(zhí)行,因?yàn)閿?shù)據(jù)類型不匹配 }
換行
當(dāng)心JavaScript中的硬換行。換行被解釋為表示行結(jié)束的分號(hào)。即使在字符串中,如果在引號(hào)中包括了一個(gè)硬換行,那么你會(huì)得到一個(gè)解析錯(cuò)誤(未結(jié)束的字符串)。
var bad = '<ul id="myId"> <li>some text</li> <li>more text</li> </ul>'; // 未結(jié)束的字符串錯(cuò)誤
var good = '<ul id="myId">' + ‘<li>some text</li>‘ + ‘<li>more text</li>‘ + ‘</ul>’; // 正確
前面討論過(guò)的換行被解釋為分號(hào)的規(guī)則并不適用于控制結(jié)構(gòu)這種情況:條件語(yǔ)句關(guān)閉圓括號(hào)后的換行并不是給其一個(gè)分號(hào)。
一直使用分號(hào)和圓括號(hào),那么你不會(huì)因換行而出錯(cuò),你的代碼易于閱讀,且除了那些不使用分號(hào)的怪異源碼外你會(huì)少一些顧慮:所以當(dāng)移動(dòng)代碼且最終導(dǎo)致兩個(gè)語(yǔ)句在一行時(shí),你無(wú)需擔(dān)心第一個(gè)語(yǔ)句是否正確結(jié)束。
多余的逗號(hào)
在任何JavaScript對(duì)象定義中,最后一個(gè)屬性決不能以一個(gè)逗號(hào)結(jié)尾。Firefox不會(huì)出錯(cuò),而IE會(huì)報(bào)語(yǔ)法錯(cuò)誤。
var theObj = { city : "Boston", state : "MA",//IE6和IE7中有“缺少標(biāo)識(shí)符、字符串或數(shù)字”的錯(cuò)誤,IE8 beta2修正了它 }
HTML id 沖突
JavaScript DOM綁定(JavaScript DOM bindings)允許通過(guò)HTML id索引。在JavaScript中函數(shù)和屬性共享同一個(gè)名字空間。所以,當(dāng)在HTML中的一個(gè)id和函數(shù)或?qū)傩杂邢嗤拿謺r(shí),你會(huì)得到難以跟蹤的邏輯錯(cuò)誤。然而這更多是一個(gè) CSS最佳實(shí)踐 的問(wèn)題,當(dāng)你不能解決你的JavaScript問(wèn)題時(shí),想起它是很重要的。
<ul> <li id="length">1</li> <li id="thisLength">2</li> <li id="thatLength">3</li> </ul> <script> var listitems = document.getElementsByTagName('li'); var liCount = listitems.length; //IE下返回的是<li id="length">1</li>這個(gè)節(jié)點(diǎn)而不是所有<li>的數(shù)量
var thisLength = document.getElementById('thisLength'); thatLength = document.getElementById('thatLength'); //IE下會(huì)出現(xiàn)“對(duì)象不支持此屬性和方法”的錯(cuò)誤,IE8 beta2下首次加載頁(yè)面會(huì)出錯(cuò),刷新頁(yè)面則不會(huì) //在IE中thisLength和thatLength直接表示以其為id值的DOM節(jié)點(diǎn), //所以賦值時(shí)會(huì)出錯(cuò),當(dāng)有var聲明時(shí),IE會(huì)把其當(dāng)著變量,這個(gè)時(shí)候就正常了。 </script>
如果你要標(biāo)記(X)HTML,絕不要使用JavaScript方法或?qū)傩悦鳛閕d的值。并且,當(dāng)你寫(xiě)JavaScript時(shí),避免使用 (X)HTML中的id值作為變量名。
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁(yè) JavaScript的陷阱 [1] 下一頁(yè) JavaScript的陷阱 [3]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|