遍歷對象屬性
這篇博客的靈感來自於牛客網的一道題:屬性遍歷
題目描述:
找出對象 obj 不在原型鏈上的屬性(注意這題測試例子的冒號後面也有一個空格~)
1、返回數組,格式爲 key: value
2、結果數組不要求順序
1. for in
- for-in會漏掉不可枚舉屬性;
- for-in會遍歷原型鏈上的屬性,需要配合hasOwnProperty過濾
function iterate(obj) {
// hasOwnProperty
// 如果使用for in遍歷,很重要的一點是不能遍歷的自身屬性會被遺漏
var result = [];
for(var p in obj){
if(obj.hasOwnProperty(p)){
result.push(p + ": " + obj[p]);
}
}
return result;
}
2. Object.keys()
- 返回對象自身的可枚舉屬性
function iterate(obj) {
return Object.keys(obj);
return result.map(n => n + ": " + obj[n]);
}
3. Object.getOwnPropertyNames()
- 返回自身的所有屬性,含不可枚舉屬性
// 從題目要求來看,這纔是正解
function iterate(obj) {
// 如果使用for in遍歷和 Object.keys,很重要的一點是不能遍歷的自身屬性會被遺漏
var names = Object.getOwnPropertyNames(obj);
return names.map(function(n){return n + ": " + obj[n]});
}