在JavaScript对象上循环的最安全方法

在JavaScript对象上循环的最安全方法,javascript,Javascript,我想创建一个对象来保存一组属性,比如 var o = {x: 20, y: 40, color: 'red'}; 在对象的整个生命周期中,可以向其添加更多属性,因此我希望有一种通用的方法来循环这些属性,以便在以后进行设置。我只知道Object.prototype是否被弄乱了 for(var prop in o) { ... } 将导致其属性也被循环。还有什么其他因素会导致这种情况发生,而像这样循环最安全的方法是什么?使用object.hasOwnProperty() 如果要迭代对象上的所有属

我想创建一个对象来保存一组属性,比如

var o = {x: 20, y: 40, color: 'red'};
在对象的整个生命周期中,可以向其添加更多属性,因此我希望有一种通用的方法来循环这些属性,以便在以后进行设置。我只知道
Object.prototype
是否被弄乱了

for(var prop in o) { ... }
将导致其属性也被循环。还有什么其他因素会导致这种情况发生,而像这样循环最安全的方法是什么?

使用object.hasOwnProperty()


如果要迭代对象上的所有属性,那么继承的属性是唯一需要处理的真正问题。可以用于确认属性直接存在于对象中,而不仅仅是继承的

Object.prototype.example=2;
var o={x:4,y:6};
用于(o中的var prop){
if(Object.prototype.hasOwnProperty.call(o,prop)){
控制台日志(o[prop]);
}

}
作为@Jeremy Banks建议的替代方法,该方法也只返回对象的“自有”属性名。因此,ES5解决方案:

var o = { x: 20, y: 40, color: 'red' };

Object.keys(o).forEach(function (prop) { /* ... */ });

看看[这篇文章][1],你在问题中几乎是这么说的。[1] :@Davis如果你关注George P的链接,请注意Bno的答案,因为它(而不是公认的答案)提到了
hasOwnProperty
技术,它使你避免了
Object.prototype
被弄乱的情况,并且被认为是一种最佳实践,至少被好的部分追随者认为是这样。
var o = { x: 20, y: 40, color: 'red' };

Object.keys(o).forEach(function (prop) { /* ... */ });