JS.next

JavaScriptの最新実装情報を追うブログ

@@isConcatSpreadableが実装された

概要

@@isConcatSpreadableは、Array.prototype.concatメソッドにおいての振る舞いを指定するビルトインシンボルである。


解説

concatメソッドは、元の配列と各引数に与えられた配列を連結して新しい配列を作るメソッドである。
もし引数に渡された値が配列でない場合は、その値自体が新しい配列の要素になる。

var a12 = [ 1, 2 ]
var a34 = [ 3, 4 ]
var a56 = [ 5, 6 ]
a12.concat( a34, a56 )  // [ 1, 2, 3, 4, 5, 6 ]


では、ArrayLikeなオブジェクトを渡すとどうなるかというと、配列と見てもらえずそのオブジェクト自身が新しい配列の要素になってしまう。
そうではなく、そのオブジェクトの各値を連結して欲しい時に活躍するのが、@@isConcatSpreadableである。


使い方

オブジェクトの@@isConcatSpreadableプロパティにtrueを定義しておくと、concatメソッドで配列のように処理してくれるようになる。
例:

var obj = {
  0: 'a',
  1: 'b',
  length: 2
}

a12.concat( obj )  // [ 1, 2, {} ]

obj[ Symbol.isConcatSpreadable ] = true

a12.concat( obj )  // [ 1, 2, "a", "b" ]


実装されるバージョン

V8 3.31.?