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方法,因为您无法使它们不可枚举。

规范

SpecificationStatusComment
ECMAScript 2015 (6th Edition, ECMA-262)The definition of '%TypedArray%.prototype.slice' in that specification.StandardInitial definition.
ECMAScript Latest Draft (ECMA-262)The definition of '%TypedArray%.prototype.slice' in that specification.Living Standard

浏览器兼容性

FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support4538 (38)No supportNo supportNo support

FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic supportNo supportNo support38 (38)No supportNo supportNo support