2 tjh666slj tjh666slj 于 2016.01.25 09:25 提问

关于数组清空arr = []方法和arr.length = 0方法的性能比较

下面是总结的几种清空数组的方法直接上代码:

var arr = [1,5,2,6,5,22,60];
function empty()
{
    arr = [];
    /*
        arr = []意味着赋值给新数组变量,而其他引用不受影响。这意味着对先前数组的赋值任然保留在内存中,从而导致内存泄露。
    */
    arr.length = 0;
    /*
        arr.length = 0;删除当前数组中的全部内容但不影响与其他的关联性
    */
    arr.splice(0,arr.length);
    /*
        数组方法删除  splice(开始位置,长度)
    */
    while(arr.length)
    {
        arr.pop();          //后面删除
        //arr.shift();        前面删除
    }
};
empty();

console.log(arr);  //输出为[]

求大神指点arr = []方法和arr.length = 0方法的优劣,到底哪种性能高,看了两篇文章说法不一.....

4个回答

rui888
rui888   Ds   Rxr 2016.01.25 09:44
tjh666slj
tjh666slj   2016.01.25 09:59

var arr = [1,2,3];
var Arr = [4,5,6];

var arr2 = arr;
var Arr2 = Arr;

arr = [];
Arr.length = 0;
/*
    然而如果你想复制一个数组的副本,若用Arr.length = 0;删除数组内容,那么副本也将会失去内容
*/
console.log(arr,arr2,Arr,Arr2);
/*
    [],
    [1,2,3],
    [],
    []
*/

91program
91program   Ds   Rxr 2016.01.25 10:05

只要功能正确,没有内存泄露,这两句对性能的影响应该不大吧!讨论这个问题,是纯学术派啊!
你可以使用 Tick Count 测试一下这两句的执行时间,估计是没有什么区别。如果一句测试不出来,你可以循环调用 100万次,进行耗时测试。

enpterexpress
enpterexpress   2016.01.25 09:36

性能高是不是说赋值的快

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!