Firefox 32(Nightly) で Array.prototype.copyWithin が実装された

ECMAScript 6th 仕様の Array.prototype.copyWithin 実装。

Array.prototype.copyWithin (target, start [, end])

引数は

  1. target(Number): コピー先の開始Index値
  2. start(Number): コピー元の開始Index値
  3. end(Number)(Optional): コピー元の終了Index値。省略時は、その配列のlength

となっている。

startからend間の要素をそれぞれtargetから連なる要素へ可能な限り*1代入するメソッドである。新たな配列に対してではなく、対象オブジェクトに対して実施するので破壊的である。また、Array特有ではなく、Array-likeなオブジェクトに対して使用できるように設計されているみたい。

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

arr.copyWithin(0, 8); // 8,9番目の値を、0, 1 番目へ代入
// => [8, 9, 2, 3, 4, 5, 6, 7, 8, 9];

arr.copyWithin(0, -2); // マイナス値も受け付ける
// => [8, 9, 2, 3, 4, 5, 6, 7, 8, 9];

arr.copyWithin(0, 3, 5); // 3,4番目の値を 0,1番目へ代入
// => [3, 4, 2, 3, 4, 5, 6, 7, 8, 9];

arr.copyWithin(0, 5, 3); // start > end の場合、何もしない

最後、start > end の場合、何もしない と書いた。あくまで現行Draft rev25仕様の話なので今後どうなるか分からないけど、ちょっと不親切な感じがする。

*1:配列のlengthを超えて代入はしない