我想知道这个
有什么问题$(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。
答案 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
也会更改。
你应该搜索“如何克隆一个对象”,这可能对你有帮助。