Javascript: 如何 return 或使用 eval 解析对象字面量?

Javascript: How to return or parse an object literal with eval?

我有一个小库,可以获取字符串并从中构造对象。例如 '-key val' 创建 {"key": "val"}。然而,我正在尝试扩展输入字符串的语法以也采用简单的对象文字,例如 '-key "{key: 'val'}"' 应该产生 {"key" : {"key" : "val"}} 但结果仅为 {"key" : "val"}

为什么只评估 return "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 result = eval(arg)
eval解析时,'{'会被认为是代码块,key:是标签 所以我认为你应该使用
var arg = '{key:"val"}' var result = eval('('+arg+')') //result {key:"val"}