Selim Reza CSE KUET Ответов: 2

Изменение массива в javascript влияет на копии массива, почему?


Массив в JavaScript также является объектом, и переменные содержат только ссылку на объект, а не сам объект. Таким образом, обе переменные имеют ссылку на один и тот же объект.
но почему?

Что я уже пробовал:

var func= new function () {
         var A = [20, 30, 25, 5, 3, 2];
         var B = A;

         for (var i = 0; i <= A.length - 1; i++) {
             if (A[i] > A[i+1]) {
                 var tmp = A[i];
                 A[i] = A[i + 1];
                 A[i + 1] = tmp;
             }
         }

             var big = A[A.length-1];
             var index = 0;

             for (var j = 0; j <= B.length-1; j++) {
                 if (big == B[j])
                 {
                     index = j;
                     break;
                 }
             }
             console.log(A);
             console.log(B);
             return (index);
     };

2 Ответов

Рейтинг:
18

OriginalGriff

Просто: это один и тот же массив.

var A = [20, 30, 25, 5, 3, 2];
var B = A;

Создает A и "указывает" его на массив значений, а затем создает B и копирует "указатель" из A к B, таким образом, они оба относятся к одним и тем же местам в памяти. Следовательно, любое изменение данных через A также изменит данные, если вы получите доступ к ним через B
Чтобы получить копию данных массива, используйте ломтик[^] функция:
var A = [20, 30, 25, 5, 3, 2];
var B = A.slice();


Рейтинг:
0

CPallini

Потому что так работает язык. Альтернативой было бы копировать другой объект при назначении, например, после

var B = A;
B будет ссылаться на копию (объект, на который ссылается) A и эти два объекта были бы независимыми (вот как, например structофицианты ведут себя в C/C++ язык программы).

Обратите внимание, что такая альтернатива была бы "дорогой", и вы всегда можете получить один и тот же результат, явно скопировав объект (в вашем случае массив).