我有一个小文件库,它接受字符串并从中构造对象。例如'-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" }
答案 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"}