Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347115
  • 博文数量: 97
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 1800
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-24 11:51
文章分类
文章存档

2013年(57)

2012年(40)

我的朋友

分类: 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)。

阅读(1485) | 评论(0) | 转发(1) |
1

上一篇:常见的编码陷阱

下一篇:常见的编码陷阱3

给主人留下些什么吧!~~