aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/blob/slice/index.html
blob: 7b0dff2d4ded7ec21e12c503708fddfed0122fbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
---
title: Blob.slice
slug: Web/API/Blob/slice
translation_of: Web/API/Blob/slice
---
<p>{{APIRef("File API")}}</p>

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

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

<h2 id="语法">语法</h2>

<pre>var blob = instanceOfBlob.slice([start [, end [, contentType]]]};</pre>

<h3 id="参数">参数</h3>

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

<h3 id="返回值">返回值</h3>

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

<h2 id="Browser_Compatibility" name="Browser_Compatibility">规范</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">规范</th>
   <th scope="col">状态</th>
   <th scope="col">注释</th>
  </tr>
  <tr>
   <td>{{SpecName('File API','#dfn-slice','slice')}}</td>
   <td>{{Spec2('File API')}}</td>
   <td>Initial definition.</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容</h2>

<p>{{ CompatibilityTable() }}</p>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>功能</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari (WebKit)</th>
  </tr>
  <tr>
   <td>基本支持</td>
   <td>10 {{property_prefix("webkit")}}<br>
    21</td>
   <td>5 {{ property_prefix("moz") }}<br>
    13</td>
   <td>10</td>
   <td>12</td>
   <td>5.1 (<a class="external" href="http://trac.webkit.org/changeset/83873">534.29</a>) {{ property_prefix("webkit") }}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>功能</th>
   <th>Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Phone</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>基本支持</td>
   <td>{{ CompatUnknown() }}</td>
   <td>{{ CompatGeckoMobile("13.0") }}</td>
   <td>{{ CompatUnknown() }}</td>
   <td>{{ CompatUnknown() }}</td>
   <td>{{ CompatUnknown() }}</td>
  </tr>
 </tbody>
</table>
</div>

<h3 id="实现_slice_的一些声明">实现 slice() 的一些声明</h3>

<p><code>slice()</code> 方法第二个参数的默认值将会传入原始 Blob 的长度。 如果你在调用的时候传入的 <span style="font-family: 'Courier New','Andale Mono',monospace; line-height: normal;">start + length</span> 超出了原始 <span style="font-family: 'Courier New','Andale Mono',monospace; line-height: normal;">Blob</span> 的长度,那么返回的 <span style="font-family: 'Courier New','Andale Mono',monospace; line-height: normal;">Blob </span> 对象将会包含从 start 到原始数据的末尾。</p>

<p>那个版本的 slice() 在 <a class="link-https" href="https://hg.mozilla.org/mozilla-central/rev/1b3947ed93c6" style="line-height: 1.5;">Firefox 4</a><span style="line-height: 1.5;"> </span><a class="external" href="http://trac.webkit.org/changeset/55670" style="line-height: 1.5;">WebKit</a> 和 <a class="external" href="http://www.opera.com/docs/specs/presto28/file/#blob" style="line-height: 1.5;">Opera 11.10</a> 中实现了。但是它的语法和 Array.slice() 以及 String.slice() 有所出入,所以 Gecko 和 Webkit 移除掉了它的支持并且加上了新语法的支持 <span style="line-height: 1.5;"> </span><span style="line-height: 1.5;">{{ manch("mozSlice") }}/</span><code style="line-height: 1.5; font-size: 14px;"><a class="external" href="http://trac.webkit.org/changeset/83873" style="line-height: 1.5;">Blob.webkitSlice</a></code></p>

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

<h3 id="Gecko_notes">Gecko notes</h3>

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

<h2 id="参见">参见</h2>

<ul>
 <li>{{domxref("Blob")}}</li>
 <li>{{domxref("BlobBuilder")}}</li>
</ul>