TypedArray.prototype.slice()

slice() メソッドは、型付き配列の一部の浅いコピーを新しい型付き配列に入れて返します。このメソッドは Array.prototype.slice() と同じアルゴリズムを持ちます。 TypedArray は、ここでは型付き配列型の一つです。

構文

typedarray.slice([begin[, end]])

引数

begin Optional
抽出範囲の先頭の位置を示す 0 から始まる添字です。
負の添字を使って、配列の末尾からの相対位置を表すことができます。 slice(-2) は配列の最後から 2 番目の要素と最後の要素を抽出します。
begin を省略した場合、 slice0 番目の要素から開始します。
end Optional
抽出範囲の末尾の直前の位置を示す 0 から始まる添字です。 sliceend 自体は含めず、その直前まで抽出します。
slice(1,4) は 2 番目の要素から 4 番目の要素まで (添字が 1, 2, 3 の要素) を取り出します。
負の添字を使って、配列の末尾からの相対位置を表すことができます。 slice(2,-1) は配列の 3 番目の要素から、最後から 2 番目の要素まで取り出します。
end が省略された場合、 slice は配列の最後 (typedarray.length) まで取り出します。

返値

抽出された要素が入った新しい型付き配列。

解説

slice メソッドは元の配列を変更しません。元の配列から取り出された要素のコピーを含む浅いコピーを返します。

一方の型付き配列に新しい要素が追加されても、他方の型付き配列に影響はしません。

ポリフィル

TypedArray という名前のグローバルオブジェクトがないため、ポリフィルは「必要に応じて」の原則で行う必要があります。

if (!Uint8Array.prototype.slice) {
  Object.defineProperty(Uint8Array.prototype, 'slice', {
    value: function (begin, end)
     {
        return new Uint8Array(Array.prototype.slice.call(this, begin, end));
     }
  });
}

Object.defineProperty に対応していない本当に古い JavaScript エンジンに対応する必要がある場合は、列挙可能ではないので Array.prototype メソッドのポリフィルを使用しないようにする必要があります。

例: 既存の配列の一部を返す

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 ]

仕様書

仕様書
ECMAScript (ECMA-262)
%TypedArray%.prototype.slice の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
sliceChrome 完全対応 45Edge 完全対応 14Firefox 完全対応 38IE 未対応 なしOpera 完全対応 32Safari 完全対応 10WebView Android 完全対応 45Chrome Android 完全対応 45Firefox Android 完全対応 38Opera Android 完全対応 32Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 4.0.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報