- ベストアンサー
引数付自作関数において、引数を送らない場合について
こんにちは。 makecolumn(a,b,c)という 自作関数があったとします。 ここで、 aとcにのみ、引数をおくり、 bは、デフォルト値を使いたいと 思います。 この場合、 makecolumn(30,,40) のようにすると、 どうも、エラーになってしまいます。 プログラム側では、 bの値について、 makecolumn=function(a,b,c){ if(b==null || b==''){ b=デフォルト値; } } としていますが、うまくいきません。 引数があるのに、空白で送ってきた場合に、 その状態を取得するには、 どうしたらいいのでしょうか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ん~・・・ 自作関数の利用なのですから makecolumn(30,null,40)とかmakecolumn(30,'',40) とすれば済むのではないでしょうか?
その他の回答 (3)
- fujillin
- ベストアンサー率61% (1594/2576)
makecolumn(30,,40)の時点で、構文エラーになってませんか? ANo3様の回答のように、省略可能な引数を後にして、引数を可変個数にしておいて test(30,40) や test(30,40,50,60) で呼び出せば function test(){ var res=''; for (var i=0; i<test.arguments.length; i++){ res+=' ['+test.arguments[i]+']'; } alert(res.substring(2)); } いっそのこと、引数の順序も数も自由にするなら、 test3({d:100,c:40,a:30}) などとして function test3(arg0){ var arg={a:10,b:20,c:30}; // ←デフォルト値 for (var a in arg0){ arg[a]=arg0[a]; } var res=''; for (a in arg){ res+=' ['+a+'='+arg[a]+']'; } alert(res.substring(2)); } とはいうものの、ANo1様が言っているように、意味があるとは思えないけど…
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
一般的には、省略可能な引数を最後にしますね。(可変長引数とか。英語でどういうんでしょう?) 省略した場合はnullではなくundefinedになります。(b==nullでも真になりますが、私は使い分けています) makecolumn(30, 40); makecolumn=function(a,c, b){ if(b==undefined || b==''){ b=デフォルト値; } }
微妙^^; test([9,,7]); function test(a){ alert([a[0],a[1],a[2]]); }
お礼
回答ありがとうございます。 無論そうなのですが(何か入れるなら、 xでもなんでもいいのですが)、 綺麗とはいえないし、 複数の関数を作っていると、 どうしても、引数が無い場合は、 (,,)で済ませたほうが、 便利なのですが。