【问题标题】:Access value of JavaScript variable by name?按名称访问 JavaScript 变量的值?
【发布时间】:2010-12-09 15:20:28
【问题描述】:

您好,可以通过名称访问 JavaScript 变量的值吗?示例:

var MyVariable = "Value of variable";


function readValue(name) {
     ....
}


alert(readValue("MyVariable"));

这可能吗,所以输出是“变量的值”?如果是,我该如何编写这个函数?

谢谢

【问题讨论】:

  • 请检查我的编辑。

标签: javascript


【解决方案1】:

全局变量是在window对象上定义的,所以你可以使用:

var MyVariable = "Value of variable";
alert(window["MyVariable"]);

【讨论】:

  • -1 您需要在 MyVariable 之前删除 'var' 以使其成为窗口对象的一部分。
  • @craftsman :这不是真的。在全局范围内声明的所有变量都是窗口对象的一部分。
  • 为什么人们将这些答案标记为正确?只有当 OP 中的所有内容都在全局上下文中时,它才是正确的。正确的答案要么需要添加“上下文”对象,要么修复糟糕的设计。
【解决方案2】:

是的,你可以这样做:

var MyVariable = "Value of variable";
alert(window["MyVariable"]);

【讨论】:

  • 这个是对的,有兴趣了解更多的,就叫bracket notation。
  • 这是一个很棒的链接,尼克。感谢分享!
  • ..您使用 window[] 的原因是因为 MyVariable 在全局范围内,这使其成为 window 对象的属性。 (window对象是客户端JS中的全局对象)
  • 你能用在另一个作用域中声明的变量来做到这一点吗?比如,如果我在函数testFunc(){ var testVar } 中声明了一个变量,我可以使用testFunc["testVar"] 访问它吗?
【解决方案3】:
var MyVariable = "Value of variable";    
alert(readValue("MyVariable"));    

// function readEValue(name) { readevalue -> readvalue // always do copy-paste to avoid errors  
function readValue(name) {   
 return window[name]   
}   

就是这样;o)

【讨论】:

  • 行尾(回车)在我的回答中不起作用。对不起。注意重构它们。
  • 在尝试提醒返回值之前不需要声明函数吗??
【解决方案4】:
var sen0=1;
if(window["sen"+n] > 0){
}

【讨论】:

    【解决方案5】:

    试试这个^_^

    var MyVariable = "Value of variable";
    
    alert(readValue("MyVariable"));
    
    function readValue(name) {
        return eval(name)
    }
    

    【讨论】:

    • 如果您对字符串进行硬编码,那么您可以验证它是否安全......或者只是删除引号并正常使用名称。如果变量的名称在字符串中,那么我非常确定它将来自无法安全审核的外部某处(AJAX 响应、数据库内容等)。
    【解决方案6】:

    我尝试了下面的函数,该函数由 Nicolas Gauthier 通过 Stack Overflow 发布,通过命名从字符串中获取函数,当与变量名称一起使用时,它返回变量的值。

    它处理带点的变量名称(对象的值)。它适用于全局变量和用 var 声明的变量,但不适用于用 'let' 定义的变量,这些变量在被调用的函数中不可见。

    /***
     * getFunctionFromString - Get function from string
     *
     * works with or without scopes
     *
     * @param  string   string  name of function
     * @return function         by that name if it exists
     * @author by Nicolas Gauthier via Stack Overflow
     ***/
    window.getFunctionFromString = function(string)
    {
        let scope = window; let x=parent;
        let scopeSplit = string.split('.');
        let i;
    
        for (i = 0; i < scopeSplit.length - 1; i++)
        {
            scope = scope[scopeSplit[i]];
    
            if (scope == undefined) return;
        }
    
        return scope[scopeSplit[scopeSplit.length - 1]];
    }
    

    【讨论】:

      【解决方案7】:
      //Ran into this today
      
      //Not what I want
      var test = 'someString';
      var data = [];
      data.push({test:'001'});
      console.log(test); --> 'someString';
      console.log(data); --> 
       (1) [{…}] 
          0: {test: "001"}        //wrong
      
      
      //Solution
      var obj = {};
      obj[test] = '001';
      data.push(obj);
      console.log(data); -->
      (2) [{…}, {…}]
          0: {test: "001"}        //wrong
          1: {someString: "001"}  //correct
      

      【讨论】:

      • 我意识到“错误”和“正确”是用词不当。我应该说的是:错误:不是我想要的,正确的是:我想要的
      猜你喜欢
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 2021-12-17
      相关资源
      最近更新 更多