2009-11-02 19 views

答えて

34

evalを使用すると、そのようなことは絶対に避けようとします。

alert(eval(someString)); 

これを行う必要がある場合は、ハッシュテーブルを使用することをお勧めします。

var stuff = { myText: 'hello world!' }; 
var someString = 'myText'; 
alert(stuff[someString]); 
+1

私はむしろウィンドウ['varname']を使いたいのですが;アプローチでは、オブジェクトを使ってどうすればいいですか? 'var obj = {'eleID': 'varname'}; for(objのvarキー){ ウィンドウ[obj [key]]; } ' これは動作していないようです:( –

1

あなたはevalでこれを行うことができます。

var myText = 'hello world!'; 
var someString = 'myText'; 

eval('var theTextInMyText = ' + someString + ';'); 

alert(theTextInMyText); 

通常はすべてこれを行うための欲求は、 "コードのにおい" です。おそらくよりエレガントな方法があります。

1
eval("alert(" + someString + ");"); 

働くだろう。 demonstrated hereとして

var myText = 'hello world!!'; 
var someString = eval('myText'); 

document.getElementById('hello').innerHTML = someString; 

1

evalはそれを行います。

27

その変数がグローバルスコープ上にある場合は、グローバルオブジェクトにbracket notationを使用することができます。

var myText = 'hello world!'; 
var someString = 'myText'; 

alert(window[someString]); 
+2

驚くべき答えは、 – LmC

1

が、これはトップレベル、window[someString] === "hello world!"であると仮定。

1

JavaScriptには、「マスターオブジェクト」を作成するための標準、または私が認識している文字列参照で初期スコープの変数にアクセスするための組み込みメソッドはありません。

ただし、ブラウザでWeb開発用にJavaScriptを使用している場合は、windowオブジェクトを使用すると、現在のスコープに完全にアクセスできます。たとえば:

myVar = "This is my var"; 
if(myVar == window.myVar){ 
    /* 
     This statement would return true 
     Because both variables reference 
     the same string; 
    */ 
} 

は、この方法は、あなたがそれ文字列にすることなく任意のスコープ変数を参照することができますが、ブラケット([])セレクタで、必要に応じて、あなたはまた、文字列を使用することができます。

window['myVar'] 

現在のスコープで直接変数としてデータを保持することは実行している他のスクリプトによって再定義するオープン、それを残していることを言及する価値があります。変数は、関数の引数名、ループ変数、およびその変数に新しい値を代入するだけで上書きできます。

これを解決するには、オブジェクトを使用してすべての関連データをアプリケーションに保存することをお勧めします(静的および/またはOOP)。このように:

$myApp = { 
    var1 : 'This is Var1', 
    apply : function(){ 
      alert('Started!'); 
    } 
} 

//Referencing relative variables 
alert($myApp.var1); 
0

eval()は私のテストでは機能しませんでした。しかし、新しいJavaScriptコードをDOMツリーに追加することは可能です。したがって、新しい変数を追加する関数は次のとおりです。

function createVariable(varName,varContent) 
{ 
    var scriptStr = "var "+varName+"= \""+varContent+"\"" 

    var node_scriptCode = document.createTextNode(scriptStr) 
    var node_script = document.createElement("script"); 
    node_script.type = "text/javascript" 
    node_script.appendChild(node_scriptCode); 

    var node_head = document.getElementById("head") 
    node_head.appendChild(node_script); 
} 

createVariable("dynamicVar", "some content") 
console.log(dynamicVar) 
関連する問題