Tuttavia, quando passo dalla page1.html alla page2.html (per farlo utilizzo il metodo location.assign("page2.html") nello script main.js), nel momento in cui visualizzo la page2.html perdo tutto il contenuto dell'array carrello. Immagino che questo avvenga perche' nel momento in cui nella page2.html importo lo script main.js, viene creata ovviamente una nuova istanza dell'array, andando cosi' a perdere quella precedente.
Ciao, accade più o meno ciò che hai detto, location.assign non fa altro che caricare un nuovo documento nella finestra corrente con conseguente perdita di tutti i dati, presenti fino a quel momento, a livello di script.

Puoi risolvere in vari modi, uno è l'uso del web storage di HTML5, parliamo quindi di Session Storage e Local Storage.

Qui qualche guida per farti un idea di cosa siano e come utilizzarli:

Web storage, i cookies secondo HTML5
Salvare dati lato client con Web Storage
HTML5 Web Storage
... e molto altro su zio gugol

Buon proseguimento