जावास्क्रिप्ट में "चर" चर?


101

मुझे पता है कि PHP में "परिवर्तनशील" चर होना संभव है। उदाहरण के लिए

$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"

क्या जावास्क्रिप्ट में एक स्ट्रिंग के रूप में इसके नाम से एक चर को संदर्भित करना संभव है? यह कैसे किया जाएगा?


सरणियाँ वैरिएबल नहीं हैं, यदि आप किसी सरणी को फ़ंक्शन तर्क के रूप में उपयोग करते हैं, तो जेएस दुभाषिया आपके सरणी के लिए एक सूचक का उपयोग करेगा। प्रोग्रामिंग में कुछ शब्दों का उपयोग सटीक है, और जो आप पूछते हैं उसका केवल बहुत कम अर्थ है
मिस्टर जोजो

जवाबों:


147

इसके लिए कोई एकल समाधान नहीं है (ठीक है, वहाँ है eval, लेकिन उस पर गंभीरता से विचार नहीं करने देता है)। कुछ वैश्विक चर को गतिशील रूप से एक्सेस करना संभव है window, लेकिन यह एक फ़ंक्शन के लिए स्थानीय चर के लिए काम नहीं करता है। वैश्विक चर नहीं है की एक संपत्ति बन windowके साथ परिभाषित चर हैं letऔर const, और classतों।

चर चर का उपयोग करने की तुलना में लगभग हमेशा एक बेहतर समाधान होता है! इसके बजाय आपको डेटा संरचनाओं को देखना चाहिए और अपनी समस्या के लिए सही चुनना चाहिए ।

यदि आपके पास नामों का एक निश्चित सेट है, जैसे कि

// BAD
var foo = 42;
var bar = 21;

var key = 'foo';
console.log(eval(key));

किसी ऑब्जेक्ट के गुणों के रूप में उन नामों / मूल्यों को संग्रहीत करें और उन्हें गतिशील रूप से देखने के लिए ब्रैकेट नोटेशन का उपयोग करें :

// GOOD
var obj = {
  foo: 42,
  bar: 21,
};

var key = 'foo';
console.log(obj[key]);

में ES2015 + इसे का उपयोग मौजूदा चर के लिए यह करने के लिए और भी आसान है संक्षिप्त संपत्ति अंकन :

// GOOD
var foo = 42;
var bar = 21;
var obj = {foo, bar};

var key = 'foo';
console.log(obj[key]);


यदि आपके पास "लगातार" गिने हुए चर हैं, जैसे कि

// BAD
var foo1 = 'foo';
var foo2 = 'bar';
var foo3 = 'baz';

var index = 1;
console.log(eval('foo' + index));

तब आपको इसके बजाय एक सरणी का उपयोग करना चाहिए और संबंधित मान तक पहुंचने के लिए केवल इंडेक्स का उपयोग करना चाहिए :

// GOOD
var foos = ['foo', 'bar', 'baz'];
var index = 1;
console.log(foos[index - 1]);


कई मूल्यों को परिभाषित करने के उदाहरण: var x = 1; var x, y = 2; एक्स = 1; var x = 1, y = 2; var x = xx = 1; var y = x + x;
अमीन मालेकी

42

यदि आप ऐसा करने के लिए बेताब हैं, तो आप या तो eval () का उपयोग करके देख सकते हैं:

var data = "testVariable";
eval("var temp_" + data + "=123;");
alert(temp_testVariable);

या विंडो ऑब्जेक्ट का उपयोग कर:

var data = "testVariable";
window["temp_" + data] = 123;
alert(window["temp_" + data]);

http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript


evalसख्त मोड में स्थानीय चर नहीं बना सकते। एक अप्रत्यक्ष कॉल हालांकि वैश्विक चर बना सकता है।
ओडोल

4

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

window['your_variable_name']

आप चर सेट और संदर्भ कर सकते हैं, और चर में ऑब्जेक्ट भी।


4

PHP के विपरीत, जावास्क्रिप्ट ग्लोबल्स ऐरे तक पहुंच प्रदान नहीं करता है (जिसमें वर्तमान में घोषित सभी चर नामों के संदर्भ हैं)। जैसे, जावास्क्रिप्ट चर चर के लिए मूल समर्थन प्रदान नहीं करता है। हालाँकि, आप इस सुविधा का अनुकरण तब तक कर सकते हैं जब तक आप किसी सरणी या ऑब्जेक्ट के हिस्से के रूप में अपने सभी चर को परिभाषित करते हैं। यह बदले में आप के लिए एक gloabls सरणी बना देगा। उदाहरण के लिए, helloइस तरह वैश्विक दायरे में परिवर्तनशील घोषित करने के बजाय :

var hello = 'hello world';

आइए इसे किसी वस्तु के अंदर कूट दें। हम उस वस्तु को vv (परिवर्तनशील चर) कहेंगे:

var vv = {
    'hello': 'hello world',
    //Other variable variables come here.
},
referToHello = 'hello';

अब हम इसे अनुक्रमणिका द्वारा चर का उल्लेख कर सकते हैं, और चूंकि सरणी अनुक्रमणिका को एक चर का उपयोग करके प्रदान किया जा सकता है, हम वास्तव में चर चर का उपयोग कर रहे हैं:

console.log(vv[referToHello]); //Output: hello world

आपके सवाल का जवाब

मूल प्रश्न में आपके द्वारा दिए गए कोड पर लागू होते हैं:

    var vv = {
        'x': 'variable',
        'variable': 'hello world!'
    };
    console.log(vv[vv['x']]); //Displays "hello, world!"

एक व्यावहारिक उपयोग

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

var elementIds = [],
        elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
        elements.forEach( (element) => {
            elementIds[element] = document.getElementById(element);
        });

यह उदाहरण elementIdsप्रत्येक तत्व की आईडी के आधार पर चर चर (चाबियाँ ) घोषित करता है , और प्रत्येक चर के मूल्य के रूप में उक्त तत्व के नोड को असाइन करेगा। और चूँकि जावास्क्रिप्ट में वैश्विक चर का उपयोग करते हुए आमतौर पर आपके चर चर को एक अनोखा दायरा दिया जाता है (इस उदाहरण में, उन्हें elementIdsऐरे के अंदर घोषित करना ) न केवल साफ-सुथरा है, बल्कि अधिक जिम्मेदार भी है।


2

बेशक आप कर सकते हैं, लेकिन नहीं। चरों को वैश्विक होना होगा।

var killingFunction = 'alert'
var killMeNow = 'please'
var please = 'You have been killed!'
this[killingFunction](this[killMeNow])

2
var vars = {};
var var_name = "str";
vars[var_name] = "working";
console.log(vars["str"]);

0

आप जावास्क्रिप्ट eval(str)फ़ंक्शन का उपयोग कर सकते हैं ।

यह फ़ंक्शन क्या करता है जो प्रदान की गई स्ट्रिंग को JS कोड में परिवर्तित करता है, फिर इसे निष्पादित करता है।

उदाहरण के लिए:

eval("console.log('hello world')"); // Logs hello world

तो इसे एक चर चर के रूप में उपयोग करने के लिए, आप निम्न कार्य कर सकते हैं:

var a = "hello";
var hello = "world";
console.log(a + " " + eval(a)); // Logs hello world

यह ठीक उसी आउटपुट का उत्पादन करेगा जैसे:

console.log(a + " " + hello); // Logs hello world

(उदाहरण चर चर पर PHP मैनुअल से लिया गया है ।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.