Javascript:转换代码字符串并返回

teo*_*one 3 javascript string type-conversion ecmascript-6

假设我有这样的代码:

var cfg = {
  config: {
    fields: {
      name: {
        type: 'text'
      },
      age: {
        type: 'number'
      }
    },
    actions: [
      {
        label: 'Print',
        cb: (model) => {
          console.log(model);
        }
     }
   ]
  },
  data: {name: 'Jhon', age: 23}
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为字符串(以让用户编辑它),然后将其转换回可执行代码,知道如何实现这一点吗?

我尝试使用JSON.stringifyandJSON.parse但这当然会剥夺这些功能。.toStringreturns "[object Object]",迭代对象并.toString在值是字符串、函数或数字时进行调用,还有其他想法吗?

ASD*_*rte 5

Function构造函数将代码作为字符串, eval和其他一些函数也是如此。但是,如果可以以任何方式避免,请不要将代码转换为字符串或向后转换,因为这样做可能会遇到安全问题、调试能力以及许多其他问题。

将代码转换为字符串有点烦人,因为您需要确保不重新声明变量,并且新上下文中的所有内容在语法上都是正确的,例如请注意,objf属性在声明中再次命名,因为它稍后被赋予eval这将它放置在需要名称的全局范围内。

let obj = { f: function f() { let stuff = "hi"; console.log("hi"); } };
let code = obj.f.toString();
console.log(code);
eval(code);
f();
Run Code Online (Sandbox Code Playgroud)

请注意,JSON.stringify有一个可选replacer参数,可用于自定义流程。

我再次强烈建议尽可能避免任何代码与字符串之间的转换,在所有正常情况下,这是不需要的,也不应该这样做。