Ссылочный тип данных JavaScript?

Приветствую!
Почему,
var arr = [1,2,3,4,5];
var newArr = arr;
arr.shift();
console.log(newArr);//здесь выдает значение [2, 3, 4, 5] ?


а здесь
var arr = [1,2,3,4,5];
var newArr = arr;
arr = 0;
console.log(newArr); // здесь выдает значение [1, 2, 3, 4, 5]?
  • Вопрос задан
  • 3578 просмотров
Решения вопроса 3
@gracer
В первом случае вносятся изменения в объект arr, соответсвенно, раз в newArr хранится ссылка на объект arr, то и newArr меняется. Во втором переменной arr просто присваивается новое значение.
Ответ написан
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Потому что в Javascript копирование и передача производится by sharing.
В переменной хранится значение (или копия) ссылки. Объект немутабельный, а свойства очень даже.
Дмитрий Сошников хорошо всё это описывает.

В вашем примере вы записали в переменную значение примитива, но в другой переменной значение осталось прежним.
Ответ написан
mr_T
@mr_T
Web-разработчик
В первом случае ты передаешь в newArr указатель на массив, потом изменяешь этот же массив через указатель arr.
Во втором случае ты снова передаешь указатель в переменную newArr, а потом просто присваиваешь переменной arr другое значение, то есть убираешь из нее указатель, но не затираешь само значение. Мало того - ты вручную вообще никак не затрешь значение любого объекта, ты можешь только "забыть" о нем, а уберет его за тебя уже либо сборщик мусора, либо просто вся выделенная память затрется при перезагрузке страницы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 окт. 2020, в 03:40
4000 руб./за проект
29 окт. 2020, в 03:23
400 руб./в час