Как избежать привязки объекта в JS?

Я не уверен, что с этим творится, наверное, я что-то делаю не так, но, честно говоря, не понимаю, в чем смысл. Просто взгляните на этот код и посмотрите, что происходит:

var object = {
  one: "one",
  two: "two"
};

var object2 = {}

object2 = object;

object["three"] = "what?"

console.info(object2);

Вывод для object2 должен быть {one: "one", "two": two"}, однако он возвращает {one: "one", "two": two", "three": "what?"}.

Так почему это происходит? Я не модифицирую object2, но он обновляется после добавления нового значения. Как я могу это решить? Я просто хочу оставить object2 как раньше. Спасибо

После object2 = object; обе переменные содержат ссылки на один и тот же объект.

Bergi 30.09.2018 22:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
96
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

object2 ссылается на объект (указывает на ту же ссылку в памяти)

Я предполагаю, что вы хотите создать object2, который является копией первого, что вы можете сделать следующим образом:

var obj2 = Object.assign({}, object);

или

var obj2 = {...object}

вы можете проверить Назначение объекта MDN или просто погуглить о синтаксисе оператора распространения

Теперь работает отлично. Однако не могли бы вы объяснить мне подробнее, почему это произошло? Я до сих пор не могу этого понять. Спасибо!

user3795437 30.09.2018 22:50

JS имеет примитивные (Boolean, Number, String, undefined, null) и ссылочные типы (Object, Array, Function). Да, вы также можете обернуть эти примитивы их конструктором, таким как String ('asd'), чтобы он тоже был объектом и вел себя иначе, чем примитивный тип ... В основном, когда вы сказали object2 = {}, в этот момент object2 был совершенно другим объектом , но затем после того, как вы сказали object2 = object, что означает, что он должен указывать на объект, чтобы он содержал ссылку на этот первый объект. Теперь, когда вы меняете orig, изменяется и другой объект, потому что он указывает на тот же самый первый объект, на этот объект obj.

dankobgd 30.09.2018 23:04

Когда вы назначаете объект object2, ссылка дается на object2. Следовательно, когда вы добавляете «три»: «что?» объекту и печати object2, он будет таким же.

Другие вопросы по теме