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

276
25 июля 2022, 22:40
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?

Answer 1

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

let currentTime = new Date();
let startTime = new Date(currentTime);
Answer 2

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

function getSecondsToday() {
  let currentTime = new Date();
  let startTime = new Date(currentTime.getTime());
  startTime.setHours(0,0,0);
  return Number(currentTime) - Number(startTime);
}
READ ALSO
Event.target в JS

Event.target в JS

Помогите, пожалуйста, разобраться в работе event:

339
Передача данных из JSON файла в JavaScript

Передача данных из JSON файла в JavaScript

Здраствуйте! Есть JSON файлик с данными

321
Ошибка при импорте mdi во Vue.js

Ошибка при импорте mdi во Vue.js

День добрыйЯ только начинаю изучать Vue

288
Заголовок страницы, изменяющийся через AJAX запрос

Заголовок страницы, изменяющийся через AJAX запрос

Возникла такая проблемаСайт отправляет AJAX запрос, получая информацию (имя, фамилия и т

293