思路: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方法。