Javascript类对象字符串到对象

Javascript Object-like-string to Object

本文关键字:对象 字符串 Javascript      更新时间:2023-09-26

我将验证规则存储在一个HTML属性中。

字符串文本中的验证规则如下所示:

'{required:true, minlength:2, maxlength:100}'

要将其转换为javascript对象,我可以使用eval(string_literal)

然而,eval是…令人不愉快的。

是否有替代使用eval将对象(如string)转换为对象?

约束是我不能使用JSON

使用eval来自您信任的来源的良好控制的数据是好的。在最坏的情况下,解析器的启动成本可以忽略不计。当然,使用eval与来自您信任的来源的控制不良的数据是一个坏主意tm

如果您不使用eval,恐怕没有真正的快捷方式,您将不得不自己解析字符串。如果它真的只是一个简单的列表,如所示,几个split调用正则表达式就可以完成它,不需要一个完整的解析器。

快速即兴示例(live copy | source):

(function() {
  var data = '{required:true, minlength:2, maxlength:100}';
  var entries, index, entry, parts;
  entries = data.substring(1, data.length - 2).split(/, ?/);
  for (index = 0; index < entries.length; ++index) {
    entry = entries[index];
    parts = entry.split(/: ?/);
    display("Key '" + parts[0] + "', value '" + parts[1] + "'");
  }
  function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = String(msg);
    document.body.appendChild(p);
  }
})();

当然,这充满了假设(最值得注意的是,值永远不会是包含逗号或冒号的字符串),但是,如果数据足够简单,您可以避免使用完整的解析器。