for in

327 阅读1分钟

for in在js中的作用主要是用来遍历数组或者对象。

数组遍历:

可以看到for... in 遍历数组的时候,key值为数组下标,通过数组下标,可以获取数组的每一项的值

数组循环一般不使用for in

var  arr=[11,22,33,44];
for(arrKey in  arr) {
    console.log(arrKey+":"+arr[arrKey])
}

执行结果:
0:11
1:22
2:33
3:44

对象遍历:

for... in遍历对象的时候,key值为对象的键值,通过对象的键值可以获取对象的value值

for in可以遍历所有自定义属性

var obj={name:"sunshine",age:22};
for(objKey in obj) {
    console.log("对象遍历:");
    console.log(objKey+":"+obj[objKey])
}

执行结果:
name:sunshine
age:22

需要注意的是。for..in遍历对象的时候,输出的值不一定按照对象定义的顺序:

var b = {3:1,42:2,11:3}
for( var key in b ){
    console.log( b[key] )
}
返回结果:1 3 2

原型上已经有的属性方法不会被遍历,但是原型上自定义的属性方法会被遍历:

Object.prototype.test = "I am test"
var b = {"name":"txj"}
for( var key in b ){
    console.log(key + " : "+ b[key])
}

返回结果:
name : txj
test : I am test

在实例中定义原型中已有的方法,浏览器for in 情况不一致:

在现代浏览器中可以遍历出重新定义的原型上的方法,但是在低版本浏览器却不行

var b = {"name":"txj"}
b.toString = function(){ alert("I am toString") }
for( var key in b ){
    alert(key + " : "+ b[key])
}

因为for in会遍历原型上自定义的属性方法,我们可以借助对象的hasOwnProperty()方法来只遍历对象自身定义的属性和方法。

Object.prototype.myClone = function() {}
var obj = {
    name: 'jack',
    age: 33
}
// name, age, clone
for (var key in obj) {
    if(obj.hasOwnProperty(key)){
        console.log(key+":"+obj[key]);
    }
}