思路:Object.keys方法只会遍历对象自身的属性而不会遍历原型链上的属性。
function iterate(obj) { //Object.keys方法只会遍历对象自身的属性而不会遍历原型链上的属性 let arr=Object.keys(obj) let res=[] for(let i in arr) res[i]=arr[i].concat(': ',obj[arr[i]]) return res }
扩展:for in方法既可以遍历对象自身属性,又可以遍历对象的原型链上的属性,但是可以使用hasOwnProperty方法来判断是否是对象自身的属性。
function iterate(obj) { let res=[] for(let i in obj) if(obj.hasOwnProperty(i)) res.push(i.concat(': ',obj[i])) return res }
总结:for of遍历数组是下标,for in遍历对象是键值,只不过数组的键值正好是下标。向数组中添加元素既可以使用arr[i],也可以使用push方法。