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

为何仅排序array1,用new Array创建的array2也被排序?(JavaScript)

为什么对array1执行sort()后,array2也被排序了?

复现代码

let array1 = [88,66,33,44,11,67,32,56];
let array2  = new Array(array1);
array1.sort();
console.log(array2);

问题说明

创建包含随机数值的array1,用new Array(array1)创建array2,仅对array1调用sort()方法,打印array2时却发现它也被排序了,预期array2应该保持未排序状态,想知道原因。


原因分析

  1. new Array(array1)不是创建数组副本:当你把数组(引用类型)传给new Array()时,不会复制原数组的内容,而是生成一个只有1个元素的新数组,这个元素就是原数组array1的引用——简单说,array2[0]和array1指向内存里同一个数组对象。
  2. sort()是原地修改方法:Array.prototype.sort()会直接修改调用它的原数组本身,不会返回新数组。

所以你调用array1.sort()时,其实是修改了array1指向的那个数组对象,而array2[0]和它指向同一个对象,自然打印array2时会看到排序后的结果。

正确创建独立数组副本的方法

如果要让array2不受array1修改的影响,需要创建原数组的独立副本,常用方法有三种:

  • 扩展运算符:
    let array2 = [...array1];
    
  • slice()方法:
    let array2 = array1.slice();
    
  • Array.from()方法:
    let array2 = Array.from(array1);
    

用这些方式创建的array2是全新的数组,和array1互不影响,修改array1不会改变array2的内容。


内容的提问来源于stack exchange,提问作者Corner Stone Developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:25:33