a=[1,2,3,4];
b=a;
c=b;
c.splice(3,1," ");
console.log(a); //输出是[ 1, 2, 3, ' ' ]
e=2;
d=e;
f=d;
f=3;
console.log(e);//输出是2
为什么会这样?还有我怎么才能让c数组经过splice 后不影响数组a的值呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
首先你要先了解一下splice方法,可以看看w3school的解释:JavaScript splice() 方法

需要特别注意一下:
而你的b和c都是对a数组的内存引用,所以你想要的是一个深拷贝。
可以看看下面这两种方式:
1、js的slice函数
代码如下:
2、js的concat方法
代码如下:
数组为引用类型,赋值引用同一个地址
b=JSON.parse(JSON.stringify(a));c=JSON.parse(JSON.stringify(b))一个是地址引用一个是值引用的关系,建议楼主多看一些JS基础书。
要想改变C数组不影响A数组,需要将A数组的值copy一份到C数组中。然后在修改C数组
首先要理解JavaScript中的赋值
对于
数组和对象,是引用赋值,不会拷贝一份,而只是一个指针,指向的是同一份数据。所以要么
拷贝一份你的数组简单的数组拷贝,假设数组元素中没有数组或者对象
此时b和a是两份独立的数据
或者使用无副作用的数组方法(
splice方法会改变原数组)例如用
slice等不会改变原数组的方法替代题主没分清楚赋值的主要两种情况:一个是赋值的是原始类型如数值、布尔值,另一个是对象。
如果你学过c/c++等语言,大概也能知道一点,那就是 对象赋值 相当于是 赋值的是对象的地址。
所以当
b=a时,b只是跟a一样指向了同一个对象 ,所以改b指向的内容,a也会跟着变化 ,因为他们指的同一个地方。这标题不妥,如果你想不影响到数组a的话,不妨用slice
..........