我有一个JavaScript对象,如下所示:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

我如何循环遍历p的所有元素(p1、p2、p3…)并获取它们的键和值?


当前回答

单级缩进单组支架最高的浏览器兼容性hasOwnProperty安全

var p={“p1”:“value1”,“p2”:“value 2”,“p3”:“值3”};for(p中的var键)if(p.hasOwnProperty(键)){var值=p[key];console.log(键,值);}

其他回答

您必须使用for in循环

但在使用这种循环时要非常小心,因为这将沿着原型链循环所有财产。

因此,在循环中使用for时,请始终使用hasOwnProperty方法来确定迭代中的当前属性是否真的是要检查的对象的属性:

for (var prop in p) {
    if (!p.hasOwnProperty(prop)) {
        //The current property is not a direct property of p
        continue;
    }
    //Do your logic with the property here
}

我会这样做,而不是在每个for…中检查obj.hasOwnerProperty。。。在循环中。

var obj = {a : 1};
for(var key in obj){
    //obj.hasOwnProperty(key) is not needed.
    console.log(key);
}
//then check if anybody has messed the native object. Put this code at the end of the page.
for(var key in Object){
    throw new Error("Please don't extend the native object");
}

最接近python的enumerate函数的解决方案:

for key, value in enumerate(object):
    # Do something

是Object.entries()和for of循环的组合:

for(let [key, value] of Object.entries(object)) {
    // Do something
}

let对象={key1:“value1”,key2:“value2”,key3:“value3”,key4:“value4”,key5:“value5”};for(let[key,value]of Object.entries(Object)){console.log(`${key}->${value}`);}

变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};for(p中的var键){if(p.hasOwnProperty(键)){console.log(key+“=”+p[key]);}}<p>输出:<br>p1=值1<br>p2=值2<br>p3=值3</p>

变量p={“p1”:“值1”,“p2”:“值2”,“p3”:“值3”};var myMap=新地图(Object.entries(p));for(let[k,v]of myMap.entries()){console.log(`${k}:${v}`)}<h3>ECMAScript 2017年</h3><p><b>Object.entries()</b>使将<b>对象转换为映射</b>变得简单:</p>