Javascript:如何使用eval返回或解析对象文本?

Javascript:如何使用eval返回或解析对象文本?,javascript,node.js,eval,object-literal,Javascript,Node.js,Eval,Object Literal,我有一个小的库,可以从中提取字符串并构造对象。例如,'-key val'创建{“key”:“val”}。然而,我试图扩展输入字符串的语法以获取简单的对象文本,例如'-key“{key:'val'}”,它应该产生{key:{key:“val”},但是结果只是{key:“val”} 为什么eval只返回“val”,而不返回整个对象?还有比我的解决方案更安全的替代方案吗 // my code before the fix var arg = '{key: "val"}' var result = ev

我有一个小的库,可以从中提取字符串并构造对象。例如,
'-key val'
创建
{“key”:“val”}
。然而,我试图扩展输入字符串的语法以获取简单的对象文本,例如
'-key“{key:'val'}”
,它应该产生
{key:{key:“val”}
,但是结果只是
{key:“val”}

为什么eval只返回“val”,而不返回整个对象?还有比我的解决方案更安全的替代方案吗

// my code before the fix
var arg = '{key: "val"}'
var result = eval(arg)
// result is "val"
下面是我的补丁,非常不安全

const fmt = require('util').format
var arg = '{key: "val"}'
var result = eval(fmt('()=>(%s)', arg))()
// result is { key : "val" }
{key:val}
是一个块,
key:
是一个标签

如果您想将其解析为对象初始值设定项,请在需要表达式的位置使用它,例如

({key: "val"})
0,{key: "val"}
[{key: "val"}][0]
var arg='{key:“val”}'
var结果=eval(arg)

当eval解析它时,{将被认为是代码块,
键:
是一个标签 所以我认为你应该使用
var arg='{key:“val”}'
var result=eval(“(“+arg+”)”)
//结果{key:“val”}

{}
视为一个块,将
视为一个标签,因此其计算结果为
“val”
。要将其作为对象文字进行计算,需要将其括在括号中。这基本上就是修复程序所做的,尽管是以复杂的方式。相反,只需执行
eval(“(“+arg+”)”)