ArrayBuffer.prototype.slice()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

slice() 方法用于 ArrayBuffer 实例,它会返回一个新的 ArrayBuffer,该 ArrayBuffer 的内容是原始 ArrayBufferstart(包含)到 end(不包含)的字节的副本。如果 startend 为负数,则表示从数组末尾开始的索引,而不是从开头开始。

试一试

// Create an ArrayBuffer with a size in bytes
const buffer = new ArrayBuffer(16);
const int32View = new Int32Array(buffer);
// Produces Int32Array [0, 0, 0, 0]

int32View[1] = 42;
const sliced = new Int32Array(buffer.slice(4, 12));
// Produces Int32Array [42, 0]

console.log(sliced[0]);
// Expected output: 42

语法

js
slice()
slice(start)
slice(start, end)

参数

start 可选

用于开始提取的零基索引,转换为整数

  • 负数索引从缓冲区的末尾开始计数 — 如果 -buffer.length <= start < 0,则使用 start + buffer.length
  • 如果 start < -buffer.length 或省略了 start,则使用 0
  • 如果 start >= buffer.length,则返回一个空缓冲区。
end 可选

用于结束提取的零基索引,转换为整数slice() 会提取到 end 之前(不包含 end)。

  • 负数索引从缓冲区的末尾开始计数 — 如果 -buffer.length <= end < 0,则使用 end + buffer.length
  • 如果 end < -buffer.length,则使用 0
  • 如果 end >= buffer.length 或省略了 end(为 undefined),则使用 buffer.length,这将提取直到缓冲区末尾的所有元素。
  • 如果 end 表示的位置在 start 表示的位置之前或等于该位置,则返回一个空缓冲区。

返回值

包含提取元素的新 ArrayBuffer。即使原始缓冲区是可调整大小的,它也不是 可调整大小 的。

示例

复制 ArrayBuffer

js
const buf1 = new ArrayBuffer(8);
const buf2 = buf1.slice(0);

规范

规范
ECMAScript® 2026 语言规范
# sec-arraybuffer.prototype.slice

浏览器兼容性

另见