javascript অবজ জাভাস্ক্রিপ্ট গতিশীল পরিবর্তনশীল নাম ব্যবহার করুন




জাভাস্ক্রিপ্ট বই (10)

পিএইচপি আপনি এই মত আশ্চর্যজনক / ভয়ঙ্কর জিনিস করতে পারেন:

$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1

জাভাস্ক্রিপ্ট দিয়ে এমন কিছু করার উপায় আছে কি?

যেমন যদি আমার একটি var name = 'the name of the variable'; আমি নাম name সঙ্গে পরিবর্তনশীল একটি রেফারেন্স পেতে পারি?


এটি একটি উদাহরণ:

for(var i=0; i<=3; i++) {
    window['p'+i] = "hello " + i;
}

alert(p0); // hello 0
alert(p1); // hello 1
alert(p2); // hello 2
alert(p3); // hello 3

আরেকটি উদাহরণ :

var myVariable = 'coco';
window[myVariable] = 'riko';

alert(coco); // display : riko

সুতরাং, myVariable এর মান " coco " একটি পরিবর্তনশীল কোকো হয়ে ওঠে।

কারণ গ্লোবাল সুযোগের সমস্ত ভেরিয়েবল উইন্ডো অবজেক্টের বৈশিষ্ট্য।


তারা মানে কি না, আপনি করতে পারেন না। এটা সম্পন্ন করার কোন উপায় নেই। তাই এটা সম্ভব ছিল আপনি এই মত কিছু করতে পারে

function create(obj, const){
// where obj is an object and const is a variable name
function const () {}

const.prototype.myProperty = property_value;
// .. more prototype

return new const();

}

ইসিএমএসস্ক্রিপ্ট 5 এ প্রয়োগ করা ঠিক মত একটি তৈরি ফাংশন হচ্ছে।


2019

টি এল; ডিআর

  • eval অপারেটর স্ট্রিং অভিব্যক্তি চালাতে পারে এটি বলা প্রসঙ্গে এবং মান ফেরত, ভেরিয়েবল;
  • literal object তাত্ত্বিকভাবে যে {[varName]} , কিন্তু এটি সংজ্ঞা দ্বারা অবরুদ্ধ।

তাই আমি এই প্রশ্ন জুড়ে এসেছি এবং এখানে সবাই শুধু আসল সমাধান আনয়ন না করেই ঘুরে বেড়ায়। ধন্যবাদ এক্সেল হেডার, যিনি আসছেন।

সঠিক সমাধান eval

প্রায় সবচেয়ে ভুলে যাওয়া ভাষা অপারেটর। (আমি মনে করি সর্বাধিক এক with )

তাই রিজার্ভ শব্দ অপারেটর eval গতিশীলভাবে বলা প্রসঙ্গে অভিব্যক্তি চালাতে পারেন। এবং যে অভিব্যক্তি ফলাফল ফিরে। আমরা গতিশীলভাবে একটি ফাংশন প্রেক্ষাপটে একটি পরিবর্তনশীল একটি মান ফেরত দিতে ব্যবহার করতে পারেন।

উদাহরণ:

function exmaple1(){
   var a = 1, b = 2, default = 3;
   var name = 'a';
   return eval(name)
}

example1() // return 1


function example2(option){
  var a = 1, b = 2, defaultValue = 3;

  switch(option){
    case 'a': name = 'a'; break;
    case 'b': name = 'b'; break;
    default: name = 'defaultValue';
  }
  return eval (name);
}

example2('a') // return 1
example2('b') // return 2
example2() // return 3

উল্লেখ্য যে আমি সবসময় স্পষ্টভাবে স্পষ্টভাবে লিখি অভিব্যক্তি চালানো হবে। কোড অপ্রয়োজনীয় চমত্কার এড়ানোর জন্য। eval খুব শক্তিশালী কিন্তু আমি নিশ্চিত যে আপনি ইতিমধ্যে জানেন

বিটিডব্লিউ, যদি এটি বৈধ হয় তবে আমরা পরিবর্তনশীল নাম এবং মূল্য ক্যাপচার করতে literal object ব্যবহার করতে পারি, কিন্তু আমরা গণিত সম্পত্তি নাম এবং সম্পত্তি মূল্য শর্টন্ডকে একত্রিত করতে পারি না, দুঃখিতভাবে, অবৈধ

functopn example( varName ){
    var var1 = 'foo', var2 ='bar'

    var capture = {[varName]}

}

example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`

যেহেতু ECMA- / জাভাস্ক্রিপ্ট সমস্ত Objects এবং প্রসঙ্গগুলির (যা, অবজেক্টের কিছুক্ষন থাকে) সম্পর্কেও, প্রত্যেকটি পরিবর্তনশীল একটি তথাকথিত ভেরিয়েবল- (বা ফাংশন, অ্যাক্টিভেশন অবজেক্টের ক্ষেত্রে ) এ সংরক্ষণ করা হয়।

সুতরাং যদি আপনি এই মত ভেরিয়েবল তৈরি করেন:

var a = 1,
    b = 2,
    c = 3;

গ্লোবাল সুযোগ (= কোন ফাংশন প্রসঙ্গে), আপনি নিখরচায় গ্লোবাল অবজেক্ট (= ব্রাউজারে window ) মধ্যে ঐ ভেরিয়েবলগুলি লিখুন।

যারা "ডট" বা "বন্ধনী" নোটেশন ব্যবহার করে অ্যাক্সেস পেতে পারেন:

var name = window.a;

অথবা

var name = window['a'];

গ্লোবাল অবজেক্টের ভেরিয়েবল অবজেক্ট window অবজেক্টের জন্য এটি শুধুমাত্র এই বিশেষ উদাহরণে গ্লোবাল অবজেক্টের জন্য কাজ করে। একটি ফাংশনের প্রসঙ্গের মধ্যে, আপনার অ্যাক্টিভেশন অবজেক্টের সরাসরি অ্যাক্সেস নেই। এই ক্ষেত্রে:

function foobar() {
   this.a = 1;
   this.b = 2;

   var name = window['a']; // === undefined
   alert(name);
   name = this['a']; // === 1
   alert(name);
}

new foobar();

new একটি স্ব-সংজ্ঞায়িত বস্তুর একটি নতুন উদাহরণ (প্রসঙ্গ) তৈরি করে। new ছাড়া ফাংশন সুযোগ global (= উইন্ডো) হবে। এই উদাহরণ যথাক্রমে undefined এবং 1 সতর্ক হবে। যদি আমরা this.a = 1; this.b = 2 প্রতিস্থাপন করা হবে this.a = 1; this.b = 2 this.a = 1; this.b = 2 সাথে:

var a = 1,
    b = 2;

উভয় সতর্কতা আউটপুট undefined হবে। সেই অবস্থায়, foobar b এবং b foobar থেকে অ্যাক্টিভেশন অবজেক্টে সংরক্ষণ করা হবে, যা আমরা অ্যাক্সেস করতে পারছি না (অবশ্যই আমরা foobar b এবং b কল করে অ্যাক্সেস করতে পারি)।


আপনি এটি পেতে উইন্ডো বস্তু ব্যবহার করতে পারেন।

window['myVar']

window আপনি ব্যবহার করছেন সমস্ত বিশ্বব্যাপী পরিবর্তনশীল এবং বিশ্বব্যাপী ফাংশন একটি রেফারেন্স আছে।


শুধু একটি খারাপ উত্তর এত ভোট পায় কি না জানি না। এটা বেশ সহজ উত্তর কিন্তু আপনি এটি জটিল করা।

// If you want to get article_count
// var article_count = 1000;
var type = 'article';
this[type+'_count'] = 1000;  // in a function we use "this";
alert(article_count);

জাভাস্ক্রিপ্টে আপনি সমস্ত বৈশিষ্ট্য মূল মান জোড়া যুক্ত করতে পারেন। jAndy ইতিমধ্যে এই উল্লেখ করা কিন্তু আমি তার উত্তর শো কিভাবে এটা শোষিত করা যাবে না মনে হয় না।

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

var id = "abc";
var mine = {};
mine[id] = 123;
console.log(mine.abc);

123 প্রদান করে। সাধারণত আপনি ভেরিয়েবলটি তৈরি করতে চান যার ফলে নিদর্শন রয়েছে তাই আপনি এটি অন্য দিকেও করতে পারেন।

var mine = {};
mine.abc = 123;
console.log(mine["a"+"bc"]);

আপনি যদি গ্লোবাল অবজেক্টটি উইন্ডো বা গ্লোবাল (নোড) ব্যবহার করতে না চান তবে আপনি এটির মতো কিছু চেষ্টা করতে পারেন:

var obj = {};
obj['whatever'] = 'There\'s no need to store even more stuff in a global object.';

console.log(obj['whatever']);

a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);

এটা চেষ্টা কর...


eval এক বিকল্প।

var a = 1;
var name = 'a';

document.write(eval(name)); // 1




dynamic-variables