- ベストアンサー
変数内容が'変数名'の文字列なので、短く書きたい
下記のような変数が大量にあります。 変数内容は、全て'変数名'の文字列です。 var AAAAAAAQWE = 'AAAAAAAQWE', BACDCFRF = 'BACDCFRF', VZAAAWW = 'VZAAAWW',…… ・変数宣言を短く書き直したいのですが、何か良い方法はあるでしょうか? ・何度も同じことを書くのは非効率な気がするのですが…
- みんなの回答 (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' みたいに置換すれば、変数宣言自体不要。)
その他の回答 (3)
- tracer
- ベストアンサー率41% (255/621)
先に配列に格納し、その後にループで指定することもできます。 var array = ['AAAAAAAQWE','BACDCFRF','VZAAAWW']; for(var i in array) var this[array[i]] = array[i]; alert(AAAAAAAQWE); ただ、やってることはまどろっこしいので、通常はそういう事態に陥らないように、仕様の方を変更したほうが早い場合が多いと思います。
補足
回答ありがとうございました。 ・試すと「Uncaught SyntaxError: Unexpected token this」になります……
- Gotthold
- ベストアンサー率47% (396/832)
そのような変数自体に存在意義が無い気がするのですが、 どのような使われ方を想定している変数なのでしょうか?
補足
返信ありがとうございました。 ・既存コード調整なので、存在意義はとりあえずおいといていただけると有難いです ・変数名を文字列で返すような方法ってないでしょうか?
変数内容を短くしたいのですね。 テキストエディタの一括置換機能を利用すれば、AAAAA→A5 のように一度に変数名は変えられます。複数の一括置換ができればベターですね。 ご参考まで。
補足
回答ありがとうございました。 ・変数名の長さではなく、変数宣言する書き方でどうにかならないかなと思い、質問しました
お礼
回答ありがとうございました。 >thisは基本的にはスコープチェーンに入っていない ・解説ありがとうございました ・3さんのコード、どうして動作しないのか疑問に思っていました >withの中では、obj. を省略できる ・withとか初めて見ました ・こういうのを知りたかったです >withは非推奨 ・これは使えそうだと思ったのですが、自分でも確認してみたら「ECMAScript 5 の strict mode では禁止」と書いてありました……。残念です >変数を全部文字列に置換するような調整 ・再度検討してみたいと思いますー