常見的編碼陷阱
3.在for...Loops中使用hasOwnProperty()方法
JavaScript數組是沒有關聯的,可以把它當做哈希表,使用循環來遍歷對象屬性:
1 for(varpropinsomeObject){
2 alert(someObject[prop]);//alert'svalueofproperty
3 }
然而,存在的問題是for...in loop是在對象屬性鏈上遍歷每個枚舉類型的屬性,如果你只想
使用對象實際擁有的屬性,這可能有問題的。那怎麼解決呢?你可以使用hasOwnProperty()
方法。代碼如下:
4 for(varpropinsomeObject){
5 if(someObject.hasOwnProperty(prop)){
6 alert(someObject[prop]);//alert'svalueofproperty
7 }
8 }
4.比較布爾值
把布爾值作爲條件進行比較,其實這是在浪費電腦的計算時間。看下面這個例子吧:
9 if(foo==true){
10 //dosomethingfortrue
11 }else{
12 //dosomethingforfalse
13 }
其實foo==true這個比較完全是多餘的,因爲foo已經是布爾類型。直接這樣寫就行:
14 if(foo){
15 //dosomethingfortrue
16 }else{
17 //dosomethingforfalse
18 }
又或者這樣寫:
19 if(!foo){
20 //dosomethingiffooisfalse
21 }else{
22 //dosomethingiffooistrue
23 }
5.事件綁定
在JavaScript中,事件是個複雜的問題。事件冒泡(event bubbling)和委託正在取代內聯事件(inline onclick)操作(一些特殊的“初始頁”除外)。
假設你有一個圖片網格,需要啓動一個modal lightbox窗口。千萬不要採取下面的做法,示例採用的是jQuery,如果你使用相似的庫或者其他,冒泡機制也同樣適合傳統的JavaScript。
相關的HTML代碼:
24 <divid="grid-container">
25 <ahref="somep_w_picpath.jpg"><imgsrc="somep_w_picpath-thumb.jpg"></a>
26 <ahref="somep_w_picpath.jpg"><imgsrc="somep_w_picpath-thumb.jpg"></a>
27 <ahref="somep_w_picpath.jpg"><imgsrc="somep_w_picpath-thumb.jpg"></a>
28 ...
29 </div>
不好的JavaScript寫法:
30 $('a').on('click',function(){
31 callLightbox(this);
32 });
這段代碼假設調用lightbox,裏面傳遞一個anchor元素並且引用全屏圖片。與其綁定每個anchor元素還不如直接使用#grid-container元素。
33 $("#grid-container").on("click","a",function(event){
34 callLightbox(event.target);
35 });
在這段代碼中,this和event.target都表示anchor元素。同樣你也可以在任何父元素上使用。只要保證所定義的元素是事件目標就行(event's target)。