for...in...用来遍历数组或者对象的属性 当遍历数组时,计时器 i 为数组的索引值 var arr = ["admin","manager","db"] ;for(var i in arr){
for...in...用来遍历数组或者对象的属性
当遍历数组时,计时器 i 为数组的索引值
var arr = ["admin","manager","db"] ;for(var i in arr){ console.log(i); // 0 1 2}
当遍历对象时,计时器 i 为对象的属性
var person={ name: "Admin", age: 21, address:"shenzhen" }; for(var i in person){ console.log(i); //name age address}
但是在遍历对象时需要注意,如果遍历的对象有继承或者说遍历的对象是构造函数的实例等情况,就会连着原型对象中的属性和方法一同遍历出来
var Status = function(arg){ this.arg = arg;}Status.prototype.getState = function(){ return this.arg;}var obj = new Status('test string');obj.getState();//test stringobj.spk = 'spk';for(i in instance){ console.log(i);//arg spk getState}
但是原型对象中的属性并不是我们想要的,按照下面的代码处理即可
for(i in object){ if(object.hasOwenProperty(i)){ //... }}
还有一点需要注意的是,for...in循环中的循环计数器是字符串,而不是数字。它包含当前属性的名称或当前数组元素的索引。
在遍历过程中,也需要清楚,for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作(重要)