2017-08-16 40 views
0

我們使用for in當通過一個對象來迭代如下我需要檢查hasOwnProperty使用通過對象迭代的,在

var object = { "a":"foo", "b":"bar"} 

for (var key in object) { 
    var element = object[key]; 
} 

我已經看到我的學長建議我去檢查,如果屬性之前確實存在訪問它。爲什麼?因爲如果for in是給我一把鑰匙就意味着它的存在......

爲什麼我應該寫for in象下面這樣:

for (var key in object) { 
    if (object.hasOwnProperty(key)) { 
     var element = object[key];    
    } 
} 
+1

[for ... in循環(JavaScript)中的繼承非可枚舉屬性](https://stackoverflow.com/questions/13714938/inherited-non-enumerable-properties-in-for-in-循環的JavaScript) – Hitmands

回答

5

如果希望對象只有屬性,你需要使用hasOwnProperty功能。沒有這個檢查,你也會得到那個對象原型的屬性。

參見示例

var object = { "a":"foo", "b":"bar"}; 
 

 
for (var key in object) { 
 
    console.log(key); 
 
} 
 

 
Object.setPrototypeOf(object,{ "c" : "gar"}); 
 

 
console.log('After setting prototype'); 
 

 
for (var key in object) { 
 
    console.log(key); 
 
} 
 

 
console.log('Using hasOwnProperty'); 
 

 
for (var key in object) { 
 
    if(object.hasOwnProperty(key)){ 
 
     console.log(key); 
 
    } 
 
}

看,與hasOwnProperty檢查後,我們傳遞key這與原型(c)。