更新对象不显示新属性

时间:2020-12-30 07:58:55

标签: javascript

示例中的代码工作正常,但在我的代码中却没有

我正在尝试使用新属性更新对象

 const overrides = {paths:{"/":{}}}
 const aItems = [{endpoint:"/test"}]
 const mockOverrides = JSON.parse(JSON.stringify(overrides));

 aItems.forEach(({endpoint}) => {
    if (!mockOverrides.paths[endpoint]) {
      mockOverrides.paths[endpoint] = {};
    }
    console.log(mockOverrides); // result {paths:{"/":{}}} expected {paths:{"/":{}, "/test":{}}}
    console.log(mockOverrides.paths[endpoint]) // result is  {}  twice
})

如您所见,该属性未显示在输出中 但不知何故存在为什么会发生这种情况?

3 个答案:

答案 0 :(得分:0)

) 方法的末尾添加 foreach 后,它似乎工作正常:

 const overrides = {paths:{"/":{}}}
 const aItems = [{endpoint:"/test"}]
 const mockOverrides = JSON.parse(JSON.stringify(overrides));

 aItems.forEach(({endpoint}) => {
    if (!mockOverrides.paths[endpoint]) {
      mockOverrides.paths[endpoint] = {};
    }
    console.log(mockOverrides); // result {paths:{"/":{}}} expected {paths:{"/":{}, "/test":{}}}
    console.log(mockOverrides.paths[endpoint]) // result is  {}  twice
});

答案 1 :(得分:0)

是的。我写了,但它被删除了。你错过了 )。除此之外,代码很好。

答案 2 :(得分:0)

可能是因为新属性设置为 __proto__ of mockOverrides.paths

<块引用>

why console.log doesn't show values of properties added by PROTOTYPES in javascript when whole object is printed?

您可以通过在 chrome 控制台上运行以下代码来重现它(也可以从上面的引用中获得)

var  Person=function (name) {
  this.Fname=name;
  this.health=100;
};

var Mateen=new Person("Mateen");

console.log(Mateen);
// result: { Fname: 'Mateen', health: 100 }
Person.prototype.level=1;

console.log(Mateen);
// result: { Fname: 'Mateen', health: 100 }
console.log(Mateen.level);
// result: 1
相关问题