--- title: Blob.slice slug: Web/API/Blob/slice translation_of: Web/API/Blob/slice ---

{{APIRef("File API")}}

Blob.slice() 方法用于创建一个包含源 {{domxref("Blob")}}的指定字节范围内的数据的新 {{domxref("Blob")}} 对象。

注释: 请注意, 在某些浏览器和版本上具有供应商前缀:例如:Firefox 12及更早版本的blob.mozSlice() 和 Safari中的 blob.webkitSlice(). slice() 方法的旧版本,没有供应商前缀,具有不同的语义,并且已过时。

语法

var blob = instanceOfBlob.slice([start [, end [, contentType]]]};

参数

start {{ optional_inline() }}
这个参数代表 {{domxref("Blob")}} 里的下标,表示第一个会被会被拷贝进新的 {{domxref("Blob")}} 的字节的起始位置。如果你传入的是一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。举例来说, -10 将会是  {{domxref("Blob")}} 的倒数第十个字节。它的默认值是0, 如果你传入的start的长度大于源 {{domxref("Blob")}} 的长度,那么返回的将会是一个长度为0并且不包含任何数据的一个 {{domxref("Blob")}} 对象。
end {{ optional_inline() }}
这个参数代表的是 {{domxref("Blob")}} 的一个下标,这个下标-1的对应的字节将会是被拷贝进新的{{domxref("Blob")}} 的最后一个字节。如果你传入了一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。举例来说, -10 将会是 {{domxref("Blob")}} 的倒数第十个字节。它的默认值就是它的原始长度(size).
contentType {{ optional_inline() }}
给新的 {{domxref("Blob")}} 赋予一个新的文档类型。这将会把它的 type 属性设为被传入的值。它的默认值是一个空的字符串。

返回值

一个新的 {{domxref("Blob")}} 对象,它包含了原始 {{domxref("Blob")}} 对象的某一个段的数据。

规范

规范 状态 注释
{{SpecName('File API','#dfn-slice','slice')}} {{Spec2('File API')}} Initial definition.

浏览器兼容

{{ CompatibilityTable() }}

功能 Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
基本支持 10 {{property_prefix("webkit")}}‡
21
5 {{ property_prefix("moz") }}‡
13
10 12 5.1 (534.29) {{ property_prefix("webkit") }}
功能 Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
基本支持 {{ CompatUnknown() }} {{ CompatGeckoMobile("13.0") }} {{ CompatUnknown() }} {{ CompatUnknown() }} {{ CompatUnknown() }}

实现 slice() 的一些声明

slice() 方法第二个参数的默认值将会传入原始 Blob 的长度。 如果你在调用的时候传入的 start + length 超出了原始 Blob 的长度,那么返回的 Blob  对象将会包含从 start 到原始数据的末尾。

那个版本的 slice() 在 Firefox 4 WebKit 和 Opera 11.10 中实现了。但是它的语法和 Array.slice() 以及 String.slice() 有所出入,所以 Gecko 和 Webkit 移除掉了它的支持并且加上了新语法的支持  {{ manch("mozSlice") }}/Blob.webkitSlice

从 Gecko 13.0 {{ geckoRelease("13.0") }} 和 Chrome 21 开始, {{ manch("slice") }} 就再也没有浏览器前缀了。

Gecko notes

在先前的 Gecko 12.0 {{ geckoRelease("12.0") }}, 有一个 bug 会影响到 {{ manch("slice") }} 的行为; 他在 start 和 end 位置组成的范围超出 signed 64-bit 值的范围的时候不工作; 这个问题已经被解决,现在支持传入 unsigned 64-bit 值.

参见