Hallo Henry,
ein Array und ein String sind Objekte. Objekte leben in einem Speicherbereich, den man Heap nennt, und die Zuweisung eines Objekts an eine Variable führt dazu, dass die Variable nicht mehr enthält als einen Verweis auf das Gebilde um Heap.
Der folgende Teil ist für Strings geschrieben, gilt aber für Arrays und Objekte gleichermaßen!
let hugo = "ABC";
let otto = hugo;
erzeugt einen String "ABC" auf dem Heap und zwei Referenzen darauf. Eine Zuweisung eines anderen Strings an hugo
oder otto
legt einen ANDEREN String auf den Heap und speichert eine Referenz darauf in der Variablen. String-Methoden wie substr oder slice erzeugen ebenfalls einen ANDEREN String auf dem Heap.
Nun der Unterschied: Strings sind unveränderlich. JavaScript garantiert Dir, das ein String der einmal zugewiesen ist sich nicht mehr ändert. Diese Garantie hast Du bei Arrays und Objekten nicht. Du kannst bei Arrays einzelne Elemente ersetzen oder mit splice einen Ausschnitt verändern. Bei Objekten kannst Du Eigenschaften ändern, sogar hinzufügen. Damit änderst Du das Ding, das auf dem Heap liegt. Und wenn zwei Variablen eine Referenz auf dieses Ding halten, dann ändert sich für beide Variablen – scheinbar – der Inhalt. In Wahrheit ändert sich der Inhalt von keiner Variablen. Sondern das, worauf beide Variablen zeigen.
Rolf
sumpsi - posui - clusi