【问题标题】:How to empty an array in JavaScript? [duplicate]如何在 JavaScript 中清空数组? [复制]
【发布时间】:2019-06-27 21:14:55
【问题描述】:

我使用 ArrayList 作为我的数组,

let ArrayList   =  ['a','b','c','d','e','f'];

我在方法 1 和方法 2 之间感到困惑,因为在这两种情况下,我都引用了另一个 ArrayList,您还可以通过此链接查看日志https://jsfiddle.net/mnjsnj/u1fms8wx/2/

方法一

let Method1 = ArrayList;  // Referenced arrayList by another variable 
ArrayList= []; // Empty the array 
console.log(Method1); // Output ['a','b','c','d','e','f']

方法二

let Method2 = ArrayList;  // Referenced arrayList by another variable 
ArrayList.length = 0; // Empty the array by setting length to 0
console.log(Method2 ); // Output []

【问题讨论】:

  • 最初,两个变量都引用同一个数组。然后在第一个示例中,将一个新数组分配给 ArrayList,Method1 不受影响。在第二个示例中,两个变量引用的数组的长度发生了变化。
  • 谢谢 RobG 答案对我来说很清楚了

标签: javascript arrays arraylist ecmascript-6


【解决方案1】:

了解这里发生的事情的诀窍是了解变量在 JavaScript 中的工作方式以及赋值 (=) 运算符的作用。

变量只是内存位置的绑定名称。

当我们通过= 操作符给变量赋值时,我们只改变变量指向的东西,我们没有改变现有内存位置的实际数据,我们只是让变量不指向它不再。

// Method1 now points to the same memory location as ArrayList
let Method1 = ArrayList;
// ArrayList variable now points to a new memory location containing an empty array
ArrayList = []; 
// Method1 is still pointing to the original memory location so the array is unaffected
console.log(Method1);

在第二个示例中,您通过将length 更改为0 来直接影响ArrayList 指向的内存位置上的数据。

// point Method2 variable to the same location as ArrayList variable
let Method2 = ArrayList; 
// change the data stored at the location ArrayList is pointing to
ArrayList.length = 0; // Empty the array by setting length to 0
// Since Method2 is also pointing to that location, we see the empty array
console.log(Method2); // Output []

【讨论】:

  • “对于诸如字符串或数字之类的原语,在重新分配变量时也会复制该值,这样您的代码就会按照您的预期运行。” 嗯?如果let ArrayList = 42 和let Method1 = ArrayList; ArrayList = 21;,那么Method1 仍然是42。变量总是以相同的方式工作,它们具有什么值并不重要。还是你的意思是别的?我想我对您所指的代码感到困惑。你还说“因为你处理数组这行得通。”,所以你似乎在两个句子中都说“它行得通”。
  • @FelixKling 我在深夜写了这个答案,半脑残哈哈我已经删除了“感觉不对,但不确定如何”的描述
  • 我明白了:D
【解决方案2】:

ArrayList 在第一种方法之后被清空,因此您将一个空数组分配给Method2

let ArrayList = ['a', 'b', 'c', 'd', 'e', 'f'];

let Method1 = ArrayList; // Referenced arrayList by another variable 
ArrayList = []; // Empty the array 
console.log(Method1); // Output ['a','b','c','d','e','f']

console.log('ArrayList after Method1....!' , ArrayList)
// here an empty array is assinged to Method2
let Method2 = ArrayList; // Referenced arrayList by another variable 
ArrayList.length = 0; // Empty the array by setting length to 0
console.log(Method2); // Output []

【讨论】:

  • 同意你的好回答谢谢
猜你喜欢
  • 2010-11-16
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2016-07-12
  • 2012-04-05
相关资源
最近更新 更多