Объект изменяется, даже если console.log находится перед строкой, которая внесет изменение - PullRequest
0 голосов
/ 28 марта 2020

Когда я запускаю фрагмент JS ниже, консоль выводит объект 1 с ключом "course", являющимся "JS4", а не JS2, как это было изначально, хотя console.log записывается перед строкой, где изменение произойдет. Я ожидаю, что изменения будут зарегистрированы только в консоли, если бы я написал еще один console.log(courses) после courses[1].course="JS4";

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

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

courses[1].course = "JS4";

Ответы [ 2 ]

1 голос
/ 28 марта 2020

В коде нет ничего плохого. Вы, вероятно, проверяете внутри консоли Google Chrome, которая всегда показывает обновленное значение любой переменной.

Так что если после оператора console.log произойдет изменение, вы увидите обновленное значение.

0 голосов
/ 28 марта 2020

Нет ничего плохого в коде, его поведении в браузерах. Чтобы увидеть ответ даже в консоли разработчика (Chrome), вы можете использовать JSON .stringify:

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

Я думаю, что приведенный ниже фрагмент решит вашу проблему:

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"}]

Пожалуйста, найдите скриншот кода, выполненного в инструменте разработчика:

Код в инструменте разработчика

...