从EverShop案例剖析IDOR漏洞:原理、测试与修复实战
2026/6/24 4:27:53
slice不修改原数组,splice会修改原数组。| 特性 | slice() | splice() |
|---|---|---|
| 是否修改原数组 | ❌ 不修改(返回新数组) | ✅ 修改原数组 |
| 主要用途 | 截取数组片段 | 添加/删除/替换元素 |
| 返回值 | 截取出的新数组 | 被删除的元素数组 |
| 参数 | (start, end) | (start, deleteCount, items...) |
| end参数 | 可选,不包含结束索引 | 无 end 参数 |
slice()- 截取(不改变原数组)const arr = ['a', 'b', 'c', 'd', 'e'] // 语法:arr.slice(start, end) // 从索引1开始,到索引3结束(不包含3) const result = arr.slice(1, 3) console.log(result) // ['b', 'c'] console.log(arr) // ['a', 'b', 'c', 'd', 'e'] ✅ 原数组不变 // 常用场景: arr.slice(0) // 浅拷贝整个数组 arr.slice(-2) // 从倒数第2个取到末尾 → ['d', 'e'] arr.slice(2) // 从索引2取到末尾 → ['c', 'd', 'e']splice()- 添加/删除/替换(改变原数组)const arr = ['a', 'b', 'c', 'd', 'e'] // 语法:arr.splice(start, deleteCount, item1, item2, ...) // 场景1:删除 const deleted = arr.splice(1, 2) // 从索引1开始,删除2个 console.log(deleted) // ['b', 'c'] console.log(arr) // ['a', 'd', 'e'] ⚠️ 原数组被修改 // 场景2:添加(deleteCount = 0) const arr2 = ['a', 'b', 'c'] arr2.splice(1, 0, 'x', 'y') console.log(arr2) // ['a', 'x', 'y', 'b', 'c'] // 场景3:替换 const arr3 = ['a', 'b', 'c'] arr3.splice(1, 1, 'x') // 从索引1开始,删除1个,添加'x' console.log(arr3) // ['a', 'x', 'c'] // 场景4:删除所有(从索引1开始) arr.splice(1) // 删除索引1及之后所有元素// ✅ 想要获取子数组 → 用 slice(不破坏原数据) const firstThree = arr.slice(0, 3) // ✅ 想要删除某几个元素 → 用 splice arr.splice(2, 1) // 删除索引2的元素 // ✅ 想要在中间插入 → 用 splice arr.splice(2, 0, 'newItem') // ✅ 想要复制数组 → 用 slice const copy = arr.slice()slice(),但没有splice()const str = 'hello' str.slice(1, 3) // 'el' ✅ 字符串可用 // str.splice() ❌ 字符串没有 splice 方法