Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript array.push on clone array修改原始数组_Javascript_Arrays - Fatal编程技术网

Javascript array.push on clone array修改原始数组

Javascript array.push on clone array修改原始数组,javascript,arrays,Javascript,Arrays,我发现(对我来说)一个非常奇怪的问题 我有一个全局变量数组 var A = [1,2,3,4] 然后在一个函数中,我创建了局部变量,并将以前的全局变量分配给它 function someFunc() { var X = A; } 然后,我创建了另一个局部Var,并用第一个局部Var的值分配它 var Y = X; 然后我将一个新值推送到Y Y.push(6); 但是,新值(6)不仅推送到Y,而且推送到2个原始数组(X和A)。怎么搞的?它不应该只改变Y吗 请帮忙,谢谢 这是我的全

我发现(对我来说)一个非常奇怪的问题

我有一个全局变量数组

var A = [1,2,3,4]
然后在一个函数中,我创建了局部变量,并将以前的全局变量分配给它

function someFunc() {
     var X = A;
}
然后,我创建了另一个局部Var,并用第一个局部Var的值分配它

var Y = X;
然后我将一个新值推送到Y

Y.push(6);
但是,新值(6)不仅推送到Y,而且推送到2个原始数组(X和A)。怎么搞的?它不应该只改变Y吗

请帮忙,谢谢

这是我的全部代码:

var A = [1,2,3,4];


function someFunc(){
    var X = A;
    var Y = X;
    Y.push(6);
    console.log(A);
    console.log(X);
    console.log(Y);
}

$("#test").click(function(){
    someFunc();
});
如您所见,它是通过单击id为#test的元素触发的

三个console.log都代表不同的变量,它返回相同的结果,数组中有6个


编辑。是的,有一个与此类似的问题,但尽管问题相似,解决方案相同,但最初的理解是不同的。在我的问题中,我最初问“为什么”,因为我不知道这些变量实际上是“引用”同一数组而不是“赋值”,所以我不知道是否应该搜索如何赋值而不是引用,因为我假设使用
=
意味着赋值,很抱歉,

发生的情况是,您没有复制阵列,只是引用了它。您可以使用该方法创建其副本:

var X = A.slice();

请注意,这种方法只能用于基本值。如果需要处理对象,请选中此复选框。

未克隆数组:分配变量不会克隆基础对象

可以使用切片方法浅层克隆阵列:

var cloned = original.slice();

但是数组和数组中的对象项不会使用此方法克隆。但是,数字和字符串是克隆的,因此这对您的情况来说应该很好。

JavaScript中的数组也是一个对象,变量只包含对对象的引用,而不是对象本身。因此,两个变量都引用同一个对象。

您没有复制数组。要复制它,请使用Object.assign(),或者使用
let copy=[…original]
如果要复制列表“Javascript array.push on clone array modify original array”它不是克隆,它只是引用同一数组的两个变量。当然,因为只有一个数组,所以无论使用哪个变量访问数组进行修改,都可以看到修改。这是一个重复,只是要找到最好的dupetarget来指向你。哦,我明白了,似乎我没有理解,我想你可以用“=”为变量分配一个数组,所以它似乎只是引用它。好的,谢谢,现在有意义了,欢迎你,检查你问题的副本是的,编辑了我的问题,我没有看到另一个问题,因为与另一个问题的作者不同,我最初没有意识到参考