You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么JS中使用splice修改数组会影响所有引用该数组的变量?

问题原因解释

这是JavaScript引用数据类型的特性导致的:

  • 数组属于引用类型,你代码中arr、arrayBase、arrayData三个变量存储的不是数组本身的内容,而是同一个数组在堆内存中的存储地址,三个变量都指向同一个数组实例。
  • splice是会直接修改原数组的方法,你通过arrayData调用splice时,本质是修改了堆内存中共享的数组实例,所以所有指向该地址的变量(包括arrayBase、arr)读取到的内容都会同步变化。
修正方案

如果要让arrayBase和arrayData成为互不影响的独立数组,需要对原数组做浅拷贝再赋值,常用写法有以下几种:

  • 展开运算符写法
const arrayBase = [...arr]
let arrayData = [...arr]
  • 数组slice方法写法
const arrayBase = arr.slice()
let arrayData = arr.slice()
  • Array.from静态方法写法
const arrayBase = Array.from(arr)
let arrayData = Array.from(arr)

另外你的代码还存在几处可修正的问题:

  • 累加变量x没有赋初始值,直接累加会得到NaN,需要改为let x = 0
  • 最小值判断逻辑写反,当前if(min<x)和最大值判断逻辑一致,需要改为if(x < min),同时min的初始值建议设为无穷大let min = Infinity
  • 未声明的arrayDataabc直接赋值会自动成为全局变量,建议先声明再使用

内容的提问来源于stack exchange,提问作者Gerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:06