在運用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