Javascript:如何使用eval返回或解析对象字面值?

问题描述:

我有一个小型的库,它接受字符串并构造它们之外的对象。例如,'-key val'创建了{"key": "val"}。然而,我试图扩展输入字符串的语法以获取简单的对象文字,例如'-key "{key: 'val'}"',它应该产生{"key" : {"key" : "val"}}但是结果只有{"key" : "val"}Javascript:如何使用eval返回或解析对象字面值?

为什么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" } 
+2

的'{}'被视为一个块,'key'作为标签,所以这个评估为'“val”'。要将其评估为对象文字,您需要将其包装在括号中。这基本上就是你的修补程序所做的,尽管是以一种复杂的方式。相反,只要执行'eval('('+ arg +')')'。 – 2016-07-22 03:02:14

{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"}