イナヅマTVログ

[JavaScript]デフォルト引数の設定方法って難しい

| 2件のコメント

2013年はthree.jsで始まりました。
WebGL だけでなくDOMElementやCanvas 2Dにも対応している懐の広いライブラリです。
リビジョンごとにClassが追加されたり削除されたり移動したりAPIが変わるのは難ありですけど、この多機能さはあり得ないほど助かります。

今回はthree.jsでも多用されているデフォルト引数の話です。

JavaScriptにはデフォルト引数の機能はありません。
ありませんが、設定したくなることがあります。

function example (x) {
    if (typeof x === "undefined") {
        x = 1;
    }
    console.log(x);
}
example();// 1
example(null);// null
example(3);// 3
example("3");// 3

引数にnullだと設定できない。
x === undefined と変えても同じ。

function example (x) {
    if (x == undefined) {
        x = 1;
    }
    console.log(x);
}
example();// 1
example(null);// 1
example(3);// 3
example("3");// 3

== 判定だと引数nullでも対応できた。
う〜〜ん。

function example (x) {
    if (typeof x !== "number") {
        x = 1;
    }
    console.log(x);
}
example();// 1
example(null);// 1
example(3);// 3
example("3");// 1

typeof "number" は無いかぁ。

function example (x) {
    if (typeof x === 'undefined' || x === null) {
        x = 1;
    }
    console.log(x);
}
example();// 1
example(null);// 1
example(3);// 3
example("3");// 3

これでええんかな〜

今回のケースは数値かどうかを判定する方法もあるかな。

if (!isNaN(parseFloat(x)) && isFinite(x)) {
//数値
}

jQueryのisNumericから持ってきました。

仕組みとしてJavaScriptに導入されると嬉しい。

Firefox 15は対応しているそうな。
MDN: default parameters

2件のコメント

  1. ピンバック: JavaScriptで関数にデフォルト引数を設定する | mgzl.jp

  2. ピンバック: [JavaScript]this参照を変更せずにsetTimeoutを実行したい « イナヅマTVログ

コメントを残す

必須欄は * がついています