Почему обнуляются значения часов, минут и секунд у обеих переменных?

alert( getSecondsToday() );

function getSecondsToday() {
  let currentTime = new Date();
  let startTime = currentTime;

  startTime.setHours(0,0,0);
  return Number(currentTime) - Number(startTime);
}

Почему после выполнения строки startTime.setHours(0,0,0); обнуляются значения у currentTime?


Ответы (2 шт):

Автор решения: Yegor Androsov

Первая строчка возвращает ссылку на объект даты, вторая строчка просто записывает ту же ссылку в новую переменную. В итоге, мы имеем один объект, одну ссылку, и две переменных. Для того, чтобы сделать их независимыми друг от друга, нужно создать новый объект даты, основываясь на первой переменной. Так у нас будет 2 ссылки на 2 разных объекта

let currentTime = new Date();
let startTime = new Date(currentTime);
→ Ссылка
Автор решения: Zhihar

потому что Date - объект и при присваивании переменной присваивается лишь ссылка на него, так что сам объект не меняется, тут нужно копирование объекта

function getSecondsToday() {
  let currentTime = new Date();
  let startTime = new Date(currentTime.getTime());

  startTime.setHours(0,0,0);
  return Number(currentTime) - Number(startTime);
}
→ Ссылка