锁定老帖子 主题:JavaScript中清空数组的三种方式
精华帖 (0) :: 良好帖 (6) :: 新手帖 (12) :: 隐藏帖 (10)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-25
学习了,以前一直清空数组只知道用第二种方式,也没想过为什么。。。
|
|
返回顶楼 | |
发表时间:2011-01-26
To rainsilence,dojotoolkit:
方式2的确是引用指向了新的数组对象[],旧的如果没有引用指向它。垃圾应该可以回收了。注意我说的是可以回收不代表立马回收。 退一步说,回收不回收客户端程序员是控制不了的。还不象Java有个System.gc可调用下,JS至多是置null。 回收不回收,这是JS引擎该做的事(我相信现在的各主流浏览器JS引擎已经足够完善)。 |
|
返回顶楼 | |
发表时间:2011-01-26
lifesinger 写道 第一种方式,不光可以用来清空数组,还可以用来清空类数组,适用范围更广。比如清空一个 jquery 对象,第一种快多了
这清空数组、类数组对象操作有什么实际意义吗,是想重新赋值还是想告诉JS引擎快点回收内存? |
|
返回顶楼 | |
发表时间:2011-01-26
直觉就是第二种快,一直都这么在用(不知道楼主怎么和EXT扯上的)。
将变量赋予一个新的空数组,也可以视为一种“清空”。只要明白原理就行了,何必抠字眼呢? |
|
返回顶楼 | |
发表时间:2011-01-26
zhouyrt 写道 To rainsilence,dojotoolkit:
方式2的确是引用指向了新的数组对象[],旧的如果没有引用指向它。垃圾应该可以回收了。注意我说的是可以回收不代表立马回收。 退一步说,回收不回收客户端程序员是控制不了的。还不象Java有个System.gc可调用下,JS至多是置null。 回收不回收,这是JS引擎该做的事(我相信现在的各主流浏览器JS引擎已经足够完善)。 你究竟想说什么?我说的不具可比性意在说明你的文章只需要说明到有两种方法可以清空数据就ok了。而无需提供哪种更快。因为他们根本无法比较。 |
|
返回顶楼 | |
发表时间:2011-01-26
直接赋[],这个速度还需要测试?肯定无限趋近于0了。但是仅仅这样就能说明2肯定比1好?一个是欠钱马上就还,一个是拖着给你张欠条,到了时候还是要还。你说拖着还没准会比立马还的少?我看未必,万一债主是高利贷呢?你说会比立马还得多,因为有利息。我看也未必,万一恶性通货膨胀了呢?所以,lz最后的比较两种方法哪种更好,完全没有意义。
|
|
返回顶楼 | |
发表时间:2011-01-26
——你究竟想说什么?我说的不具可比性意在说明你的文章只需要说明到有两种方法可以清空数据就ok了。而无需提供哪种更快。因为他们根本无法比较。
代楼主回答: 在清空数据的功能上,两者完全具有可比性,且第二种比第一种有更好的性能(快)。 因为采用了空间换时间的做法,而旧数组的内存空间会自动被JS引擎回收(函数栈内存变量不需要特意置为null会随函数一起释放)。 |
|
返回顶楼 | |
发表时间:2011-01-26
像2这么清当然快了!
|
|
返回顶楼 | |
发表时间:2011-01-27
dojotoolkit 写道 不具可比性,只有第一种才是清空,第二种只是重建一个空数组,相当于new Array()。
var arr1 = [1,2,3]; var arr2 = arr1; 使用arr1.length = 0; 则arr2也是空了。 使用arr1 = []; 则arr2还是[1,2,3],因为他们是2个对象。 我赞成 |
|
返回顶楼 | |
发表时间:2011-01-27
第一种方式感觉有点怪,,,,不符合正常的逻辑思维。
|
|
返回顶楼 | |