JavaScript for...in 循环的陷阱
2012-03-27 21:27
513 查看
最近有好几次用到for...in循环的时候都遇到了错误,循环的索引总是会指向一些不应该被指向的元素。之前都是换用普通的for循环来修改。今天在网上搜索了一些关于for...in的博文,发现了问题的所在。转载如下:
原文地址:http://www.mangguo.org/javascript-for-in-loop-trap/
For…In 声明用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
先定义一个构造函数:
[javascript] view
plaincopy
var Status = function(arg){
this.arg = arg;
}
Status.prototype.getStatus = function(){
return this.arg;
}
接着实例化:
[javascript] view
plaincopy
var instance = new Status('a test string');
instance.getStatus();
instance.ooxx = 'ooxx';
用 for…in 遍历属性:
[javascript] view
plaincopy
for(i in instance){
console.log(i);
}
看下运行结果:
arg
ooxx
getStatus
可见原型方法也被遍历出来的,但事实上往往并不想要。于是需要这么干:
[javascript] view
plaincopy
for(i in object){
if(object.hasOwenProperty(i)){
//...
}
}
这样就能把函数和原型属性方法过滤掉鸟~
参考:《JavaScript 语言精粹》第 120 页,饺子哥威武!
学习心得:
在进一步的试验中,我发现for...in循环遍历的元素包括数组的元素以及对象的成员(也就是对象中this关键字后跟的属性和方法),以及通过prototype关键字添加给数组或者对象的属性和方法。也就是说,for...in循环中的索引项不仅仅是基本的数字索引,还会包含其他一些意料之外的索引项(对象的属性名、方法名,prototype添加的方法名等)。因此,在数组或者对象的成分比较复杂的情况下,使用普通的for循环将会更加安全。
原文地址:http://www.mangguo.org/javascript-for-in-loop-trap/
For…In 声明用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
先定义一个构造函数:
[javascript] view
plaincopy
var Status = function(arg){
this.arg = arg;
}
Status.prototype.getStatus = function(){
return this.arg;
}
接着实例化:
[javascript] view
plaincopy
var instance = new Status('a test string');
instance.getStatus();
instance.ooxx = 'ooxx';
用 for…in 遍历属性:
[javascript] view
plaincopy
for(i in instance){
console.log(i);
}
看下运行结果:
arg
ooxx
getStatus
可见原型方法也被遍历出来的,但事实上往往并不想要。于是需要这么干:
[javascript] view
plaincopy
for(i in object){
if(object.hasOwenProperty(i)){
//...
}
}
这样就能把函数和原型属性方法过滤掉鸟~
参考:《JavaScript 语言精粹》第 120 页,饺子哥威武!
学习心得:
在进一步的试验中,我发现for...in循环遍历的元素包括数组的元素以及对象的成员(也就是对象中this关键字后跟的属性和方法),以及通过prototype关键字添加给数组或者对象的属性和方法。也就是说,for...in循环中的索引项不仅仅是基本的数字索引,还会包含其他一些意料之外的索引项(对象的属性名、方法名,prototype添加的方法名等)。因此,在数组或者对象的成分比较复杂的情况下,使用普通的for循环将会更加安全。
相关文章推荐
- JavaScript for…in 循环的陷阱
- JavaScript中for..in循环的陷阱
- JavaScript for...in 循环的陷阱
- JavaScript中for..in循环陷阱介绍
- JavaScript中for..in循环陷阱
- JavaScript中for..in循环陷阱介绍
- JavaScript中for..in循环陷阱介绍
- JavaScript for...in循环
- JavaScript中的for in 循环
- javascript中for/in循环及使用技巧
- Javascript 中的for…in…循环
- javascript中关键字in以及循环for...in的使用和注意事项
- javaScript 中的for...in循环
- javascript之对象访问语句(for...in循环,with语句)
- JavaScript里的循环方法:forEach,for-in,for-of
- JavaScript里的循环方法之forEach,for...in,for...of
- javascript for in 循环
- javascript之for-in循环(for-in Loops)
- JavaScript探秘:for-in循环(for-in Loops)