遍历Javascript对象的属性

我想遍历JavaScript对象的属性

var obj = { a: 'value1', b: 'value2', c: 'value3', d: 'value4' }; for (var prop in obj) { prop = 'xxx'; } 

但上面的代码不起作用。 你能帮我怎么做吗?

prop将引用属性名称,而不是其值。

 for (var prop in obj) { obj[prop] = 'xxx'; } 

构build文档。

你也可能想检查属性是否属于使用hasOwnProperty的对象。 有人可能会为原型添加属性,而这些属性也会被重复使用。

你应该检查属性属于对象而不是原型。

 for (var prop in obj) { if (obj.hasOwnProperty(prop)) { obj[prop] = 'xxx'; } } 

这是如何使用ES5 – Object.keys()完成的:

 Object.keys(obj).forEach(function(key, idx) { ... }); 

http://jsfiddle.net/magiccrafter/bvwenh5d/

Mozilla的文档: 链接

如果你在一个ES6友好的环境中,你也可以尝试使用更接近你的原始尝试的for …循环。

编辑:正如Caleb指出的, for..of是特定于Symbol.iterator属性的集合(例如,不是标准的JS对象)。

但是我在这里留下这个答案,以防其他人发现它在某些时候有用,明确指出for..of在这里不是一个好的解决scheme。

 let obj = {}; for (let prop of obj) { // This will throw an error prop = 'xxx'; } 

参考: MDN – 为…