Dzieje się tak, ponieważ w tablica2 przypisujesz nie tablicę jako wartość tylko po prostu referencję do niej. Jeśli chcesz stworzyć kopię tablicy (zawierającej elementy będące wartościami typu prostego jak string, number, boolean itp.) to najlepiej zrobić to poprzez:
const arr1 = [1,2,3];
const arr2 = [...arr1];
arr2.push(4); //4
arr1; //[1, 2, 3]
arr2; //[1, 2, 3, 4]
Alternatywnie można też użyć metody Array.from albo metody Array.prototype.slice.
Co innego jeśli w tablicy przechowujesz obiekty, wtedy sprawa się nieco komplikuje. Można to rozwiązać na parę sposobów, na przykład przy użyciu globalnego obiektu JSON:
const arr1 = [ /* obiekty */ ];
const arr2 = JSON.parse(JSON.stringify(arr1));
Rozwiązanie to działa jeśli nie nakombinujesz nadmiernie z elementami tablicy, czyli jeśli np. nie używasz deskryptorów, ale to raczej nie jest często spotykana praktyka.
Jakiś czas temu pisałem też artka o tym na moim blogu jakbyś był zainteresowany: http://poradnik.drogimex.pl/2018/04/25/stworzyc-kopie-tablicy-javascript/