Ссылочный тип данных 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]?
  • Вопрос задан
  • 6895 просмотров
Решения вопроса 3
@gracer
В первом случае вносятся изменения в объект arr, соответсвенно, раз в newArr хранится ссылка на объект arr, то и newArr меняется. Во втором переменной arr просто присваивается новое значение.
Ответ написан
Комментировать
mr_T
@mr_T
Web-разработчик
В первом случае ты передаешь в newArr указатель на массив, потом изменяешь этот же массив через указатель arr.
Во втором случае ты снова передаешь указатель в переменную newArr, а потом просто присваиваешь переменной arr другое значение, то есть убираешь из нее указатель, но не затираешь само значение. Мало того - ты вручную вообще никак не затрешь значение любого объекта, ты можешь только "забыть" о нем, а уберет его за тебя уже либо сборщик мусора, либо просто вся выделенная память затрется при перезагрузке страницы.
Ответ написан
Комментировать
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Потому что в Javascript копирование и передача производится by sharing.
В переменной хранится значение (или копия) ссылки. Объект немутабельный, а свойства очень даже.
Дмитрий Сошников хорошо всё это описывает.

В вашем примере вы записали в переменную значение примитива, но в другой переменной значение осталось прежним.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы