Tôi đã viết đoạn mã JavaScript sau:
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
Đoạn mã này khai báo một biến myArrayvà đặt nó thành một giá trị mảng. Sau đó, nó khai báo một biến thứ hai copyOfMyArrayvà đặt nó thành myArray. Nó thực hiện một thao tác trên copyOfMyArrayvà sau đó cảnh báo cả myArrayvà copyOfMyArray. Bằng cách nào đó, khi tôi thực hiện một thao tác trên copyOfMyArray, có vẻ như thao tác tương tự được thực hiện trên myArray.
Sau đó, đoạn mã làm điều tương tự với một giá trị số: Nó khai báo một biến myNumbervà đặt nó thành một giá trị số. Sau đó, nó khai báo một biến thứ hai copyOfMyNumbervà đặt nó thành myNumber. Nó thực hiện một thao tác trên copyOfMyNumbervà sau đó cảnh báo cả myNumbervà copyOfMyNumber. Ở đây, tôi nhận được hành vi mong đợi: các giá trị khác nhau cho myNumbervà copyOfMyNumber.
Sự khác biệt giữa một mảng và một số trong JavaScript là gì mà dường như việc thay đổi một mảng sẽ thay đổi giá trị của một bản sao của mảng, trong khi việc thay đổi một số không làm thay đổi giá trị của một bản sao của số?
Tôi đoán rằng vì lý do nào đó, mảng được tham chiếu bằng tham chiếu và số theo giá trị, nhưng tại sao? Làm thế nào tôi có thể biết những hành vi mong đợi với các đối tượng khác?
myArray.slice(0);trực tiếp trong bối cảnh đó không?