Napisałem następujący JavaScript:
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']
var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4
Ten kod deklaruje zmienną myArrayi ustawia ją na wartość tablicy. Następnie deklaruje drugą zmienną copyOfMyArrayi ustawia ją na myArray. Wykonuje operację na, copyOfMyArraya następnie ostrzega zarówno myArrayi copyOfMyArray. W jakiś sposób, gdy wykonuję operację na copyOfMyArray, wydaje się, że ta sama operacja jest wykonywana na myArray.
Następnie kod robi to samo z wartością liczbową: deklaruje zmienną myNumberi ustawia ją na wartość liczbową. Następnie deklaruje drugą zmienną copyOfMyNumberi ustawia ją na myNumber. Wykonuje operację na, copyOfMyNumbera następnie ostrzega zarówno myNumberi copyOfMyNumber. Tutaj otrzymuję oczekiwane zachowanie: różne wartości dla myNumberi copyOfMyNumber.
Jaka jest różnica między tablicą a liczbą w JavaScript, że wydaje się, że zmiana tablicy zmienia wartość kopii tablicy, podczas gdy zmiana liczby nie zmienia wartości kopii liczby?
Zgaduję, że z jakiegoś powodu tablica jest określana przez odniesienie, a liczba przez wartość, ale dlaczego? Skąd mogę wiedzieć, jakiego zachowania należy się spodziewać w przypadku innych obiektów?
myArray.slice(0);bezpośrednio w tym kontekście?