JavaScriptのデフォルト引数

最近,読んでるソースによくこんな記述が出てくる.

function hoge(args) {
  args = $.extend({
    id: '',
    actions: []
  }, args);
  
  // ...
}

extendメソッドはjQueryのユーティリティ関数のひとつ.
その名の通り,オブジェクトを拡張する.オブジェクトの継承とかコピーを作るときに便利.
上のプログラムだと第一引数のオブジェクトに第二引数のargsオブジェクトの内容を上書きしようとしている.
もし,オブジェクト引数argsにid,actionsプロパティがなかったら,idプロパティに空文字列, actionsプロパティに空配列が代入される.Rubyとか他の言語でいうデフォルト引数のような仕組み.

ちょっと仰々しいと感じた場合は,こんな書き方でもいいと思う.

function hoge(args) {
  args.id = args.id || '';
  args.actions = args.actions || [];

  //...
}