[英]how to loop through objects in js using for/in?
我讀到:“for ... in循環中的問題是它遍歷Prototype鏈中的屬性。當你使用for ... in循環遍歷一個對象時,你需要檢查屬性是否屬於對象。你可以用hasOwnProperty來做到這一點。“ 那么原型鏈中的屬性是什么,以及如何通過它們進行迭代?
我嘗試使用和不使用hasOwnProperty
運行代碼,但它給出了相同的結果
var myCar = {
color : "red" ,
type : "sedan" ,
price : "100,000" ,
model : "2020"
};
var prop ;
for (prop in myCar) {
if (myCar.hasOwnProperty(prop)){
console.log(prop + " : " + myCar[prop])
}
};
for (prop in myCar) {
console.log(prop + " : " + myCar[prop])
};
兩個代碼的結果是:顏色:紅色類型:轎車價格:100,000型號:2020
您可以向對象的原型添加屬性,這些屬性將被視為對象的屬性,以用於for..in
。 hasOwnProperty()方法確定此屬性是否是對象的直接屬性。
function Car() { this.color = 'red'; this.type = 'sedan'; this.price = '100,000'; this.model = '2020'; } Car.prototype.foo = 'bar'; const car = new Car(); console.log('Props'); for (let prop in car) { console.log(`${prop}: ${car[prop]}`); }; console.log('Own props'); for (let prop in car) { if (car.hasOwnProperty(prop)){ console.log(`${prop}: ${car[prop]}`); } };
下面修改后的代碼顯示了問題所在:
function Car(){
this.color = "red";
this.type = "sedan";
this.price = "100,000";
this.model = "2020";
}
Car.prototype.test = function() {};
let myCar = new Car();
var prop ;
for (prop in myCar) {
if (myCar.hasOwnProperty(prop)){
console.log(prop + " : " + myCar[prop])
}
};
for (prop in myCar) {
console.log(prop + " : " + myCar[prop])
};
輸出:
color : red
type : sedan
price : 100,000
model : 2020
color : red
type : sedan
price : 100,000
model : 2020
test : function() {}
在第二個循環的最后一次迭代中,顯示原型函數(或Car
類的方法),即使它不是屬性但屬於Car
。
我相信循環對象屬性的最佳方法是使用Object.keys
:
Object.keys(myCar).forEach(prop => {
console.log(prop + " : " + myCar[prop]);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.