JavaScript for...in 循环的陷阱

转载 2012年03月27日 21:27:41

最近有好几次用到for...in循环的时候都遇到了错误,循环的索引总是会指向一些不应该被指向的元素。之前都是换用普通的for循环来修改。今天在网上搜索了一些关于for...in的博文,发现了问题的所在。转载如下:


原文地址:http://www.mangguo.org/javascript-for-in-loop-trap/

For…In 声明用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。

先定义一个构造函数:

[javascript] view plaincopy
  1. var Status = function(arg){  
  2.     this.arg = arg;  
  3. }  
  4. Status.prototype.getStatus = function(){  
  5.     return this.arg;  
  6. }  

接着实例化:

[javascript] view plaincopy
  1. var instance = new Status('a test string');  
  2. instance.getStatus();  
  3. instance.ooxx = 'ooxx';  

用 for…in 遍历属性:

[javascript] view plaincopy
  1. for(i in instance){  
  2.     console.log(i);  
  3. }  

看下运行结果:

arg

ooxx

getStatus

可见原型方法也被遍历出来的,但事实上往往并不想要。于是需要这么干:

[javascript] view plaincopy
  1. for(i in object){  
  2.     if(object.hasOwenProperty(i)){  
  3.         //...  
  4.     }  
  5. }  

这样就能把函数和原型属性方法过滤掉鸟~
参考:《JavaScript 语言精粹》第 120 页,饺子哥威武


学习心得:

在进一步的试验中,我发现for...in循环遍历的元素包括数组的元素以及对象的成员(也就是对象中this关键字后跟的属性和方法),以及通过prototype关键字添加给数组或者对象的属性和方法。也就是说,for...in循环中的索引项不仅仅是基本的数字索引,还会包含其他一些意料之外的索引项(对象的属性名、方法名,prototype添加的方法名等)。因此,在数组或者对象的成分比较复杂的情况下,使用普通的for循环将会更加安全。

JavaScript中for..in循环的陷阱

JavaScript中for..in循环的陷阱
  • dabing69221
  • dabing69221
  • 2013年11月12日 00:14
  • 2427

javascript中关键字in以及循环for...in的使用和注意事项

写这篇文章,是因为在学习prototypejs库中方法Object.extend()和Class.create(),看这篇指导[tutorial on classes and inheritance]...
  • aitangyong
  • aitangyong
  • 2015年10月13日 19:25
  • 1478

Javascript中的for in语句获取对象属性的顺序问题

下面创建一个对象,并为对象添加一些属性: var user = {}; if(!user['Jason'']) { user['Jason''] = []; } user['Jason'...
  • xuehaiwuya_1
  • xuehaiwuya_1
  • 2015年03月18日 15:30
  • 3657

JavaScript中for..in循环的陷阱

JavaScript中for..in循环的陷阱
  • dabing69221
  • dabing69221
  • 2013年11月12日 00:14
  • 2427

JavaScript中的for/in循环的例子

  • 2012年01月18日 14:11
  • 2KB
  • 下载

JavaScript中for..in循环陷阱

JavaScript中for..in循环陷阱 转自:http://blog.csdn.net/dabing69221/article/details/15493549 大家都知...
  • huyang218
  • huyang218
  • 2013年11月12日 15:30
  • 450

JavaScript中for..in循环陷阱介绍

for...in循环中的循环计数器是字符串,而不是数字它包含当前属性的名称或当前数组元素的索引,下面有个不错的示例大家可以参考 大家都知道在JavaScript中提供了两种方式迭代对象: (1)...
  • xspwz123
  • xspwz123
  • 2016年12月02日 13:14
  • 186

对javascript中的for in循环和for循环的深入讨论

for in循环是js中一个比较特殊循环的案例,当我们给一个对象添加新的属性的时候,这个属性就可以被枚举出来。但是有时候for in循环的执行效果可能和我们期待的不一样,尤其是在该对象上添加了原型属性...
  • z1547840014
  • z1547840014
  • 2013年08月03日 18:17
  • 775

JavaScript学习--Item16 for 循环和for...in 循环的那点事儿

大家都知道在JavaScript中提供了两种方式迭代对象: for 循环; for..in循环; 1、for循环不足: 在于每次循环的时候数组的长度都要去获取; 终止条件要明确; 在for循环中,...
  • z742182637
  • z742182637
  • 2016年05月30日 10:12
  • 570

javascript中的for in循环和for循环的使用

javascript for...in 语句 for...in 语句用于对数组或者对象的属性进行循环操作。 for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操...
  • zmzwll1314
  • zmzwll1314
  • 2016年03月04日 15:23
  • 1695
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript for...in 循环的陷阱
举报原因:
原因补充:

(最多只允许输入30个字)