JavaScript 中清空数组

Posted by cl9000 on July 08, 2020

人只有献身于社会,才能找出那短暂而有风险的生命的意义。 ——<阿尔伯特·爱因斯坦>

定义一个数组,并想清空其内容。通常,您可以这样操作:

1
2
3
4
5
6
7
// define Array
var list = [1, 2, 3, 4];
function empty() {
//empty your array
list = [];
}
empty();

还有另一种方法可以清空性能更高的数组。

使用如下代码:

1
2
3
4
5
6
var list = [1, 2, 3, 4];
function empty() {
//empty your array
list.length = 0;
}
empty();
  • list = [] 将对新数组的引用分配给变量,而其他任何引用均不受影响。这意味着对先前数组内容的引用仍保留在内存中,从而导致内存泄漏。

  • list.length = 0 删除数组中的所有内容,并击中其他引用。

换句话说,如果您有两个对同一个数组(a = [1,2,3]; a2 = a;)的引用,并且使用删除了该数组的内容 list.length = 0,则两个引用(a和a2)现在都将指向同一空数组。(因此,如果您不希望a2持有一个空数组,请不要使用此技术!)

1
2
3
4
5
6
7
8
9
var foo = [1,2,3];
var bar = [1,2,3];
var foo2 = foo;
var bar2 = bar;
foo = [];
bar.length = 0;
console.log(foo, bar, foo2, bar2);

// [] [] [1, 2, 3] []

数组长度0和数组之间的差异 - https://stackoverflow.com/questions/4804235/difference-between-array-length-0-and-array

参考

关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!