for in 輪迴遍歷對象時須要注重的事項

在運用for in輪迴時,返回的是一切可以經由過程對象接見的、可羅列的屬性,个中既包括存在於實例中的屬性,也包括存在於原型中的屬性。

(1)沒有在Object.prototype中增加屬性

var obj={"name":"wjy","age":26,"sex":"female"};//定義一個object對象  
var keys=[];//定義一個數組用來接收key  
var values=[];//定義一個數組用來接收value  
  for(var key in obj){  
    keys.push(key);  
    values.push(obj[key]);//獲得value   
    console.log(eval("obj."+key));//輪迴內一一打印value值  
  }  
console.log(obj.name);//wjy  
console.log("keys is :"+keys+" and values is :"+values);  
//keys is : name,age,sex and values is : wjy,26,female   

(2)在Object.prototype中增加屬性
運用 for in 輪迴遍歷對象的屬性時,原型鏈上的一切屬性都將被接見。比方我們給Object.prototype增加一個bar屬性,那末在for in 輪迴的時刻,就會把這屬性給輪迴出來:

Object.prototype.bar = 10;// 修正Object.prototype  
var obj={"name":"wjy","age":26,"sex":"female"};//定義一個object對象    
var keys=[];//定義一個數組用來接收key    
var values=[];//定義一個數組用來接收value    
  for(var key in obj){    
    keys.push(key);    
    values.push(obj[key]);//獲得value      
  }    
console.log("keys is :"+keys+" and values is :"+values);   
//keys is : name,age,sex,bar and values is : wjy,26,female,10   

(3)防止原型對象擴大對輪迴對象時帶來的滋擾
引薦老是運用 hasOwnProperty 要領,這將會防止原型對象擴大帶來的滋擾:

function allpro(obj){  
    var keys=[];   
    var values=[];    
    for(var key in obj){   
        //只遍歷對象本身的屬性,而不包括繼續於原型鏈上的屬性。  
        if (obj.hasOwnProperty(key) === true){  
            keys.push(key);    
            values.push(obj[key]);   
        }                 
    }  
    console.log("keys is :"+keys+" and values is :"+values);    
}  
Object.prototype.bar = 1;// 修正Object.prototype  
var o={"name":"wjy","age":26,"sex":"female"};//定義一個object對象   
allpro(o);  
//keys is : name,age,sex and values is: wjy,26,female  
    原文作者:CodeMan
    原文地址: https://segmentfault.com/a/1190000014342041
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞