【问题标题】:setting javascript variable name from a variable从变量设置 javascript 变量名
【发布时间】:2010-10-14 15:59:00
【问题描述】:

您好,是否可以从另一个变量中设置 var 名称?

比如我每次调用函数时都有不同数字的var test,所以我希望数字是变量名,例如var test 包含“1”,因此新变量为var 1。然后我想在这个数字“单词”上添加一个单词,使新变量变为var 1word

var newNumber = 1;
var newNumber += 'word';
       ^ becomes ' 1 '
the new var name becomes ' 1word '

编辑:

function getNumber(newNumber) //  Gets a number, for this example say its the number '1' 
    {

        var newNumber += "something";  //The new varaible will be named "1something" (something can be any word)

    }

希望我没有让它听起来太混乱,谢谢。

【问题讨论】:

  • 在这种特殊情况下,这是一个愚蠢的想法。动态更改单个局部变量的名称是没有意义的。只需使用通用名称即可。但是,在其他情况下(涉及多个变量),这是一种非常强大的技术。
  • 请注意,您不能在 Javascript 中以数字字符开头的变量名。
  • 我不是试图重命名一个变量,而是试图使用一个变量的值来创建一个以该值作为名称的新变量。
  • @Robusto 我不会以数字开头,这只是一个例子。
  • 你误会了。自定义新变量的名称没有意义。

标签: javascript


【解决方案1】:

Javascript 中的所有内容基本上都只是一个关联数组。这意味着您可以或多或少地互换使用数组访问表示法和点表示法。数组访问表示法提供了您正在寻找的功能:

object["name"]="foo"

将在给定对象上设置名称属性。

如果要创建全局变量,请使用窗口对象

window["name"]="foo"

您也可以在方括号中使用表达式或变量

window[someVaribale]="foo";
window["name_" + someVariable]="foo";

【讨论】:

    【解决方案2】:

    您可以将变量放在一个对象中并使用字符串键索引该对象。

    例如:

    var myData = { };
    myData.x1 = 42;
    alert(myData["x" + 1]);
    

    您还可以使用对象表示法初始化对象:

    var myData = { key: 42 };
    

    【讨论】:

      【解决方案3】:

      据我所知,您想创建一个以另一个变量的 contents 命名的变量。

      不确定是否可以直接执行此操作,但您可以使用对象轻松完成。

      var obj = new Object();
      obj['original'] = 'name';
      obj[obj]['original']] = 'another name';
      

      对象现在具有 this 结构:

      {
        'original': "name",
        'name': "another name" #variable named after original's contents
      }
      

      【讨论】:

      • 谢谢我想要的,我之前没有使用过对象,你能给我一个简单的例子,我将如何提醒创建的新对象/变量?
      • alert(obj['name']) 或 alert(obj[obj['original']])
      • 答案很好。谢谢。仅在 obj 的第 3 行中,第一个封闭的方括号 ']' 不会出现。意味着它应该是这样的; var obj = new Object(); obj['original'] = 'name'; obj[obj['original']] = 'another name';
      【解决方案4】:

      如果您将所有变量存储在一个对象/数组中,那么有一种简单的方法可以实现这一点。请记住,在 javascript 中,数组是对象,对象是对象等:p

      var mystuff = {}; // new object literal
      
      var numVariables = 10;
      
      for (var i = numVariables - 1; i >= 0; i--){
          var newkey          = i + "_my_index";
          mystuff[newkey]     = "some stuff";
      }
      

      【讨论】:

        【解决方案5】:

        如果您在示例中使用数字“变量”(var 1; var 2;) 你应该使用数组;

        var list=[]; //declaration
        
        list[1]="something"; //create a "variable" 1 with 'something' inside
        
        list[2]="other thing"; //create another variable
        
        var name=3;
        var value="Hello";
        
        list[name]=value; //works too
        
        alert( list[1] ); //something
        

        如果你使用单词作为“关键字”,你应该使用对象而不是数组

        var list={}; //declaration
        
        list["car1"]="Honda";
        list["car2"]="Toyota";
        list["fuit"]="Apple";
        
        var name="greeting";
        var value="Hello";
        
        list[name]=value; //works too
        
        alert( list["car2"] ); //Toyota
        

        希望你能理解。

        【讨论】:

          【解决方案6】:

          我们需要更多关于您要完成的任务的解释。这看起来是一个非常糟糕的主意。很可能您真的应该只使用命名索引数组。例如。

          var stuff = {}
          stuff[1] = "one";
          stuff["name"] = "david";
          

          【讨论】:

          • 假设我将一个数字传递给一个函数,然后将其存储在一个变量中。 “数字”的值(传递给函数)成为新变量的名称。
          • 我想,嗯,设计先生,是在暗示这是一个 X-Y 问题。你认为可变变量 (Y) 可以解决问题 (X),但你没有说 X 是什么。 (变量变量是,顺便说一句,是可怕的噩梦,应该避免)。
          • 可能有更好的方法来做不涉及动态确定变量名称的事情。你能发布你的代码吗?
          【解决方案7】:

          我对您的问题感到困惑,但您似乎想要更改无法完成的变量名称。您可以创建一个具有所需名称的新变量,并为其分配您想要的任何值。

          我的问题是你为什么要这样做?

          【讨论】:

          • 我有一个传递 elementID 的函数。我想用 elementID 中的值的名称创建一个新变量。
          • 我认为使用数组、对象或某种循环可能会更好。没有看到你的代码,我不能肯定地说。
          【解决方案8】:

          您可以使用内置方法实现此目的: eval("你的javascript代码在这里");

          所以也许在你的情况下它会是这样的: eval("var yourNewName = \"" + yourOldVarValue + "\""); 然后取消你的旧变量。

          但正如其他人所表达的,我不明白为什么或在什么情况下你会想要重命名一个变量(除非它是为了一些奇怪的黑客技巧哈哈)。

          [未测试,因此此 eval 甚至可能不起作用:S]

          【讨论】:

          • 这是一个非常糟糕的做法,避免这样做。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          • 2010-11-04
          • 2023-03-24
          • 2019-12-23
          • 1970-01-01
          • 2011-07-20
          • 2011-08-22
          相关资源
          最近更新 更多