19
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

配列を引数とする際の注意

Last updated at Posted at 2014-08-30

Javascriptで配列を引数として関数やメソッドに渡す場合、
思わぬ挙動をすることがあるので注意が必要です。

わかりやすい例を示すと、例えばArrayオブジェクトのpushメソッドに対して配列を引数にして渡すとき

var list = [];
var innerList = ['foo', 'bar', 'baz']

list.push(innerList);

console.log(list); // output: [['foo','bar','baz']]

といった結果になってしまいます。つまり、上記のように配列にしてまとめて渡す時と、

list.push('foo', 'bar', 'baz');

のように引数ごとに分けて渡す場合では振る舞いが違うということです。

でも、上記のようにわざわざ配列の中身を分解して引数に渡すのは面倒なので、
そんなときはapplyメソッドを使うと便利です。

Array.prototype.push.apply(list, innerList);

これで、listを親オブジェクトとしつつ、innerListの配列要素を分解した形で処理してくれます。

19
18
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?