如何遍历或枚举JavaScript对象?

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

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

现在我想遍历所有p元素( p1p2p3 ...)并获取它们的键和值。 我怎样才能做到这一点?

如有必要,我可以修改JavaScript对象。 我的最终目标是循环访问一些关键值对,如果可能,我想避免使用eval


您可以使用其他人显示的for-in循环。 但是,您还必须确保所获得的密钥是对象的实际属性,而不是来自原型。

以下是摘录:

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

for (var key in p) {
    if (p.hasOwnProperty(key)) {
        console.log(key + " -> " + p[key]);
    }
}

在ECMAScript 5下,可以结合Object.keys()Array.prototype.forEach()

var obj = { first: "John", last: "Doe" };

Object.keys(obj).forEach(function(key) {
    console.log(key, obj[key]);
});

ES6增加for...of

for (const key of Object.keys(obj)) {
    console.log(key, obj[key]);
}

ES2017增加了Object.entries() ,避免了在原始对象中查找每个值:

Object.entries(obj).forEach(
    ([key, value]) => console.log(key, value)
);

Object.keys()Object.entries()以与for...in循环相同的顺序迭代属性,但忽略原型链。 只有对象自己的可枚举属性被迭代。

编辑:ES2016→ES6


你必须使用for-in循环

但使用这种循环时要非常小心,因为这会循环原型链中的所有属性

因此,在使用for-in循环时,请始终使用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
}
链接地址: http://www.djcxy.com/p/753.html

上一篇: How do I loop through or enumerate a JavaScript object?

下一篇: How do you set, clear, and toggle a single bit?