জাভাস্ক্রিপ্টে "পরিবর্তনশীল" ভেরিয়েবল?


101

আমি জানি পিএইচপি-তে "ভেরিয়েবল" ভেরিয়েবল থাকা সম্ভব। উদাহরণ স্বরূপ

$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; x = 1; var x = 1, y = 2; var x = xx = 1; var y = x + x;
আমিন মালেকী

42

আপনি যদি এটি করতে মরিয়া হন তবে আপনি হয় ইভাল () ব্যবহার করে চেষ্টা করতে পারেন:

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

পিএইচপি থেকে পৃথক, জাভাস্ক্রিপ্ট গ্লোবাল অ্যারে অ্যাক্সেসের প্রস্তাব দেয় না (এতে বর্তমানে ঘোষিত সমস্ত পরিবর্তনশীল নামের উল্লেখ রয়েছে)। যেমন, জাভাস্ক্রিপ্ট পরিবর্তনশীল ভেরিয়েবলের জন্য স্থানীয় সমর্থন সরবরাহ করে না। আপনি যাইহোক, এই বৈশিষ্ট্যটিকে ততক্ষণ অনুকরণ করতে পারবেন যতক্ষণ আপনি কোনও অ্যারে বা কোনও অবজেক্টের অংশ হিসাবে আপনার সমস্ত ভেরিয়েবলগুলি সংজ্ঞায়িত করেন না। এটি আপনার জন্য গ্লোবাল অ্যারে তৈরি করবে। উদাহরণস্বরূপ, helloবৈশ্বিক স্কোপটিতে ভেরিয়েবলটিকে এভাবে ঘোষণার পরিবর্তে :

var hello = 'hello world';

আসুন এটি একটি বস্তুর ভিতরে encapsulate। আমরা সেই অবজেক্টকে ভিভি (ভেরিয়েবল ভেরিয়েবল) বলব:

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!"

একটি ব্যবহারিক ব্যবহার

পূর্ববর্তী কোডটি হাস্যকরভাবে জটিল এবং অযৌক্তিক মনে হতে পারে তবে জাভাস্ক্রিপ্টে এই ধরণের এনক্যাপসুলেশন ব্যবহার করে ভেরিয়েবল ভেরিয়েবলের ব্যবহারিক ব্যবহার রয়েছে। নীচের উদাহরণে আমরা একটি অনির্ধারিত সংখ্যক এইচটিএমএল উপাদানগুলির আইডি পেতে একই ধারণাটি ব্যবহার করি।

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) ফাংশন ।

এই ফাংশনটি যা করে তা হ'ল জেএস কোডে সরবরাহিত স্ট্রিংটিকে রূপান্তর করা, তারপরে এটি কার্যকর করে।

উদাহরণ স্বরূপ:

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

(উদাহরণটি ভেরিয়েবল ভেরিয়েবলের পিএইচপি ম্যানুয়াল থেকে নেওয়া হয় ))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.