0

重複の可能性:
Javascript 変数 変数

以下のコードを見てください

var selected_id=1;   
resetVar("selected");

function resetVar(foo){
 foo+"_id"=0; // I want to set selected_id into 0
}​​​​​

それは可能ですか?なにか提案を?

4

4 に答える 4

8

変数がグローバル変数である場合、それらは暗黙的にオブジェクトのプロパティであり、次のようにオブジェクトwindowのプロパティとして参照できます。window

function resetVar(foo){
    window[foo + "_id"] = 0; 
}​​​​​

var selected_id = 1;   
resetVar("selected");

変数がグローバル変数でない場合は、既知のオブジェクトのプロパティにして、同じ手法を使用できるようにする必要があります。

一般に、これは通常、プログラミングの悪い考えであり、状況を処理するためのより良い方法がある場合に、この質問がよく見られます。全体的な状況を開示していないため、具体的にアドバイスすることはできませんが、通常は、既知のオブジェクトのプロパティを直接使用するか、配列を使用して複数の関連する値を配列に保持する必要があります。変数を直接参照します。

于 2012-04-25T20:56:57.597 に答える
3

選択された変数がグローバル変数の場合:

function resetVar(foo){
    window[foo+"_id"] = 0;
}​​​​​
于 2012-04-25T20:56:14.610 に答える
2

メソッドを所有するオブジェクト(この場合、グローバルオブジェクト)で角括弧表記を使用して関数を呼び出すことができますwindow

window['selected_id'] = value

于 2012-04-25T20:56:51.117 に答える
1

これは、初心者がよく提案する「解決策」です (これは悪いことではありません。誰もがどこかから始めます)。答えは次のとおりです。そうしないで、配列(または他のコレクション)を使用してください。

変数名を使用してプログラム ロジックを決定することは、厄介で保守不可能なコードに必然的につながる恐ろしい考えです。変数の名前を変更しても、プログラムのロジックは変更されません。代わりに、必要に応じてコレクションにキーを使用するか、単にインデックスを使用して、オブジェクトをコレクションにグループ化します。

于 2012-04-25T20:56:18.053 に答える