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

疑惑:Array作为引用类型,JS代码执行结果为何不符合预期?

为什么重新赋值数组变量后,另一个变量没有跟着变化?

你混淆了变量的引用赋值和修改引用指向的对象这两个操作,这是JS引用类型最容易踩的坑之一,拆解你的代码一步步看:

  1. let a = [1, 2, 3]
    这里a是一个变量,它存储的是指向内存中数组[1,2,3]的引用地址,而不是数组本身。

  2. let b = a
    这一步是把a里存储的引用地址复制给了b,所以现在a和b都指向同一个数组对象。

  3. a = [1, 2]
    这一步不是修改原来的数组,而是给a变量重新赋值了一个全新的数组引用——相当于a现在指向了内存中另一个新的数组[1,2],但b的引用地址还是原来那个[1,2,3]的地址,所以console.log(b)自然输出原来的数组。

如果要让b跟着变化,你需要修改的是引用指向的数组本身,而不是给变量重新赋值,比如:

let a = [1, 2, 3]
let b = a
a.pop() // 修改原来的数组,移除最后一个元素
console.log(b) // 输出 [1,2]

或者直接修改数组元素:

let a = [1, 2, 3]
let b = a
a[2] = 4 // 修改原数组的第三个元素
console.log(b) // 输出 [1,2,4]

总结:

  • 引用类型变量存储的是对象的内存引用地址,而非对象本身
  • 复制引用类型变量时,复制的是引用地址,两个变量会指向同一个对象
  • 给变量重新赋值新对象,只会改变当前变量的引用地址,不会影响其他变量的引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:45:31