在 JavaScript 中,slice
和 splice
是两个与数组操作相关的方法,它们的名字来源于英语单词,具有直观的字面意思。理解它们的字面含义可以帮助你更好地记住它们的功能和区别。下面我从字面意思出发,结合功能进行解释。
1. slice
字面意思
- 英文:
slice
的意思是“切片”或“薄片”。 - 形象理解:像用刀从一大块食物(如面包、蛋糕)上切下一片薄薄的部分,但不影响原来的整体结构。
- 引申:提取一部分,保留原始对象完整。
在 JavaScript 中的功能
- 作用:从数组中“切”出一段子数组,返回一个新数组,原数组保持不变。
- 特点:非破坏性(non-destructive),只“取走”一份副本。
- 类比:就像从一整块蛋糕上切下一片,原蛋糕还是完整的。
示例
1 2 3 4 |
const arr = ["apple", "banana", "orange", "grape"]; const piece = arr.slice(1, 3); console.log(piece); // ["banana", "orange"](切下的一片) console.log(arr); // ["apple", "banana", "orange", "grape"](原数组未变) |
- 理解:从索引
1
到3
(不含3
)“切”出一片,得到["banana", "orange"]
。
2. splice
字面意思
- 英文:
splice
的意思是“拼接”或“接合”,但在实际使用中,它更常指“剪接”或“插入”(尤其在生物学或电影剪辑中,如基因拼接、胶片剪接)。 - 形象理解:像用剪刀把一段绳子或胶片剪掉,然后可能在剪掉的地方接上其他东西。关键是这个过程会改变原始结构。
- 引申:移除一部分,并可能插入新内容,原始对象会被修改。
在 JavaScript 中的功能
- 作用:从数组中“剪”掉一部分(移除元素),并可以选择在剪掉的位置“拼接”上新元素,原数组会被修改。
- 特点:破坏性(destructive),直接改变原数组,返回被移除的元素。
- 类比:就像从一段绳子上剪掉一部分,然后可能接上新的绳子,原绳子变了。
示例
1 2 3 4 |
const arr = ["apple", "banana", "orange", "grape"]; const removed = arr.splice(1, 2, "kiwi", "mango"); console.log(removed); // ["banana", "orange"](被剪掉的部分) console.log(arr); // ["apple", "kiwi", "mango", "grape"](原数组被修改) |
- 理解:
- 从索引
1
开始,剪掉2
个元素("banana", "orange"
)。 - 在剪掉的位置拼接上
"kiwi", "mango"
。 - 原数组被改变。
字面意思对比
方法 | 字面意思 | 形象类比 | JS 中的行为 |
---|---|---|---|
slice | 切片 | 从蛋糕切下一片,原蛋糕不变 | 提取子数组,原数组不变 |
splice | 剪接/拼接 | 剪掉绳子一段,可接上新段 | 移除元素并可插入,原数组变 |
记忆技巧
slice
(切片):- “Slice of pizza”:切下一片披萨,原披萨还在,只是少了一片。
- 联想:只是“拿走”一份,不动原物。
splice
(剪接):- “Splice a film”:剪掉胶片一段,再接上新的,原始胶片变了。
- 联想:动刀“剪掉”并“拼接”,原物被改造。
扩展:语法对比
slice(start, end)
- 只取,不改。
- 示例:
arr.slice(1, 3)
→ 取[1]
到[2]
的元素。
splice(start, deleteCount, ...items)
- 剪掉并可选拼接。
- 示例:
arr.splice(1, 2, "x")
→ 从[1]
开始删2
个,插入"x"
。
总结
splice
:字面是“剪接”,功能是“剪掉并拼接”,修改原数组。
slice
:字面是“切片”,功能是“取出一片”,不破坏原数组。