对于javascript中sort函数之前只是简单使用,并没有详细的追究其原理,今天写了一段简单的代码,结果就发现问题了。。。
<script type="text/javascript">
var years = new Array(1993,1999,1989,2001,2010);
var sortYeays=years.sort();
document.write("排序前:"+years);
document.write("排序后:"+sortYeays);
</script>
执行结果如下:
排序前:1989,1993,1999,2001,2010排序后:1989,1993,1999,2001,2010
到这里可能你也会发现问题,排序前应该是:1993,1999,1989,2001,2010。但结果却是排序后的结果。。
查阅资料后发现在javascript中sort函数是对数组的引用排序,不会产生副本。知道这个原因就不难解释上面的现象了,上面的代码执行
var sortYeays=years.sort();后,对years数组的引用进行了排序,这样在存储空间中years保存的值就是排序之后的结果。后面再调用years数组,就是用的新的结果值。而不是在存储空间中开辟一块years数组的副本(用来保存sort后的结果值)。所以就会造成上面的执行结果,但下面的代码就会得到我们想要的结果
<script type="text/javascript"> var years = new Array(1993,1999,1989,2001,2010); document.write("排序前:" + years); document.write("排序后:"+years.sort()); </script>
执行结果如下:
排序前:1993,1999,1989,2001,2010排序后:1989,1993,1999,2001,2010
啰嗦了半天,总之在javascript中的sort函数是在原数组上进行排序,不生成副本。。。。