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)