Array.length = 0和Array = []之间的区别?

Sri*_*agi 68 javascript arrays

有人可以解释两者之间的概念差异.通过销毁对现有数组的所有引用来读取第二个创建新数组的地方,而.length = 0只是清空数组.但它在我的情况下不起作用

//Declaration 
var arr = new Array();
Run Code Online (Sandbox Code Playgroud)

下面是一次又一次执行的循环代码.

$("#dummy").load("something.php",function(){
   arr.length =0;// expected to empty the array
   $("div").each(function(){
       arr = arr + $(this).html();
   });
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我替换代码arr =[]代替arr.length=0它工作正常.任何人都可以解释这里发生的事情.

Que*_*tin 87

foo = []创建一个新数组并将其引用分配给变量.任何其他引用都不受影响,仍然指向原始数组.

foo.length = 0修改数组本身.如果您通过其他变量访问它,那么您仍然可以获得修改后的数组.

通过销毁对现有数组的所有引用来读取第二个创建新数组的地方

那是倒退.它创建一个新数组,不会破坏其他引用.

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);
Run Code Online (Sandbox Code Playgroud)

得到:

[] [] [1, 2, 3] []
Run Code Online (Sandbox Code Playgroud)
arr.length =0;// expected to empty the array
Run Code Online (Sandbox Code Playgroud)

它至少是第一次清空阵列.第一次执行此操作后:

arr = arr + $(this).html();
Run Code Online (Sandbox Code Playgroud)

...用字符串覆盖数组.

length字符串的属性是只读的,因此分配0它不起作用.