我有这个(用Javascript):

function f(n){
   var arr = (''+n).split();
   var sortedArr = arr;
   sortedArr.sort();
}


当我返回arr和sortedArr时,它们都被排序了。为什么是这样? .sort方法不应该只在此处对sortedArr进行排序吗?

最佳答案

使用Array.prototype.slice将解决此问题。

function f(n){
   var arr = (''+n).split();
   var sortedArr = arr.slice();
   sortedArr.sort();
}


编辑

原因是javascript中的数组和对象是引用,因此是可变的。

分配时,sortedArr=arr;
您实际上是在复制引用而不是值。即喜欢
如果arr存储在地址1267,则sortedArr现在也将指向1267,而不是将值复制到其他位置。

同时,当我们执行sortedArr=arr.slice();时,实际上是将值复制到其他位置(假设1367),因此将sortedArr指向另一个存储位置。

而且我想很明显,如果通过引用复制值,则通过任何引用更改值也将反映另一个引用的更改。

07-25 23:32