【JS】for in循環對象,hasOwnProperty()的作用


var obj = {
    name:"echolun",
    age:"24",
    sex:"male"
},
objName=[], //用來裝對象屬性名
objVal=[];  //用來裝對象屬性值
for(var i in obj){
    objName.push(i);
    objVal.push(obj[i]);
}
console.log(objName,objVal);

需要注意的是,for in循環對象會訪問原型鏈上所有對象屬性,看下面。

var obj = {
    name:"echolun",
    age:"24",
    sex:"male"
},
objName=[], //用來裝對象屬性名
objVal=[];  //用來裝對象屬性值
Object.prototype.game="lastgame";
for(var i in obj){
    objName.push(i);
    objVal.push(obj[i]);
}
console.log(objName,objVal);
}

這里同樣是循環對象obj,但是需要注意的是,原型鏈上我們額外添加的對象game也被循環出來。

那么我們只想循環對應的對象該怎么做呢,這里引入hasOwnProperty()方法,hasOwnProperty()函數用於指示一個對象自身(不包括原型鏈)是否具有指定名稱的屬性。如果有,返回true,否則返回false。

說簡單點,它能幫你指向你當前循環的對象,而過濾掉原型鏈上其它對象,因為在工作中我們很難保證其他人是否會修改原型鏈,這樣做會更為保險,那么修改代碼。

var obj = {
    name:"echolun",
    age:"24",
    sex:"male"
},
objName=[], //用來裝對象屬性名
objVal=[];  //用來裝對象屬性值
Object.prototype.game="lastgame";
for(var i in obj){
    if(obj.hasOwnProperty(i)) {
        objName.push(i);
        objVal.push(obj[i]);
    }
}
console.log(objName,objVal);
}

看吧,這下就過濾掉game了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM