javascript拼接 - 奇怪的问题

时间:2011-10-30 03:25:48

标签: javascript splice

我想知道这个

有什么问题
$(function() {
var arr1=new Array('A','B','C','D','E','F','G');
var arr2=new Array('F','D','B');
var arr3=arr1;
    for(x=0; x<arr3.length; x++) {
        if(jQuery.inArray(arr3[x],arr2) == -1) {arr3.splice(x, 1);}

    }
    alert(arr1.join(','));
    alert(arr3.join(','));
});

我认为arr1应该仍然是数组('A','B','C','D','E','F','G'),但在此操作之后,arr1变为arr3。这对我来说没有意义,因为整个操作根本不会触及arr1。

发布后发现答案。见duplicating arrays javascript splicing

3 个答案:

答案 0 :(得分:0)

var arr3=arr1;这样的赋值是通过引用完成的,即arr3变量现在指向arr1变量指向的相同位置。带下划线的数据(在本例中为数组)是相同的。基本上arr1和arr3是相同的。因此,通过其他任何更改都可以通过其他方式查看如果要复制简单类型数组,请使用slice(0)

var arr3 = arr1.slice(0);

答案 1 :(得分:0)

var x = [3, 4, 5]
var y = [3, 4, 5]
var z = y

x === y // false
y === z // true (y and z reference the same object)

y.push(6)
y // [3, 4, 5, 6]
z // [3, 4, 5, 6]

var x2 = x.slice(0)
x2 === x // false
x2.push('foo')
x2 // [3, 4, 5, 'foo']
x // [3, 4, 5]

使用Array.prototype.slice 复制数组。

答案 2 :(得分:0)

arr1是一个数组对象。当您复制像arr1这样的var arr3 = arr1时,我们只会获得对原始对象的新引用。 因此,当您更改arr3时,arr1也会更改。

你应该搜索“如何克隆一个对象”,这可能对你有帮助。