【问题标题】:jQuery Convert a string into an object without eval()jQuery 不使用 eval() 将字符串转换为对象
【发布时间】:2012-03-30 04:56:28
【问题描述】:

我有以下变量:

    var opday = [],
        opcategory = [],
        opbarrio = [];

然后我在别处:

        var myparent = $me.parent().attr('data-filter-group');

假设 myparent 返回“类别”,我如何从引用变量 opcategory 的字符串创建一个对象??

例如:

var myarray = "op" + myparent;

这样我就可以像这样使用那个对象了:

alert(myarray[2]);

谢谢!

【问题讨论】:

  • 您好,您是否有不想使用eval() 的原因?由于您使用的是 jQuery,您可以使用 globalEval
  • 人们告诉我这是邪恶的
  • eval() 并不邪恶,就我所听到的而言。如果您正确使用它并且仅在您已验证正确的输入上使用它,那还不错。我的意思是.. 如果有人可以访问 firebug,他们可以在他们想要的任何网站上使用eval(),因为他们有一个为他们运行 javascript 的控制台。 :)
  • @NoLifeKing 在这种特殊情况下使用eval 将是邪恶、丑陋和低效的。
  • @PeterOlson 啊,没有考虑效率..不知道 eval() 会很慢。或者我误解了这个问题。

标签: jquery string variables object


【解决方案1】:

我认为对象是最好的解决方案:

var op = {
  day: [],
  category: [],
  barrio: []
};

你可以这样引用:

var myarray = op[myparent];

还有一个不太优雅(阅读:邪恶和骇人听闻)的解决方案,只有在 opday 和其他是全局变量时才有效。所有全局变量都是window 对象的属性,它允许您动态创建和访问变量:

var myarray = window["op" + myparent];

【讨论】:

    【解决方案2】:

    您可以将在全局范围内声明的变量寻址为:

    var myCustomVar = "my value"
    , nameOfVar = "myCustomVar"
    alert(this[nameOfVar])
    // you get "my value"
    

    但是,如果将其粘贴在函数内部,这将不起作用:

    var answer = (
        function(){
            var myvar = "the value"
            return this["myvar"]
        }
    ).call({})
    // answer will be 'undefined'
    

    明确地将范围变量绑定到 this 可以:

    var answer = (
        function(){
            this.myvar = "the value"
            return this["myvar"]
        }
    ).call({})
    // 'answer' will be "the value"
    

    【讨论】:

      【解决方案3】:

      如果您需要通过名称访问全局变量,无论如何都可以这样做:

      var myarray = window["op"+myparent];
      

      但将它们全部放入 map 对象会更好。

      【讨论】:

        猜你喜欢
        • 2013-04-15
        • 2016-09-23
        • 2015-09-04
        • 2013-06-20
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 2016-11-18
        • 2015-08-10
        相关资源
        最近更新 更多