How do I declare and use dynamic variables in JavaScript?

后端 未结 7 2037
野的像风
野的像风 2020-11-27 16:01

Suppose I need to declare a JavaScript variable based on a counter, how do I do so?

var pageNumber = 1;
var \"text\"+pageNumber;

The above

相关标签:
7条回答
  • 2020-11-27 16:09

    You could also wrap your counter in an object:

    var PageNumber = (function() {
      var value = 0;
      return {
       getVal: function(){return value;},
       incr: function(val){
                value += val || 1;
                this['text'+value]=true /*or some value*/;
                return this;
             }
       };
    })();
    
    alert(PageNumber.incr().incr().text2); //=>true
    alert(PageNumber['text'+PageNumber.getVal()]) /==> true
    
    0 讨论(0)
  • 2020-11-27 16:10

    In JavaScript (as i know) there are 2 ways by which you can create dynamic variables:

    1. eval Function
    2. window object

    eval:

    var pageNumber = 1;
    eval("var text" + pageNumber + "=123;");
    alert(text1);
    

    window object:

    var pageNumber = 1;
    window["text" + pageNumber] = 123;
    alert(window["text" + pageNumber]);
    
    0 讨论(0)
  • 2020-11-27 16:12

    How would you then access said variable since you don't know its name? :) You're probably better off setting a parameter on an object, e.g.:

    var obj = {};
    obj['text' + pageNumber] = 1;
    

    if you -really- want to do this:

    eval('var text' + pageNumber + '=1');
    
    0 讨论(0)
  • 2020-11-27 16:14

    It can be done using this keyword in JS:

    Eg:

    var a = [1,2,3];
    
    for(var i = 0; i < a.length; i++) {
      this["var" + i] = i + 1;
    }
    

    then when you print:

    var0 // 1
    var1 // 2
    var2 // 3
    
    0 讨论(0)
  • 2020-11-27 16:15

    Assuming that the variable is in the global scope, you could do something like this:

    var x = 1;
    var x1 = "test"
    console.log(window["x" + x]); //prints "test"
    

    However, a better question might be why you want such behaviour.

    0 讨论(0)
  • 2020-11-27 16:18

    I recently needed something like this.

    I have a list of variables like this:

    var a = $('<div class="someHtml"></div>'),b = $('<div class="someHtml"></div>'),c = $('<div class="someHtml"></div>');
    

    I needed to call them using another variable that held a string with the name of one of these variables like this:

    var c = 'a'; // holds the name of the wanted content, but can also be 'b' or 'c'
    
    $('someSelector').html(eval(c)) // this will just use the content of var c defined above
    

    Just use eval to get the variable data.

    I just did

    0 讨论(0)
提交回复
热议问题