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

时间:2016-07-22 02:59:01

标签: 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 = 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 个答案:

答案 0 :(得分:3)

{key: "val"}是一个块,key:是一个标签。

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

({key: "val"})
0,{key: "val"}
[{key: "val"}][0]

答案 1 :(得分:0)

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