• ベストアンサー

変数内容が'変数名'の文字列なので、短く書きたい

下記のような変数が大量にあります。 変数内容は、全て'変数名'の文字列です。 var AAAAAAAQWE = 'AAAAAAAQWE', BACDCFRF = 'BACDCFRF', VZAAAWW = 'VZAAAWW',…… ・変数宣言を短く書き直したいのですが、何か良い方法はあるでしょうか? ・何度も同じことを書くのは非効率な気がするのですが…

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

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.4

thisは基本的にはスコープチェーンに入っていないので thisのプロパティに設定しても this.AAAAAAAQWEとしないと参照できないですね。 (thisがグローバルオブジェクトの場合は、参照可能になります。) withを使えばオブジェクト名を省略して プロパティを参照できるようになります。 var array = ['AAAAAAAQWE','BACDCFRF','VZAAAWW']; var obj = {}; for(var i=0; i<array.length; i++) obj[array[i]] = array[i]; with(obj){  alert(AAAAAAAQWE); //withの中では、obj. を省略できる } withは非推奨なのであまり使いたくないですけどね。 > ・既存コード調整なので、存在意義はとりあえずおいといていただけると有難いです 変数を全部文字列に置換するような調整はできないのでしょうか? (AAAAAAAQWE → 'AAAAAAAQWE' みたいに置換すれば、変数宣言自体不要。)

re97
質問者

お礼

回答ありがとうございました。 >thisは基本的にはスコープチェーンに入っていない ・解説ありがとうございました ・3さんのコード、どうして動作しないのか疑問に思っていました >withの中では、obj. を省略できる ・withとか初めて見ました ・こういうのを知りたかったです >withは非推奨 ・これは使えそうだと思ったのですが、自分でも確認してみたら「ECMAScript 5 の strict mode では禁止」と書いてありました……。残念です >変数を全部文字列に置換するような調整 ・再度検討してみたいと思いますー

その他の回答 (3)

  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

先に配列に格納し、その後にループで指定することもできます。 var array = ['AAAAAAAQWE','BACDCFRF','VZAAAWW']; for(var i in array) var this[array[i]] = array[i]; alert(AAAAAAAQWE); ただ、やってることはまどろっこしいので、通常はそういう事態に陥らないように、仕様の方を変更したほうが早い場合が多いと思います。

re97
質問者

補足

回答ありがとうございました。 ・試すと「Uncaught SyntaxError: Unexpected token this」になります……

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

そのような変数自体に存在意義が無い気がするのですが、 どのような使われ方を想定している変数なのでしょうか?

re97
質問者

補足

返信ありがとうございました。 ・既存コード調整なので、存在意義はとりあえずおいといていただけると有難いです ・変数名を文字列で返すような方法ってないでしょうか?

noname#209524
noname#209524
回答No.1

変数内容を短くしたいのですね。  テキストエディタの一括置換機能を利用すれば、AAAAA→A5 のように一度に変数名は変えられます。複数の一括置換ができればベターですね。  ご参考まで。

re97
質問者

補足

回答ありがとうございました。 ・変数名の長さではなく、変数宣言する書き方でどうにかならないかなと思い、質問しました

関連するQ&A