Клонирование объекта Date в JavaScript: избегаем ссылок
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы скопировать объект Date в JavaScript, следует использовать данный код:
const clonedDate = new Date(originalDate.getTime());
Этот подход предполагает вызов метода getTime(), который возвращает timestamp исходной даты originalDate
. Затем этот timestamp используется для создания нового экземпляра Date, обеспечивая точное и независимое его дублирование.
Глубокое погружение: методы копирования объекта Date
В процессе разработки на JavaScript часто возникает необходимость в дублировании объектов Date. Рассмотрим доступные подходы к копированию объекта Date и объясним их нюансы.
Копирование с помощью getTime() или valueOf()
Для получения количества миллисекунд, прошедших с начала эры Unix, можно применить методы getTime
или valueOf
. Они возвращают timestamp, который служит основой для копии.
// Перенос во времени без надобности машины времени!
const cloneDate1 = new Date(originalDate.getTime());
const cloneDate2 = new Date(originalDate.valueOf());
Унарный плюс: просто и эффективно
Вы можете привести объект Date к числу с помощью унарного плюса. Таким способом можно получить идеальную копию даты.
// Поразительно просто! И без вызова каких-либо методов.
const cloneDate = new Date(+originalDate);
Взаимодействие с копией
Скопированная дата готова к использованию. Вы можете свободно изменять копию, не затрагивая при этом исходную дату.
// К скопированной дате применяется перенос времени на 10 лет вперед
cloneDate.setFullYear(cloneDate.getFullYear() + 10);
Остерегайтесь: изменения затрагивают оригинал
Копирование дат является важным для сохранения оригинальных значений без их изменения. Прямое присвоение исходной даты новой переменной приведет к тому, что любые изменения затронут и сам оригинал.
// Эффект бабочки: изменяя “newDate”, мы влияем на “originalDate”.
let newDate = originalDate;
newDate.setFullYear(newDate.getFullYear() + 1000);
Визуализация
Приведем концепцию копирования даты в визуальном формате:
Оригинальная дата: 📅 (5 ноября 1955 г.)
Скопированная дата: 📅👯 (5 ноября 1955 г.)
С первого взгляда, оригинал и копия выглядят идентично, но на самом деле они — независимые сущности, соответствующие одному и тому же моменту времени.
Советы и особенности копирования объектов Date
Часовые пояса: важный момент при копировании
Не забывайте, что объекты Date в JavaScript создаются в часовом поясе исполнения кода, и этот часовой пояс сохраняется при копировании.
Ошибочное копирование: работа с недопустимыми датами
Создание копии недопустимой даты приведет к появлению еще одной такой же недопустимой даты. Будьте внимательны при копировании!
// Знакомьтесь: двойник недопустимой даты – тоже недопустимая дата!
const invalidDate = new Date('некорректный формат даты');
const cloneInvalid = new Date(invalidDate.getTime());
Эффективность использования getTime()
Если вам надо скопировать большое количество дат, то new Date(original.getTime())
будет очень полезным благодаря своей высокой эффективности.
Современность наших дней: встроенные методы
Несмотря на то что библиотеки типа Moment.js предлагали удобные методы для копирования, например, clone()
, современный JavaScript предоставляет простые способы для копирования дат, упрощая этот процесс.
Полезные материалы
- Date – JavaScript | MDN — Справочник по объекту
Date
в JavaScript. - javascript – How to clone a Date object? – Stack Overflow — Обсуждения и способы копирования дат.
- How to deep clone a JavaScript object — Руководство по глубокому копированию объектов.
- Working with dates in javascript – YouTube — Видеоуроки по работе с датами в JavaScript.
- JavaScript Date Objects — Учебник по объектам Date в JavaScript.
- date-fns – современная JavaScript библиотека утилит для работы с датами — Описана библиотека для работы с датами в JavaScript.
- Moment.js | Docs — Для любителей "старой школы".