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

IT技术 javascript arrays
2021-02-23 20:00:46

有人可以解释一下两者之间的概念差异吗?在某处读到第二个通过销毁对现有数组的所有引用来创建一个新数组,而 .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它工作正常。谁能解释这里发生了什么。

3个回答

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),例如)时,您实际上是在清空原始数组。

@ArthaeyAngosii:嘿,我不知道。2011 年 1 月,显然我很天真并且喜欢用垃圾回答......感谢您指出;)。
2021-04-22 20:00:46
哪些浏览器不支持array.length = 0
2021-05-06 20:00:46

你确定真的有效吗?

我在这里做了一个小实验,试图用一个字符串“添加”一个数组,结果是一个字符串。

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

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

(在 Opera 11 中测试)