桜ヶ丘日記

技術メモとかとか

JavaScriptのfunctionの引数にデフォルト値を設定する

こんな感じで出来ます。
引数の数が可変に出来る点も便利。

/*
 * 引数1: 表示メッセージ(デフォルト空文字)
 * 引数2: しょぼーんフラグ(デフォルトtrue)
 */
var msg = function() {
  var txt    = (arguments.length > 0) ? arguments[0] : '';
  var shobon = (arguments.length > 1) ? arguments[1] : true;

  if (txt === '') {
    alert('な、何か言ってよね!');
  } else {
    if(shobon) {
      alert(txt + '(´・ω・`)');
    }else{
      alert(txt + '(`・ω・´)');
    }
  }
}

/* 呼び出してみるテスト */
msg();
msg('しょぼん');
msg('しゃきーん', false);

引数をオブジェクトで渡す

いっぱい引数を設定させる場合はこんなふうにオブジェクトで渡すことにしちゃってもいいですね。

/*
 * 引数: オブジェクト{
 *   txt   : 表示メッセージ(デフォルト空文字)
 *   shobon: しょぼーんフラグ(デフォルトtrue)
 * }
 */
var msg = function(arg) {
  if(typeof arg === 'undefined') { arg = {} }
  if(!('txt'    in arg)) { arg.txt    = ''; }
  if(!('shobon' in arg)) { arg.shobon = true; }

  if (arg.txt === '') {
    alert('な、何か言ってよね!');
  } else {
    if(arg.shobon) {
      alert(arg.txt + '(´・ω・`)');
    }else{
      alert(arg.txt + '(`・ω・´)');
    }
  }
}

/* 呼び出してみるテスト */
msg();
msg({ txt: 'しょぼん' });
msg({ txt: 'しゃきーん', shobon: false });

$.extend()でシンプルに

jQueryなら$.extend()使うとさらにスマート。

var msg = function(arg) {
  arg = $.extend({
    txt    : '',    // 表示メッセージ(デフォルト空文字)
    shobon : true  // しょぼーんフラグ(デフォルトtrue)
  }, arg);

  if (arg.txt === '') {
    alert('な、何か言ってよね!');
  } else {
    if(arg.shobon) {
      alert(arg.txt + '(´・ω・`)');
    }else{
      alert(arg.txt + '(`・ω・´)');
    }
  }
}

/* 呼び出してみるテスト */
msg();
msg({ txt: 'しょぼん' });
msg({ txt: 'しゃきーん', shobon: false });

実行結果

いずれもこんな実行結果
f:id:sakuragaoka:20100408132327p:image
f:id:sakuragaoka:20100408132328p:image
f:id:sakuragaoka:20100408132329p:image