【JS三兄弟谁是谁】搞懂 splice、slice、split,只需一杯奶茶的时间!

JavaScript 有三兄弟,经常一起"切人"。

他们名字相似、功能相关,但性格迥异,常被搞混。

今天,就带你喝着奶茶,笑着剖析,帮你彻底搞懂:
spliceslicesplit 到底是谁?干了啥?凭啥这么火?


🍿 一、三兄弟登场:不同对象,不同任务

名称 作用对象 是否修改原对象 返回类型 功能简述
splice 数组 ✅ 是 被删除元素数组 原地删除元素并可插入新元素
slice 数组 / 字符串 ❌ 否 副本(子集) 复制选中部分,原体不动
split 字符串 ❌ 否 数组 按分隔符拆分成字符串数组

👤 三兄弟性格画像:

  • splice:动刀硬汉,"你让我切,我就直接改了,还能塞新料"
  • slice:温柔摄影师,"我只是帮你剪一块,别担心,我不动本体"
  • split:爆破专家,"给我个分隔符,我让字符串四分五裂"

🥩 二、splice ------ 原数组的"改造师"

🧬 语法:

c 复制代码
array.splice(start, deleteCount, item1, item2, ...)

🧠 参数说明

参数 说明
start 操作起始索引(可负数,表示从尾部开始)
deleteCount 要删除的元素数量
item1... 要插入的新元素(可选)

🔬 作用细节

  • 删除 deleteCount 个元素
  • 插入 itemX 元素(可选)
  • 原地修改原数组
  • 返回被删除的元素组成的数组

🧪 示例

bash 复制代码
let arr = ['🥚', '🥓', '🍞', '🥑'];
let res = arr.splice(1, 2, '🧀', '🍅');
console.log(arr); // ['🥚', '🧀', '🍅', '🥑']
console.log(res); // ['🥓', '🍞']

🧠 实现逻辑简析(伪代码)

ini 复制代码
function splice(arr, start, deleteCount, ...items) {
  const deleted = arr.slice(start, start + deleteCount); // 先复制要删除部分
  const before = arr.slice(0, start);
  const after = arr.slice(start + deleteCount);
  arr.length = 0;
  arr.push(...before, ...items, ...after); // 原地重构数组
  return deleted;
}

📌 注意点

  • start 超出范围时会被限制在数组末尾
  • deleteCount 超出实际删除范围不会报错
  • 可以只删除不插入,或只插入不删除(deleteCount 为 0)

🍰 三、slice ------ 不动声色的"复制专家"

🧬 语法

sql 复制代码
array.slice(start, end)
string.slice(start, end)

半开区间 [start, end),取从 startend(不含)的部分。

🧠 参数说明

参数 说明
start 起始索引(可为负数)
end 结束索引(可省略)

🧪 示例

css 复制代码
let fruits = ['🍓', '🍒', '🍍', '🥝'];
let res = fruits.slice(1, 3);
console.log(res);      // ['🍒', '🍍']
console.log(fruits);   // ['🍓', '🍒', '🍍', '🥝']  原数组未改动

🔬 实现简析

ini 复制代码
function slice(arr, start, end) {
  const result = [];
  start = normalizeIndex(start, arr.length);
  end = normalizeIndex(end ?? arr.length, arr.length);
  for (let i = start; i < end; i++) {
    result.push(arr[i]);
  }
  return result;
}

也可用于字符串,返回子串。


✂️ 四、split ------ 字符串的"爆破能手"

🧬 语法

bash 复制代码
string.split(separator, limit)

🧠 参数说明

参数 说明
separator 分隔符(字符串或正则表达式)
limit 最多返回元素个数(可选)

🧪 示例

ini 复制代码
let str = "你/我/他/她";
let parts = str.split('/');
console.log(parts); // ['你', '我', '他', '她']

let limited = str.split('/', 2);
console.log(limited); // ['你', '我']

💡 使用小技巧

  • str.split('') 把字符串拆成单字数组
  • 正则表达式支持复杂拆分,如空白、标点等

🔬 简化模拟

bash 复制代码
function split(str, sep, limit) {
  let parts = str.split(sep);
  return parts.slice(0, limit ?? parts.length);
}

🎓 五、终极口诀:一秒区分三兄弟

🪓 记住这句:

  • Splice 改数组,一刀两断再塞新

  • Slice 拷贝段,半开区间不伤真

  • Split 拆字符串,按符爆破成碎银
    🔢 加个数字口诀:

  • 5 分裂(split)

  • 6 切片(slice)

  • 7 动刀(splice)
    🧩 字母联想:

  • sp 是"拼割"的信号,

  • 多一个 p(splice)意味着"拼接",

  • 少一个 p(slice)意味着"切片",

  • 结尾 lit(split)像"炸裂"。


🧠 六、常见误区与注意点

  1. slice 不改原数组,splice 会
  2. split 的参数是分隔符,不是索引
  3. splice 返回被删元素数组,而非新数组
  4. slice 可用于字符串,splice 仅限数组

🧪 七、面试加餐题

ini 复制代码
let arr = ['a', 'b', 'c', 'd'];
let res = arr.splice(1, 2).slice(0, 1).join().split('');
console.log(res);

步骤解析:

  1. arr.splice(1, 2) 删除 'b', 'c',返回 ['b', 'c']
  2. .slice(0,1) 取第一项 ['b']
  3. .join() 转成字符串 'b'
  4. .split('') 拆成数组 ['b']

✅ 输出:['b']


🧩 八、终章总结表

方法 操作对象 返回类型 是否改原对象 功能简述
splice 数组 数组 ✅ 是 删除 / 插入 / 替换
slice 数组 / 字符串 子集 ❌ 否 复制指定范围
split 字符串 数组 ❌ 否 拆成多个子字符串

🍵 写在最后

JS 三兄弟虽长得相似,但性格鲜明。

掌握他们,你就拥有了三把强力的"切割刀":

  • 动刀重塑的 splice
  • 温柔取片的 slice
  • 震慑爆裂的 split

下次使用时,不怕混淆,轻松辨别,写出干净利落的代码!

相关推荐
老坛0011 分钟前
从记录到预测:2025新一代预算工具如何通过AI实现前瞻性资金管理
前端
今禾4 分钟前
" 当Base64遇上Blob,图像转换不再神秘,让你的网页瞬间变身魔法画布! "
前端·数据可视化
华科云商xiao徐8 分钟前
高性能小型爬虫语言与代码示例
前端·爬虫
十盒半价9 分钟前
深入理解 React useEffect:从基础到实战的全攻略
前端·react.js·trae
攀登的牵牛花10 分钟前
Electron+Vue+Python全栈项目打包实战指南
前端·electron·全栈
iccb101310 分钟前
我是如何实现在线客服系统的极致稳定性与安全性的
前端·javascript·后端
一大树11 分钟前
Vue3祖孙组件通信方法总结
前端·vue.js
不要进入那温驯的良夜12 分钟前
跨平台UI自动化-Appium
前端
海底火旺13 分钟前
以一个简单的React应用理解数据绑定的重要性
前端·css·react.js
不要进入那温驯的良夜13 分钟前
浏览器技术原理
前端