JavaScript 中的 slice() 函数用于从数组中提取指定范围的元素并返回一个新数组,不会修改原始数组。以下是详细用法和特点:
语法arr.slice(start, end)参数说明- start(必需):开始提取的索引(包含该索引元素)。若为负值,则从数组末尾倒数(例如 -1 表示最后一个元素)。
- end(可选):结束提取的索引(不包含该索引元素)。若省略或超出数组长度,默认到数组末尾;若为负值,同样从末尾倒数。
核心特点- 不修改原数组:始终返回新数组,原数组保持不变。
- 索引处理:
正索引从 0 开始。
负索引从 -1 开始(表示最后一个元素)。
- 边界情况:
若 start >= array.length,返回空数组。
若 start 或 end 为 NaN,视为 0。
若 start > end,交换两者位置后提取(但实际行为是返回空数组,因 end 不包含)。
示例代码const arr = [1, 2, 3, 4, 5];// 1. 基本用法:提取索引1到3(不包含3)console.log(arr.slice(1, 3)); // 输出: [2, 3]// 2. 省略end参数:从索引2提取到末尾console.log(arr.slice(2)); // 输出: [3, 4, 5]// 3. 负索引:从倒数第3个元素到倒数第1个(不包含)console.log(arr.slice(-3, -1)); // 输出: [3, 4]// 4. 超出范围:start超出长度console.log(arr.slice(10, 15)); // 输出: []// 5. start > end:返回空数组console.log(arr.slice(3, 1)); // 输出: []// 6. 原数组未被修改console.log(arr); // 输出: [1, 2, 3, 4, 5]常见用途- 复制数组:const newArr = arr.slice()(浅拷贝)。
- 提取部分数据:如分页处理时获取当前页数据。
- 处理类数组对象:如 arguments 或 NodeList 转换为数组:const args = Array.prototype.slice.call(arguments);
注意事项- 浅拷贝问题:若数组包含对象,新数组中的对象仍引用原对象。
- 性能:对大型数组频繁操作时,考虑其他方法(如 splice() 或直接遍历)。
通过灵活使用 slice(),可以高效处理数组子集,同时保持代码简洁和原数组安全。