会修改原数组的方法包括push()、pop()、shift()、unshift()、splice()、sort()、reverse()、fill()、copyWithin();不修改原数组的方法有concat()、slice()、map()、filter()、flatMap()、flat()、toReversed()、toSorted()、toSpliced();另有includes()等返回非数组且不修改原数组的方法。

会修改原数组的方法
这些方法直接改变调用它们的数组,执行后原数组内容、长度或顺序可能发生变化:
- push():在末尾添加元素,返回新长度
- pop():删除末尾元素,返回被删元素
- shift():删除开头元素,返回被删元素
- unshift():在开头添加元素,返回新长度
- splice():按索引增删改元素,返回被删除的元素数组
- sort():按字符串 Unicode 码点排序(注意:数字排序需传比较函数)
- reverse():反转数组元素顺序
- fill():用指定值填充指定范围的元素
- copyWithin():浅拷贝数组内部一段到另一段(不改变长度)
不修改原数组的方法
这些方法返回一个新数组(或其它类型值),原数组保持不变:
- concat():合并数组,返回新数组
- slice():提取子数组,返回新数组
- map():遍历映射,返回新数组
- filter():筛选元素,返回新数组
- flatMap():先 map 再 flat,返回新数组
- flat():扁平化嵌套数组,返回新数组
- toReversed()(ES2023):返回反转后的新数组(注意:不是 reverse())
- toSorted()(ES2023):返回排序后的新数组(注意:不是 sort())
- toSpliced()(ES2023):返回 splice 效果的新数组(注意:不是 splice())
返回非数组但也不修改原数组的方法
它们不改变原数组,且返回值不是数组(常用于判断、汇总或查找):
- includes():返回布尔值
- indexOf() / lastIndexOf():返回索引或 -1
- find() / findIndex():返回元素或索引
- some() / every():返回布尔值
- reduce() / reduceRight():返回累计值(任意类型)
- join():返回拼接后的字符串
- toString():返回逗号拼接的字符串
特别注意的“浅修改”行为
以下方法虽不改变数组长度或结构,但可能影响其内容——因为操作的是对象引用:
立即学习“Java免费学习笔记(深入)”;
- fill() 若填入的是同一个对象引用,所有位置指向同一对象
- copyWithin() 复制的是引用,对复制后的对象属性赋值会影响原位置对象
- sort() 和 reverse() 不改变引用本身,但若数组含对象,排序/反转后仍指向原对象(只是顺序变了)
真正安全的不可变操作,推荐配合展开语法或 structuredClone()(如需深拷贝)使用。


















