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(),这些方法使用起来更简单,需要更少的编码并提供更好的错误处理。
添加回答
举报
