slice()和splice()傻傻分不清?一文带你理清

602 阅读2分钟

slice() 和 splice() 终极对比指南

一句话总结
👉 slice()提取数组片段(不改变原数组)
👉 splice()修改数组(增删改元素,改变原数组)


1. splice() - 修改数组

功能

在数组中添加/删除/替换元素(直接修改原数组)。

语法

array.splice(start, deleteCount, item1, item2, ..., itemN)

参数说明

参数说明
start起始索引(负数表示从末尾倒数)
deleteCount要删除的元素数量(省略则删除从 start 到末尾所有元素)
item1...itemN要插入的新元素(可选)

返回值

被删除元素组成的数组(若无删除则返回空数组)。

示例

const arr = ["A", "B", "C", "D"];

// 在索引1处插入元素(不删除)
arr.splice(1, 0, "X"); 
// arr → ["A", "X", "B", "C", "D"]

// 删除索引2起的1个元素,并插入"Y"
arr.splice(2, 1, "Y"); 
// arr → ["A", "X", "Y", "C", "D"]

// 删除最后2个元素
arr.splice(-2); 
// arr → ["A", "X"],返回被删除的["Y","C"]

2. slice() - 提取数组片段

功能

浅拷贝数组的一部分(不改变原数组)。

语法

array.slice([start], [end])

参数说明

参数说明
start起始索引(含,负数表示从末尾倒数)
end结束索引(不含,省略则截取到末尾)

返回值

新数组(包含提取的元素)。

示例

const arr = ["A", "B", "C", "D"];

arr.slice(1);    // → ["B", "C", "D"](索引1到末尾)
arr.slice(1, 3); // → ["B", "C"](索引1到3,不含3)
arr.slice(-2);   // → ["C", "D"](倒数第2位到末尾)
arr.slice();     // → 浅拷贝整个数组 ["A", "B", "C", "D"]

核心区别总结

特性splice()slice()
功能增删改数组元素提取数组片段
原数组直接修改不修改
返回值被删除的元素组成的新数组提取的元素组成的新数组
参数(start, deleteCount, items)(start, end)
使用场景动态修改数组内容安全获取子数组

记忆技巧

  1. 名字联想

    • splice → "剪接"(像剪接电影,修改原内容)
    • slice → "切片"(像切蛋糕,取走一部分但不破坏原蛋糕)
  2. 参数关键

    • splicedeleteCount(强调删除操作)
    • sliceend(强调截取范围)
  3. 副作用

    • splice 会改变原数组(谨慎使用!)
    • slice 绝对安全(纯读取操作)

何时使用?

  • 需要 删除/插入/替换 元素 → splice()
  • 需要 复制子数组避免修改原数组slice()

掌握这两者的区别,JavaScript 数组操作再无困惑! 🚀