分类: C/C++
2013-02-19 09:39:29
常见的编码陷阱
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
25
26
27
28 ...
29
不好的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)。