【问题标题】:Object changes even though console.log is before the line that would make the change即使console.log在进行更改的行之前,对象也会更改
【发布时间】:2020-07-09 07:34:31
【问题描述】:

当我运行下面的 JS 时,控制台输出对象 1,键“course”为“JS4”,而不是原来的 JS2,即使 console.log 写在更改的行之前会发生。如果我在courses[1].course="JS4"; 之后写另一个console.log(courses),我希望这些更改只会记录在控制台中

const courses = [
  { teacher: "X", course: "JS" },
  { teacher: "X2", course: "JS2" }
];

courses.push({ teacher: "X3", course: "JS3" });
console.log(courses);

courses[1].course = "JS4";

【问题讨论】:

  • 无法重现您的错误,请在答案中查看我的 sn-p

标签: javascript arrays javascript-objects


【解决方案1】:

代码没有问题。您可能正在 Google Chrome 控制台内部进行检查,该控制台始终显示任何变量的更新值。

因此,如果console.log 语句之后发生更改,您将看到更新后的值。

【讨论】:

    【解决方案2】:

    代码没有问题,它的浏览器行为。要在开发者控制台(Chrome)中查看响应,您可以使用 JSON.stringify:

    console.log(JSON.parse(JSON.stringify(c)))
    

    我认为以下 sn-p 将解决您的问题:

    const courses = [
      { teacher: "X", course: "JS" },
      { teacher: "X2", course: "JS2" }
    ];
    
    courses.push({ teacher: "X3", course: "JS3" });
    console.log(JSON.stringify(courses)); // [{"teacher":"X","course":"JS"},{"teacher":"X2","course":"JS2"},{"teacher":"X3","course":"JS3"}]
    
    courses[1].course = "JS4";
    console.log(JSON.stringify(courses)); // [{"teacher":"X","course":"JS"},{"teacher":"X2","course":"JS4"},{"teacher":"X3","course":"JS3"}]
    

    请查看在开发者工具中执行的代码截图:

    Code in developer tool

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 2023-01-13
      • 2021-03-03
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多