JavaScriptの関数の引数が想定していない値ならデフォルト値を強制する(つっこみ待ち)

More than 1 year has passed since last update.

こういう関数を書いていて、あれっ、となりました。

var example = function( current, value ){
    changed = Number(current) + Number(value);
    // changedで何かする
}

$('a.js-example').click(function(){
    var current = docCookies.getItem('current');
    var value = $(this).data('value');
    example( current, value );
    return false;
});

「js-example」クラスが付いているリンクをクリックすると、cookieに保存されていた値とdata-value属性の値を数値として加算するのですが(用途は適当にお察しください)、この場合以下の状況だとエラーになってしまうなあと思いました。

  1. cookieが保存されていない(null)
  2. cookieに入っている値が数値ではない(NaN)
  3. data-value属性がない(undefined)
  4. data-value属性に入っている値が数値ではない(NaN)

いろいろ調べて、結局それぞれについて型レベルでチェックしなければダメなようだ…ということで以下のようにチェック関数を書きました。
undefined, null, NaNであれば強制的に第二引数の数値に変換します。

チェックした限りでは問題ありませんでしたが、引数が配列やオブジェクトだったときのことは考えていないです。

function_default_value.js
var default_value = function( val, default_val, nan_check ){
    var return_val = val == undefined ? default_val : val;
    return_val = val === null ? default_val : val;
    if( nan_check === 1 ) {
        return_val = isNaN(val) ? default_val : val;
    }
    return return_val;
};

var example = function( cur, val ){
    var current = default_value( cur, 0, 1 );
    var value = default_value( val, 0, 1 );
    changed = Number(current) + Number(value);
    // changedで何かする
}

$('a.js-example').click(function(){
    var current = docCookies.getItem('current');
    var value = $(this).data('value');
    example( current, value );
    return false;
});