遍历Javascript对象属性

Roc*_*ngh 50 javascript

我想遍历JavaScript对象的属性

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

    for (var prop in obj) {
        prop = 'xxx';
    }
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*nes 89

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

for (var prop in obj) {
    if (obj.hasOwnProperty(prop)) {
        obj[prop] = 'xxx';
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么我还要检查"hasOwnProperty"?"obj中的道具"可能出现什么问题? (2认同)
  • 因为它还会从原型链中返回_inherited_ 属性。因此,您需要检查该属性是否来自当前对象。您可以在此处进一步阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Iterating_over_own_properties_only (2认同)

Ali*_*aru 73

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

for (var prop in obj) {
    obj[prop] = 'xxx';
}
Run Code Online (Sandbox Code Playgroud)

构建文档.

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


mag*_*ter 20

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

Object.keys(obj).forEach(function(key, idx) {
   ...
}); 
Run Code Online (Sandbox Code Playgroud)

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

Mozilla的文档:链接

  • 我更喜欢这种方法,因为它只遍历对象“拥有”的属性……例如不需要`hasOwnProperty` 条件。现代 JS 万岁! (2认同)

Sne*_*n27 5

使用 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}`);
}
Run Code Online (Sandbox Code Playgroud)