• ベストアンサー

引数を変数で渡す方法

いつもお世話になります・。 function tst(a,b){  alert("a="+a+" b="+b) } として、 tst(1,'bbb'); とすれば a=1  b=bbb となります。 ところが、 Param="1,'bbbb'"; tst(Param); とすると、 a=1,bbb b=undefined となってしまいます。 また、 tst(eval(Param)); とすると、 a=bbb b=undefined と、なってしまいます。 また、 var Param=new array(1,'bbbb') tst(Param); とすると、何も表示されません。 引数 1,'bbb' を変数として関数に渡すにはどうしたらよいのでしょうか。 目的は、JSONで引数文字列を取得して関数に渡したいのです。 JSONで、関数に渡す引数をどのように定義したらよいものかと いうことでの質問です。 が、JSONの記載が長くなるので、 ここで質問した方法がわかれば何とか後は自分でできると思うのですが、 よろしくご教示お願いいたします。

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

> Param="1,'bbbb'"; > tst(Param); > とすると、 > a=1,bbb b=undefined > となってしまいます。 それはおかしいですね。  a=1,'bbbb' b=undefined になりそうな気がしますが、 単に書き間違えただけかな? > tst(eval(Param)); > とすると、 > a=bbb b=undefined カンマ演算子は後の式の値を返すので、 evalで評価するとそうなりますね。 (bの数が違うのがただの書き間違いなら) > var Param=new array(1,'bbbb') > tst(Param); ArrayのAは大文字です。(無くても動くけどセミコロンも抜けてる。) tst関数を変更せずに  tst(1,'bbbb'); と同じ結果にしたいなら、  var Param = "1,'bbbb'";  eval("tst("+Param+");"); か、  var Param = new Array(1,'bbbb');  tst(Param[0], Param[1]); か、  var a = 1;  var b = 'bbbb';  tst(a,b); tst関数を変更して良いなら、  function tst(ary){    alert("a="+ary[0]+" b="+ary[1]);  }  var Param = new Array(1,'bbbb');  tst(Param);

rqg2010
質問者

お礼

ご丁寧なレスありがとうございました。 いろいろな方法を教えていただき良く理解できたつもりです。 >a=1,'bbbb' b=undefined >になりそうな気がしますが、 >単に書き間違えただけかな? すみません、ご指摘の通りです。 >var Param = "1,'bbbb'"; >eval("tst("+Param+");"); eval()の使い方わかったような。 どうもありがとうございました。

その他の回答 (3)

  • anekos
  • ベストアンサー率57% (4/7)
回答No.4

JSONとのことなので、受け取った文字列をそのまま eval してしまえば良さそうに思えますが… (信頼出来る場合) /*----------------------------------------*/ function tst(a,b){ alert("a="+a+" b="+b) } // 普通(?)はこちら var params = [1, 'bbbb']; // 1,'bbbb' が文字列であるというのならば下のような方法も。 var params = eval('[' + "1, 'bbbb'" + ']'); tst.apply(null, params); // tst みたいな関数が他にもある場合などは function myApply (f, paramText) { f.apply(null, eval("[" + paramText + "]")); } myApply(tst, "1, 'bbbb'") // 文字列で受け取るバージョンの関数を作るパターンも function strParamFunc (f) { return function (paramText) { return f.apply(null, eval("[" + paramText + "]")); } } strTst = strParamFunc(tst); strTst("1, 'bbbb'");

rqg2010
質問者

お礼

ご丁寧なレスありがとうございます。 JavaScriptって奥が深いとつくづく感じます。 いろいろな記述の方法を紹介していただきこの先研究させていただきます。 どうもありがとうございました。

  • ANASTASIAK
  • ベストアンサー率19% (658/3306)
回答No.2

<script> var Param=new Array(1,'bbbb') function tst(Param){ alert("a="+Param[0]+" b="+Param[1]); } tst(Param) </script>

rqg2010
質問者

お礼

早速レスありがとうございます。 関数tstの方で引数を切り分けることになるということが良くわかりました。 ありがとうございました。

  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.1

//tst(1,'bbb');// 「,」の扱いは区切り Param="1,'bbbb'";// 「,」の扱いは文字列 「'」も文字列 tst(Param); //aしか入らずbはundefined //ここからは配列 var Param=new Array(1,'bbbb');//array ではなく Array tst(Param);//配列全体を参照すると 1,bbbb という文字列 //よって区切りの「,」とはならない //aしか入らずbはundefined //配列から 配列名[番号] で個別に取得するのが楽 tst(Param[0] , Param[1]);//明示的な区切りで「,」を使う //a=1 b=bbbb

rqg2010
質問者

お礼

早速レスありがとうございます。 とてもわかりやすい説明でした。 自分の知識も整理できました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう