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

有人可以解释两者之间的概念差异。 读取第二个通过销毁对现有数组的所有引用创build一个新的数组,并且.length = 0只是清空数组。 但是对我而言这并不起作用

//Declaration var arr = new Array(); 

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

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

但是,如果我用arr =[]replacearr.length=0的代码replace代码,它工作正常。 任何人都可以解释这里发生了什么。

foo = []创build一个新的数组并将一个引用赋值给一个variables。 任何其他引用不受影响,仍然指向原始数组。

foo.length = 0修改数组本身。 如果你通过一个不同的variables访问它,那么你仍然得到修改的数组。

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

这是倒退。 它创build一个新的数组,不会破坏其他引用。

 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] [] 

下面的例子最好的certificate了这个区别:

 var arrayA = [1,2,3,4,5]; function clearUsingLength (ar) { ar.length = 0; } function clearByOverwriting(ar) { ar = []; } alert("Original Length: " + arrayA.length); clearByOverwriting(arrayA); alert("After Overwriting: " + arrayA.length); clearUsingLength(arrayA); alert("After Using Length: " + arrayA.length); 

其中一个现场演示可以在这里看到: http : //www.jsfiddle.net/8Yn7e/

当你设置一个variables指向一个现有的数组来指向一个新的数组时,你所做的就是将variables对原始数组的链接断开。

当你使用array.length = 0 (和其他方法,如array.splice(0, array.length) ), 实际上是清空原始数组。

你确定它确实有效吗?

我在这里做了一个小实验,试图用String来“添加”Array导致了一个string。

 function xyz(){ var a = []; alert(typeof(a+$("#first").html())); // shows "string" } 

http://www.jsfiddle.net/4nKCF/

(在Opera 11中testing)