如何循环或枚举JavaScript对象?

如何循环或枚举JavaScript对象?

我有一个像以下JavaScript对象:

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

现在我想通过所有回路p元素(p1p2p3...),并得到他们的键和值。我怎样才能做到这一点?

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


一只甜甜圈
浏览 507回答 4
4回答

犯罪嫌疑人X

你必须使用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}

人到中年有点甜

如果我们不提及循环对象的替代方法,那么问题就不会完整。如今,许多众所周知的JavaScript库提供了自己的迭代集合的方法,即在数组,对象和类似数组的对象上。这些方法使用方便,并且与任何浏览器完全兼容。如果您使用jQuery,您可以使用jQuery.each()方法。它可用于无缝迭代对象和数组:$.each(obj, function(key, value) {     console.log(key, value);});在Underscore.js中,你可以找到方法_.each(),它迭代一个元素列表,然后依次产生一个提供的函数(注意iteratee函数中参数的顺序!):_.each(obj, function(value, key) {     console.log(key, value);});Lo-Dash提供了几种迭代对象属性的方法。Basic _.forEach()(或它的别名_.each())对于循环遍历对象和数组很有用,但是(!)具有length属性的对象被视为数组,并且为了避免这种行为,建议使用_.forIn()和_.forOwn()方法(这些也有value参数首先):_.forIn(obj, function(value, key) {     console.log(key, value);});_.forIn()迭代对象的自有和继承的可枚举属性,而_.forOwn()只迭代对象的自己的属性(基本上检查hasOwnProperty函数)。对于简单对象和对象文字,这些方法中的任何一种都可以正常工作。通常,所有描述的方法与任何提供的对象具有相同的行为。除了使用本机for..in循环通常会比任何抽象更快,例如jQuery.each(),这些方法使用起来更简单,需要更少的编码并提供更好的错误处理。
打开App,查看更多内容
随时随地看视频慕课网APP