• ベストアンサー

配列について教えて下さい

独学で勉強中です。 動作がうまくいかない事がありまして、その部分だけ抜き出しました。 date[0] = new Date(); month = date[0].getMonth() + 1; date[1] = date[0]; date[1].setMonth(month); date[0]は今月で、date[1]は来月というようにしたいのですが、ここに挙げた最後の行の時点で、date[1]とdate[0]が同じになってしまいます(date[1]に入れたい値で揃ってしまう)。 何がいけないのでしょうか? 修正方法を教えて下さい。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Date のようなオブジェクト型では、変数に代入した時には、その実体というより参照が割り当てられます。 この場合、最初に作られた new Date()がDだとすると date[0]=Dへの参照 date[1]=date[0] date[1]=Dへの参照 となって date[0]とdate[1]は、同じモノ(D)を指すことになり date[1]への変更はdate[0]への変更(同じモノを指しているので)になってしまいます。 このような場合には、 date[1]=new Date(date[0]); のような形で別にオブジェクトを作成してやる必要があります。

hirumin
質問者

お礼

ありがとうございます。 完全に変数の値が連動してしまうのですね。 素人の考えでは、単に参照というよりも、絶対的な関連付けといいますか、相互参照というか、そんな風に思いました。 なかなか難しいものですね。

その他の回答 (1)

回答No.2

かっこ悪いですが、最初から単純に考えると ---------------------------------------- kyou=new Date();//今日 kongetu=kyou.getMonth()+1;//今月の月 ----------------------------------------- となりますよね? ------------------------------------------- tuki=???//判断する月(たぶんありますよね?) ------------------------------------------- 今月と来月を判断する月に対して今月の月のズレを判断すると今月と来月が出てきますよね。 ------------------------------------------- if(kongetu==tuki){flag=0;}else{flag=1;} -------------------------------------------- これで判断する月と今月の月が合えばflagに0がはいります。 それ以外は、1です。 ------------------------------------------- date=new Array("今月","来月"); -------------------------------------------- これで date[0]で今月が取り出せて、date[1]で来月が取り出せます。 最後に -------------------------------------------- document.write(date[flag]); -------------------------------------------- で今月か来月が書出されます。 この最後はいろいろ変わることでしょう。 でも、1からやりたいことを単純に書くとこのようになるかと思います。

hirumin
質問者

お礼

ありがとうございます。 参考にさせて頂きます。

関連するQ&A

専門家に質問してみよう