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

JavaScript数组赋值疑问:修改z为何会让x从[1,2,3]变为[1,2,4]?

为什么修改z会影响x?

这是因为在JavaScript里,数组属于引用类型,和数字、字符串这类基本类型的赋值逻辑完全不一样。咱们一步步拆解你的代码来理解:

  1. 执行var x = [1, 2, 3];时,内存里会创建一个实际的数组对象[1,2,3],而变量x保存的并不是这个数组的内容,而是指向这个数组的引用地址——相当于x拿着一张写着数组位置的纸条。
  2. 接着var z = x;这一步,不是把x的数组完整复制一份给z,而是把x手里的那张“地址纸条”直接递给了z。现在x和z拿着的是同一张纸条,指向内存里同一个数组对象,就像两个人共用同一把钥匙,打开的是同一个房间。
  3. 最后执行z[2] = y[0];,其实是通过z的引用找到那个共用的数组,把索引2的位置改成了y[0]的值也就是4。既然x指向的是同一个数组,那用console.log(x)输出时,自然会看到修改后的结果[1, 2, 4]。

如果想让z成为x的独立副本,修改z不影响x,可以用这些方法:

  • 展开运算符:var z = [...x];
  • Array.from()方法:var z = Array.from(x);
  • 数组切片:var z = x.slice();

这样z就会指向一个全新的数组对象,和x各自独立,后续修改其中一个就不会影响另一个了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:09