Задать вопрос
dmitry-l
@dmitry-l

Вопрос с собеседования — почему не меняется объект?

Если объект - это ссылочный тип, почему тогда при изменении переменной, он остается прежним?

const obj = {
    data: [1, 2]
}

let products = obj.data
products = []

console.log(products) // []
console.log(obj.data) // мой ответ был [1, 2] Дальше меня спросили почему не [] ?

Я ответил, что помещая уже имеющийся объект в переменную - мы создаем на него новый reference через эту переменную. Меняя переменную мы меняем ее значение. Но меняя свойство, мы уже поменяем свойства основного объекта.
Они "угукнули" и продолжили дальше...

На сколько верно я ответил? Что можно было бы добавить?
  • Вопрос задан
  • 206 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
потому что в строке
let products = obj.data

вы по сути в products вставляете ссылку на obj.data

а в строке
products = []

вы заменяете эту ссылку на другую

при этом содержимое
obj.data
тоже ссылка, и она остается прежней.

другими словами: если вы записали на листок телефон своей девушки а потом найдя другую девушку, про старую решили забыть и зачеркнув ее номер написали номер новой девушки то прежня девушка никуда не исчезла? она ведь по прежнему сидит на своем номере телефона и ждет вашего звонка? (в данной ситуации products и есть этот листок с номером ))))

ЗЫ: был несколько невнимателен, не достиг моего мозга последний абзац вашего вопроса. Ответили вы верно.
Ответ написан
hack504
@hack504
Оператор присваивания устанавливает значение переменной. Значение переменной было "ссылочный тип", а стало "тип массив" - действий с obj.data не производилось.

Вроде все верно ответили, единственное, что можно было бы замолчать фразу "помещая уже имеющийся объект в переменную - мы создаем на него новый reference через эту переменную."
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Добавить можно было бы про способы достичь желаемого: обнулить массив внутри объекта.
Через splice(), .length=0 и т.п.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы