遍历Javascript对象属性

时间:2010-12-06 11:53:16

标签: javascript

我想遍历JavaScript对象的属性

    var obj =
    {
        a: 'value1',
        b: 'value2',
        c: 'value3',
        d: 'value4'
    };

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

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

8 个答案:

答案 0 :(得分:86)

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

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

答案 1 :(得分:72)

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

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

Construct documentation.

此外,您可能想要使用hasOwnProperty检查属性是否属于该对象。可能会有人向原型添加属性,而这些属性也会由for ... in迭代。

答案 2 :(得分:20)

以下是使用ES5完成的方法 - Object.keys():

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

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

Mozilla的文档:link

答案 3 :(得分:2)

for(let i = 0; i < Object.entries(dog).length; i++){
  this.temp.push(Object.entries(dog)[i]);
}

答案 4 :(得分:2)

const obj = {
"abc":1, "def":2
}
for (let key in obj){
  console.log(key+":"+obj[key])
}

答案 5 :(得分:1)

如果您处于ES6友好环境中,您还可以尝试使用更接近原始尝试的for ... of循环。

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

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

let obj = {};

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

参考:MDN - for...of

答案 6 :(得分:1)

使用ecmascript2017: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

const object1 = {
  a: 'somestring',
  b: 42
};

for (let [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}

答案 7 :(得分:0)

var temp= {"6s","vikash","500"};
console.log([...temp]); //["6s","vikash","500"]