【问题标题】:how to recognize in javascript dictionary如何在javascript字典中识别
【发布时间】:2016-01-14 09:28:18
【问题描述】:

有什么办法可以取一个JavaScript字符串比如

"program[one] = js"

并在此字符串上运行并使其可访问,以便在我键入时

console.log(program.one); 

我会得到js

【问题讨论】:

  • 您的program 变量在哪里定义?
  • 听起来你想要evil,我的意思是eval

标签: javascript arrays dictionary


【解决方案1】:

您可以使用eval 方法(尽管不强烈推荐)并执行以下操作:

var program = {};

var str = "program['one'] = 'js'";

eval(str);

console.log(program.one);

【讨论】:

    【解决方案2】:

    你在考虑这个倒退。

    你想要的是一些代表你可以解析的 JS 对象的 JSON。

    var json = '{"program":{"one": "js"}}';
    var obj = JSON.parse(json);
    
    obj.program.one // js
    

    即使您不考虑这个问题,您确实需要返回并找出为什么您需要使用类似“program[one] = js”,因为这种做法是错误的,只会导致心痛。

    DEMO

    【讨论】:

      【解决方案3】:

      假设您只想允许字符串写入program,并且唯一有效的字符串格式为program[name] = value,则有一个不坏的解决方案:

      var program = {};
      
      var input = "program[one] = js";
      
      var patt = /program\[(.*?)\] = (.*)/;
      var result = patt.exec(input); // Array [ "program[one] = js", "one", "js" ]
      
      program[result[1]] = result[2];
      
      console.log(program.one); // js
      

      编辑:如果您需要支持引号和分号结尾,您可能需要调整正则表达式 (patt)。


      使用evalconsidered harmful。如果您无法控制传递给它的字符串(通常是这种情况),它可以运行任何允许代码注入的代码。 不,不要假装你可以做我上面对任意程序所做的事情。另一方面,如果您可以控制字符串,则不需要 eval - 尽管我接受如果您使用 metaprogramming by code generation in javascript 可能会很实用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        • 2012-09-11
        • 1970-01-01
        相关资源
        最近更新 更多