typedArray.slice
typedArray.slice
slice()
方法返回一个typed array的部分类型数组对象,数组内容采用浅拷贝方式. 方法采用与 Array.prototype.slice()
相同的算法.类型数组
是 typed array types成员中的一员 .
语法
typedarray.slice([begin[, end]])
参数
begin:起始位置
可选从0开始的索引位置;负值索引, 表示与数组尾元素的偏移量.slice(-2)
表示提取数列中的末尾两个元素.如果没有设定起始位置,则将从开始位置开始截取。end:结束位置
可选从零开始到尾元素前的索引值.slice
取出元素时包含起始节点,单不包含结束节点。例,slice(1,4)
表示读取第二个元素到第四个元素(元素索引位置:1, 2, and 3).负值索引, 表示与数组尾元素的偏移量。slice(2,-1)
表示取出数组中的第三个到最后一个之间的所有元素.如果没有设定结束位置,则将从开始位置截取到序列尾部。(typedarray.length
).
返回值
包含取出元素的新的 typed array
描述
slice方法并不会改变原数组的内容,他只是返回从原数组中取出的元素的浅复制集合。
如何一个新元素被添加到任何一个数组中去,则另外一个数组不会发生变化。
示例
返回已存在类型数组的部分片段
var uint8 = new Uint8Array([1,2,3]
uint8.slice(1 // Uint8Array [ 2, 3 ]
uint8.slice(2 // Uint8Array [ 3 ]
uint8.slice(-2 // Uint8Array [ 2, 3 ]
uint8.slice(0,1 // Uint8Array [ 1 ]
Polyfill
由于没有名称为TypedArray的
全局对象,因此必须在“根据需要”的基础上进行填充
。
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice
if (!Uint8Array.prototype.slice) {
Object.defineProperty(Uint8Array.prototype, 'slice', {
value: Array.prototype.slice
}
}
这不是一个完整的polyfill,因为它返回的是一个Array实例,而不是Uint8Array,所以它没有通常存在于TypedArray上的属性。
如果您需要支持真正过时的不支持的JavaScript引擎,Object.defineProperty
最好不要填充Array.prototype
方法,因为您无法使它们不可枚举。
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262)The definition of '%TypedArray%.prototype.slice' in that specification. | Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262)The definition of '%TypedArray%.prototype.slice' in that specification. | Living Standard | |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 45 | 38 (38) | No support | No support | No support |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | No support | No support | 38 (38) | No support | No support | No support |