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

有人能解释一下他们在概念上的区别吗。在某处读到,第二个数组通过销毁对现有数组的所有引用和。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 =[]代替 arr.length=0代替代码,它就可以正常工作。有人能解释一下这里发生了什么吗。

57816 次浏览

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);

提供:

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

arr.length =0;// expected to empty the array

它会清空数组,至少在第一次清空之后:

arr = arr + $(this).html();

绳子覆盖数组。

字符串的 length属性是只读的,因此将 0赋给它没有效果。

这里的区别在下面的例子中得到了最好的说明:

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/

当您设置一个指向现有数组以指向新数组的变量时,您所做的只是断开该变量与该原始数组之间的链接。

当您使用 array.length = 0(以及其他类似于 array.splice(0, array.length)的方法)时,您正在清空原始数组。

你确定真的有用吗?

我在这里做了一个小实验,试图用 String“添加”Array,结果得到一个字符串。

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

Http://www.jsfiddle.net/4nkcf/

(在 Opera 11中测试)