我有这个(用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指向另一个存储位置。而且我想很明显,如果通过引用复制值,则通过任何引用更改值也将反映另一个引用的更改。