• ベストアンサー

結合した文字列が配列名として正しく認識されないです...

はじめまして。m(_ _)m どう質問のタイトルをつけていいかもわからない初心者の質問ですが、 どなたか原因と解決方法をご指導いただけたら幸いです。 ----------------------------------- var stockYear = 'stock' + fiscalYear // 現在は1992です。 alert(fiscalYear); // このアラートでは 1992 と表示されます。 alert(stockYear); // このアラートではちゃんと stock1992 と表示されます。 document.write("<DIV>"); document.write(stockYear[arrayMonth[fileMonth]]); // **** 問題箇所 **** document.write("</DIV>"); // **** 問題箇所 **** // stock1992 と書けばちゃんと結果である「在庫無し」が出てくるのに、 // stock1992であるはずの stockYear と書くとundefinedとなってしまいます。(T-T)

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

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

仮にstock1992という配列があったとして var stockYear = 'stock' + fiscalYearとしても stockYearという配列にstock1992という文字列が代入されるだけです。 したがってdocument.write(stockYear[arrayMonth[fileMonth]]); とするとstockYear配列を探そうとして、変数としてしか定義されて いないためundefinedなわけです。 対策としてはstockYearに代入する際にevalをつかえば 解消されるでしょう。 var stockYear = eval('stock' + fiscalYear);

r_bel
質問者

お礼

とても分かりやすい丁寧なご説明をありがとうございました。 なるほどそれでundefinedだったわけですね。納得です。 おかげさまですごく勉強になりました!!!m(_ _)m

その他の回答 (1)

  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.1

eval() でかこったらどうなるでしょう? こんな風に document.write(eval(stockYear[arrayMonth[fileMonth]]));

r_bel
質問者

お礼

できました~!ありがとうございます。 こうやってやったら一つ変数の定義が不要になりますね。便利~♪ 覚えておきます。(^-^)

関連するQ&A