4 回答
TA贡献2080条经验 获得超4个赞
你必须使用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}
TA贡献1895条经验 获得超7个赞
如果我们不提及循环对象的替代方法,那么问题就不会完整。
如今,许多众所周知的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()
,这些方法使用起来更简单,需要更少的编码并提供更好的错误处理。
添加回答
举报