2009-11-02 20 views
10

क्या जावास्क्रिप्ट वैरिएबल को उस स्ट्रिंग के साथ संदर्भित करने का कोई तरीका है जिसमें इसका नाम है?जावास्क्रिप्ट, एक स्ट्रिंग का उपयोग कर एक चर का उपयोग कर नाम?

उदाहरण:

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

//how to output myText value using someString? 
+0

देखें: http: // stackoverflow।कॉम/प्रश्न/724857/कैसे-से-find-javascript-variable-by-its-name –

उत्तर

34

आप इसे करने के लिए eval का उपयोग कर सकते हैं, हालांकि मैं इस तरह की चीज़ों से हर कीमत पर बचने की कोशिश करता हूं।

alert(eval(someString)); 

एक बेहतर तरीका, यदि आप पाते हैं अपने आप को यह करने के लिए की आवश्यकता होगी,, एक हैश तालिका का उपयोग करने के लिए है।

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

यदि मैं विंडो ['वर्नाम'] का उपयोग करना चाहता हूं; दृष्टिकोण, मैं किसी ऑब्जेक्ट के साथ इसका उपयोग कैसे करूं? 'var obj = {'eleid': 'varname'}; (ओबीजे में var कुंजी) { विंडो [ओबीजे [कुंजी]]; } ' यह काम नहीं कर रहा है :( –

1

आप ऐसा कर सकते हैं eval साथ:

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

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

alert(theTextInMyText); 

इस सब पर आम तौर पर करने की इच्छा के लिए एक "कोड गंध" है। शायद एक और सुरुचिपूर्ण तरीका है ...

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

काम करेगा।

1

eval कि क्या करेंगे:

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

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

demonstrated here के रूप में।

27

हैं कि चर वैश्विक गुंजाइश पर है, तो आप वैश्विक वस्तु पर bracket notation उपयोग कर सकते हैं:

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

alert(window[someString]); 
+2

कमाल का जवाब eval +1 इच्छा के उपयोग को बचाता है मैं 10 + – LmC

1

मान लिया जाये कि इस शीर्ष स्तर, window[someString] === "hello world!" पर है।

1

जावास्क्रिप्ट में, 'मास्टर ऑब्जेक्ट' बनाने के लिए कोई मानक नहीं है, या स्ट्रिंग संदर्भ के साथ प्रारंभिक दायरे पर चर का उपयोग करने के लिए कोई भी अंतर्निहित विधि है जिसे मैं जानता हूं।

हालांकि, यदि आप किसी ब्राउज़र पर वेब विकास के लिए जावास्क्रिप्ट का उपयोग कर रहे हैं, तो window ऑब्जेक्ट आपको अपने वर्तमान दायरे तक पूर्ण पहुंच प्रदान करेगा।

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

इस विधि आप इसे एक स्ट्रिंग बनाने के बिना किसी भी गुंजाइश-चर संदर्भित करने के लिए अनुमति देगा, लेकिन जैसा कि ब्रैकेट ([]) चयनकर्ता के साथ की जरूरत है आप भी एक स्ट्रिंग का उपयोग कर सकते हैं: उदाहरण के लिए।

window['myVar'] 

ऐसा नहीं है कि वर्तमान क्षेत्र पर सीधे एक चर के रूप में डेटा रखने के छोड़ते चल अन्य स्क्रिप्ट जा फिर से परिभाषित करने के लिए खुला उल्लेख के लायक है। आपके वैरिएबल को फ़ंक्शन तर्क नामों, लूप चर के लिए, और बस उस चर के लिए एक नया मान असाइन करके ओवरराइट किया जा सकता है।

इससे निपटने के लिए, मैं आपके ऑब्जेक्ट (स्टेटिक और/या ओओपी) में सभी प्रासंगिक डेटा स्टोर करने के लिए ऑब्जेक्ट का उपयोग करने का सुझाव देता हूं। इस तरह:

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

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

eval() मेरे परीक्षणों में काम नहीं करता है। लेकिन डोम पेड़ में नया जावास्क्रिप्ट कोड जोड़ना संभव है। तो यहां एक ऐसा फ़ंक्शन है जो एक नया चर जोड़ता है:

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) 
संबंधित मुद्दे