Array.slice() 与 Array.splice() 的区别?

本文详细介绍了JavaScript中Array.slice()和Array.splice()两个方法的区别。Array.slice()用于无损地从数组中提取部分元素,不改变原始数组,而Array.splice()则可以用于删除或插入元素,直接修改原数组。了解这两个方法的用法和差异对于高效编程至关重要。

Array.slice() 与 Array.splice() 的区别?

slice

“读取”数组指定的元素,不会对原数组进行修改

  • 语法:arr.slice(start, end)
  • start 指定选取开始位置(含)
  • end 指定选取结束位置(不含)

splice

  • “操作”数组指定的元素,会修改原数组,返回被删除的元素
  • 语法:arr.splice(index, count, [insert Elements])
  • index 是操作的起始位置
  • count = 0 插入元素,count > 0 删除元素
  • [insert Elements] 向数组新插入的元素
<think> 我们被要求解释JavaScriptarray.slice()方法的使用 根据引用[3]:Array.slice()方法返回指定数组的一个片段或子数组。它的两个参数分别指定了片段的开始结束的位置。 引用[2][1]则提到了Array.prototype.slice.call()的用法,用于将类数组对象(如arguments)转换为数组并调用slice方法。 我们将从以下几个方面进行说明: 1. slice方法的基本用法 2. 参数说明(包括负数索引) 3. 不会修改原数组 4. 使用slice将类数组对象转换为数组 根据引用[3]引用[4]的内容,我们可以详细说明。 注意:用户要求尽可能参考引用,并且在回答中引用段落末尾自然地添加引用标识。 我们将这样组织回答: 一、基本语法 二、参数详解(含示例) 三、注意事项 四、扩展应用(包括将类数组对象转为数组) 最后生成相关问题。 </think>### JavaScript 中 `array.slice()` 方法详解 `array.slice()` 是 JavaScript 数组的核心方法,用于提取数组片段而不修改原数组。以下是关键使用要点: #### 1. **基础用法** - **语法**:`array.slice(start, end)` - **参数**: - `start`:提取起始索引(包含) - `end`:提取结束索引(不包含,可省略) - **特性**: - 返回新数组,原数组不变 - 负索引表示从末尾倒数(如 `-1` 表示最后一个元素)[^3] ```javascript const fruits = ['🍎', '🍌', '🍊', '🍇', '🍓']; // 提取索引1到3(不含3) console.log(fruits.slice(1, 3)); // ['🍌', '🍊'] // 仅指定起始索引 console.log(fruits.slice(2)); // ['🍊', '🍇', '🍓'] // 负索引用法 console.log(fruits.slice(-3, -1)); // ['🍊', '🍇'] ``` #### 2. **特殊场景应用** - **复制整个数组**: ```javascript const copy = fruits.slice(); // ['🍎', '🍌', '🍊', '🍇', '🍓'] ``` - **获取数组首尾元素**: ```javascript const firstTwo = fruits.slice(0, 2); // ['🍎', '🍌'] const lastTwo = fruits.slice(-2); // ['🍇', '🍓'] ``` - **移除首个元素**: ```javascript const remaining = fruits.slice(1); // ['🍌', '🍊', '🍇', '🍓'] ``` #### 3. **类数组对象转换** 使用 `Array.prototype.slice.call()` 可将类数组对象(如 `arguments`)转为真实数组: ```javascript function listArguments() { // arguments 是类数组对象 const argsArray = Array.prototype.slice.call(arguments); console.log(argsArray); // ['A', 'B', 'C'] } listArguments('A', 'B', 'C'); ``` > 直接调用 `arguments.slice()` 会报错,必须通过原型链调用[^1][^2] #### 4. **注意事项** 1. **索引边界**: - 起始索引超范围 → 返回空数组 - 结束索引超范围 → 提取到数组末尾 ```javascript console.log(fruits.slice(10)); // [] console.log(fruits.slice(1, 10)); // ['🍌', '🍊', '🍇', '🍓'] ``` 2. **浅拷贝特性**: ```javascript const items = [{id: 1}, {id: 2}]; const sliced = items.slice(0, 1); sliced[0].id = 99; // 修改会影响原数组 console.log(items); // [{id: 99}, {id: 2}] ``` 3. **对比 `splice()`**: | 方法 | 返回值 | 是否修改原数组 | 参数含义 | |------------|-------------|---------------|-----------------------| | `slice()` | 新数组 | ❌ 否 | (起始索引, 结束索引) | | `splice()` | 被删除的元素 | ✔️ 是 | (起始索引, 删除数量) | --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码哥・Martin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值