• ベストアンサー

引数付自作関数において、引数を送らない場合について

こんにちは。 makecolumn(a,b,c)という 自作関数があったとします。 ここで、 aとcにのみ、引数をおくり、 bは、デフォルト値を使いたいと 思います。 この場合、 makecolumn(30,,40) のようにすると、 どうも、エラーになってしまいます。 プログラム側では、 bの値について、 makecolumn=function(a,b,c){ if(b==null || b==''){ b=デフォルト値; } } としていますが、うまくいきません。 引数があるのに、空白で送ってきた場合に、 その状態を取得するには、 どうしたらいいのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ん~・・・ 自作関数の利用なのですから makecolumn(30,null,40)とかmakecolumn(30,'',40) とすれば済むのではないでしょうか?

rheda
質問者

お礼

回答ありがとうございます。 無論そうなのですが(何か入れるなら、 xでもなんでもいいのですが)、 綺麗とはいえないし、 複数の関数を作っていると、 どうしても、引数が無い場合は、 (,,)で済ませたほうが、 便利なのですが。

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

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様が言っているように、意味があるとは思えないけど…

回答No.3

一般的には、省略可能な引数を最後にしますね。(可変長引数とか。英語でどういうんでしょう?) 省略した場合はnullではなくundefinedになります。(b==nullでも真になりますが、私は使い分けています) makecolumn(30, 40); makecolumn=function(a,c, b){ if(b==undefined || b==''){ b=デフォルト値; } }

noname#84373
noname#84373
回答No.2

微妙^^; test([9,,7]); function test(a){ alert([a[0],a[1],a[2]]); }

関連するQ&A

専門家に質問してみよう